【scp】Linuxでリモート・ローカル間でファイルを転送するコマンド

Linuxでローカルホストとリモートホスト間でファイルを転送する場合は、scpコマンドを使います。scpコマンドはSSHプロトコルを使用します。そのため、ネットワーク通信は暗号化されるので、安全にファイルの転送を行うことができます。

scpコマンドの使い方

scpコマンドの構文は以下の通りです。

$ scp [オプション] コピー元 コピー先 

主なオプション

-C 通信を圧縮する
-i 秘密鍵ファイル RSAまたはDSA認証の秘密鍵ファイルを指定する
-P ポート番号 ポート番号を指定する
-p オリジナルファイルの更新時間とモードを維持する
-r ディレクトリ内を再帰的にコピーする
-v プログレス情報を表示する
-1 SSH1を使用する
-2 SSH2を使用する
-4 IPv4を使用する
-6 IPv6を使用する

リモートホストからローカルにファイルをコピーする

リモートホストからローカルの「~/tmp」にコピーする例を3つ示します。

# ひとつのファイル「/home/user/file1」をコピーする例
$ scp user@192.168.10.1:/home/user/file1 ~/tmp

# ワイルドカードで複数のファイルをコピーする例
$ scp user@192.168.10.1:/home/user/*.txt ~/tmp

# 複数のファイルを、{}で囲んで「,」で区切り指定しコピーする例
$ scp user@192.168.10.1:/home/user/{file1,file2,file3} ~/tmp

scpコマンドでは「@」の前にリモートホストに接続するユーザー名を指定します。また、「@」の後に「ホスト名」または「IPアドレス」を指定し、「:」の後にファイルパスを指定します。

ローカルからリモートホストにファイルをコピーする

ローカルの「~/tmp/file1」をリモートホストの「/home/user/tmp/」にコピーする例です。

# scp コピー元ファイル ユーザ名@リモート・ホスト名:/リモート先のPATH

$ scp ~/tmp/file1 user@192.168.10.1:/home/user/tmp/

リモートホストから別のリモートホストにファイルをコピーする

リモートホスト「user1@192.168.10.1」のファイル「/home/user/tmp/file1」をリモート・ホスト「user2@192.168.10.2」の「/home/user/tmp/」へコピーする例です。

$ scp user1@192.168.10.1:/home/user/tmp/file1 user2@192.168.10.2:/home/user/tmp/

ディレクトリごとコピーを行う

ディレクトリごと再帰的にコピーする場合、「-r」オプションを指定します。

リモートホストの「/home/user/tmp」以下のファイルとディレクトリすべてをローカルの「~/tmp」にコピーする例です。

$ scp -r user1@192.168.10.1:/home/user/tmp ~/tmp

情報を保持したままコピーを行う

コピー元ファイルとディレクトリの更新時間、アクセス時間、パーミッションを保持したまま転送する場合は、「-p」オプションを指定します。ただし、所有者やグループの情報は引き継がれません。

リモートホストの「/home/user/tmp」以下のファイルとディレクトリすべてを、ファイルの更新時間、アクセス時間、パーミッションを保持してローカルの「~/tmp」にコピーする例です。

$ scp -p -r user@192.168.10.1:/home/user/tmp ~/tmp

# 複数のオプションは「-pr」のようにまとめてもよい 
$ scp -pr user@192.168.10.1:/home/user/tmp ~/tmp

イベント