scp
Linux の scp コマンドは、Linux 間でファイルやディレクトリをコピーするために使用します。
scp は secure copy の略で、Linux システムで SSH ログインに基づいて安全にリモートファイルをコピーするコマンドです。
scp は暗号化されますが、rcp は暗号化されません。scp は rcp の強化版です。
構文
scp [-346BCpqrTv] [-c cipher] [-F ssh_config] [-i identity_file]
[-J destination] [-l limit] [-o ssh_option] [-P port]
[-S program] source ... target
簡易的な書き方:
scp [option] file_source file_target
- file_source:コピー元のファイルを指定します。
- file_target:コピー先のファイル。形式は
user@host:filenameです(filename はコピー先ファイルの名前)。
オプション
- -3:2 つのリモートホスト間のファイルをローカルホスト経由で転送します。このオプションを使用しない場合、データは 2 つのリモートホスト間で直接転送されます。このオプションを使うと転送の進行状況表示が無効になる点に注意してください。
- -4: scp コマンドに IPv4 アドレスのみを使用させます
- -6: scp コマンドに IPv6 アドレスのみを使用させます
- -B: バッチモードを選択します(パスワードやパスフレーズの問い合わせを防止します)
- -C: 圧縮を有効にします(-C フラグを ssh に渡して圧縮機能を有効にします)
- -p:元のファイルの更新日時、アクセス日時、アクセス権限を保持します。
- -q: サイレントモード:進行状況表示と ssh(1) からの警告・診断メッセージを無効にします。
- -r: ディレクトリ全体を再帰的にコピーします。scp はツリーの走査中に見つかったシンボリックリンクをたどる点に注意してください。
- -T:厳密なファイル名チェックを無効にします。デフォルトでは、リモートホストからローカルディレクトリにファイルをコピーする際、scp は受信したファイル名がコマンドラインで要求したファイル名と一致するかをチェックし、リモート側から予期しない・不要なファイルが送られるのを防ぎます。OS やシェルによってファイル名のワイルドカードの解釈が異なるため、このチェックにより必要なファイルが拒否される場合があります。このオプションはチェックを無効にしますが、サーバーが予期しないファイル名を送らないことを完全に信頼できる必要があります。
- -v:詳細モード。scp と ssh(1) に処理の進行に関するデバッグメッセージを出力させます。接続、認証、設定の問題をデバッグする際に役立ちます。
- -c cipher: データ転送の暗号化に使用する暗号方式を選択します。このオプションは ssh(1) に直接渡されます。
- -F ssh_config: ssh 用の代替ユーザー設定ファイルを指定します。このオプションは ssh(1) に直接渡されます。
- -i identity_file: 公開鍵認証に使用する ID(秘密鍵)ファイルを選択します。このオプションは ssh(1) に直接渡されます。
- -l limit: 使用する帯域を Kbit/s 単位で制限します。
- -o ssh_option: ssh_config(5) の形式でオプションを ssh に渡すことができます。対応する scp コマンドラインフラグがないオプションを指定する場合に便利です。
- -P port:リモートホストへの接続ポートを指定します。小文字の ‘-p’ はファイルの更新日時とモードの保持用に予約されているため、大文字の ‘P’ を使用する点に注意してください。
- -S program: 暗号化接続に使用するプログラム名。このプログラムは ssh(1) のオプションを理解できる必要があります。
よく使うコマンド
ローカルからリモートへのコピー
コマンド形式:
scp local_file remote_username@remote_ip:remote_folder
或者
scp local_file remote_username@remote_ip:remote_file
或者
scp local_file remote_ip:remote_folder
或者
scp local_file remote_ip:remote_file
- 1 番目と 2 番目はユーザー名を指定しており、コマンド実行後にパスワードを入力する必要があります。1 番目はリモートのディレクトリのみを指定し、ファイル名は変わりません。2 番目はファイル名も指定しています;
- 3 番目と 4 番目はユーザー名を指定しておらず、コマンド実行後にユーザー名とパスワードを入力する必要があります。3 番目はリモートのディレクトリのみを指定し、ファイル名は変わりません。4 番目はファイル名も指定しています;
使用例:
scp /home/sunrise/test.c root@192.168.1.10:/userdata
scp /home/sunrise/test.c root@192.168.1.10:/userdata/test_01.c
scp /home/sunrise/test.c 192.168.1.10:/userdata
scp /home/sunrise/test.c 192.168.1.10:/userdata/test_01.c
ディレクトリをコピーするコマンド形式:
scp -r local_folder remote_username@remote_ip:remote_folder
或者
scp -r local_folder remote_ip:remote_folder
- 1 番目はユーザー名を指定しており、コマンド実行後にパスワードを入力する必要があります;
- 2 番目はユーザー名を指定しておらず、コマンド実行後にユーザー名とパスワードを入力する必要があります;
使用例:
scp -r /home/sunrise/app/ root@192.168.1.10:/userdata/app/
scp -r /home/sunrise/app/ 192.168.1.10:/userdata/app/
上記のコマンドは、ローカルの app ディレクトリをリモートの/userdata/app/ディレクトリにコピーします。
リモートからローカルへのコピー
リモートからローカルへコピーする scp コマンドは上記のコマンドとほぼ同じで、ローカルからリモートへコピーするコマンドの後ろ 2 つの引数の順序を入れ替えるだけです。
リモートマシンからローカルディレクトリにファイルをコピー
scp sunrise@192.168.1.10:/userdata/log.log /home/sunrise/
192.168.1.10 のマシンの/userdata/ディレクトリからlog.log ファイルをローカルの/home/sunrise/ディレクトリにダウンロードします。
ドキュメント