ローカル・リモート間でファイル転送を行うSCPコマンドの使い方
2017年の2月に、このブログを立ち上げた際、合わせて、ラズパイを始めました。当初、windows しか触ったことがなく、コマンド中心の LINUX には相当なコンプレックスがありました。
知識もない癖にラズパイサーバを複数台使っていて、その間のファイル転送には FTP を使用していました。
しかし、当コマンドを教えてもらうと、LINUX 間のファイル転送が驚くほど簡単に出来ることがわかり感動したものです。
そこで、この記事では 「SCPコマンドの使い方」を改めて丁寧に説明しました。合わせて、SCPコマンドの注意点と、遭遇するであろうエラーメッセージも載せておきました。
SCPコマンドは、sshプロトコルを使用してファイルを転送しますので、ネットワーク通信は暗号化されます。このため、安全にファイルの転送を行うことができます。
また、このコマンドは、ほぼ全ての Linuxディストリビューションに標準で搭載されていますので、追加のソフトウェアをインストールする必要もありません。
この便利なコマンドを覚えて、皆様も快適な LINUX ライフを満喫ください。
SCPコマンドの構文
SCPコマンドの構文とオプションについて解説します。
scpコマンドの構文
scp [オプション] コピー元 コピー先
コピー元とコピー先の内容は次のように記述します。
但し、ローカルホストの場合は、「ユーザ名 + @ + IPアドレス (or ホスト名)+ :」を省略することが出来ます。
【コピー元】
ユーザ名 + @ + IPアドレス(or ホスト名) + : + コピーしたいファイル
【コピー先】
ユーザ名 + @ + IPアドレス (or ホスト名)+ : + 保存先のディレクトリ(パス)
オプション
オプションはたくさんありますが、良く使用するであろうもののみ記載しておきます。
オプション | 意味 |
---|---|
-P | 転送元ファイルのタイムスタンプ及びパーミッションを保持 |
-r | ディレクトリ内を再帰的にコピー |
SCPコマンドの使い方
下記のようなローカルホストとリモートホストの間でファイルの転送を行う前提で、それぞれの例を示します。
ローカルホストからリモートホストへのファイル転送
ローカルホストのホームディレクトリ(/home/pi)にある test1.txt を、リモートホストのホームディレクトリへ(/home/pi)ファイル転送する構文は次のようになります。
さらに、ローカルホストのホームディレクトリで打鍵していますので、ローカルホスト側のディレクトリ(パス)は入力不要です。
scp test1.txt pi@192.168.254.116:/home/pi
【実行例】
scp test1.txt 192.168.254.116:/home/pi
pi@192.168.254.116's password:
test1.txt 100% 7077 6.9KB/s 00:00
リモートホストからローカルホストへのファイル転送
今度は、リモートホストのホームディレクトリにあるファイル out.txt をローカルホストのホームディレクトリへファイル転送する例を示します。
構文は次のようになります。(1) で示した転送先と転送元を逆さにするだけです。
scp pi@192.168.254.116:/home/pi/out.txt /home/pi
【実行例】
scp pi@192.168.254.116:/home/pi/out.txt /home/pi
pi@192.168.254.116's password:
out.txt 100% 196 0.2KB/s 00:00
ディレクトリ(パス)の転送
ディレクトリの転送も、オプションに -r を使えばOKです。
ローカルホストのホームディレクトリにあるディレクトリ jpg_181230 を、リモートホストのホームディレクトリへファイル転送します。
構文は次のようになります。
scp -r jpg_181230 pi@192.168.254.116:/home/pi
【実行例】
ディレクトリ配下のファイルが転送されたことがわかります。
scp -r jpg_181230 pi@192.168.254.116:/home/pi
pi@192.168.254.116's password:
naporitan.jpg 100% 181KB 180.7KB/s 00:00
onigiri.jpg 100% 180KB 180.3KB/s 00:00
omuraisu.jpg 100% 206KB 206.3KB/s 00:00
steak.jpg 100% 286KB 285.8KB/s 00:00
tonkatu.jpg 100% 238KB 237.6KB/s 00:00
次に、リモートホストに入って、フォルダの中身を見てみます。
ifconfig
~
wlan0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.254.116 netmask 255.255.255.0 broadcast 192.168.254.255
~
ls -l jpg_181230/
合計 1104
-rw-r--r-- 1 pi pi 185007 7月 26 20:40 naporitan.jpg
-rw-r--r-- 1 pi pi 211216 7月 26 20:40 omuraisu.jpg
-rw-r--r-- 1 pi pi 184654 7月 26 20:40 onigiri.jpg
-rw-r--r-- 1 pi pi 292667 7月 26 20:40 steak.jpg
-rw-r--r-- 1 pi pi 243285 7月 26 20:40 tonkatu.jpg
ご覧のように、送付された内容が確認できました。
ちょっと便利な使い方
ローカルホストとリモートホストのユーザ名が同じ場合、上記で説明した構文から「ユーザ名 + @」を省略できます。
scp test1.txt 192.168.254.116:/home/pi
【実行例】
scp test1.txt 192.168.254.116:/home/pi
pi@192.168.254.116's password:
test1.txt 100% 7077 6.9KB/s 00:00
ほんのちょっぴりですが入力が減りますね。
注意点とエラーメッセージ
最後にSCPを使用する際の注意点と、よく見かけるエラーメッセージ(Permission denied、not a regular file)を紹介します。
注意点
これ、SCPでは当たり前のことなのですが、十分、注意して使用しましょう。
scpを行う際、コピー先に同名のファイルやディレクトリがあると、警告もなく上書きされてしまいます。
Permission denied
実行権限がないファイルやディレクトリを転送しようとすると、本エラーが表示されます。
次のファイルは、読み込み権限がありません。
ls -l test.txt
-r--r----- 1 root root 336 10月 1 2017 test.txt
このファイルを転送しました。
scp test.txt 192.168.254.116:/home/pi
pi@192.168.254.116's password:
test.txt: Permission denied
ご覧のように、エラーメッセージ「Permission denied」が表示されました。
今回は、読み込み権限のせいで表記エラーメッセージが表記されましたが、書き込み権限のないフォルダ・ファイルを転送しようとした場合も同様のエラーメッセージが表示されます。
not a regular file
ディレクトリを転送する際、rオプションを付け忘れると本エラーが表示されます。
上記「ディレクトリ(パス)の転送」で使用した構文から rオプションを外して実行してみます。
scp jpg_181230 pi@192.168.254.116:/home/pi
pi@192.168.254.116's password:
jpg_181230: not a regular file
ご覧のように、表記のエラーメッセージ「not a regular file」が表示されました。
ディレクトリを含む場合、 rオプションが必須です。
なお、このコマンドは windows でも使用できますので、下記記事でご確認ください。
最後に
リモートサーバへの構文の書き方さえマスターすれば、SCPコマンドで手軽にファイルを転送できることがおわかりになったと思います。
さらに、ファイルだけでなく、ディレクトリ自体も転送できるので、ファイルを一つずつ転送する余計な手間もかからないので便利です。
ただ、手軽に行える転送ですが、同一のファイル名、ディレクトリ名がないことを事前に調べておかないと、大切なファイルやディレクトリが一瞬のうちに上書きされてしまうののは困りものです!十分注意してください。
これらを踏まえて SCPコマンドを使用すれば LINUXライフをより楽しむことが出来ると思います。
■思えば「コマンド」の記事も増えてきました
ディスカッション
コメント一覧
まだ、コメントがありません