Linux入門:コマンド操作のきほん
scp でファイル転送
scp でファイル転送 とは
離れたサーバへ安全にファイルを転送するscpコマンドを、ターミナルで実際に操作して習得します。本レッスンでは、scp でファイル転送 の基本から実際の使いどころまでを整理し、現場で迷わず使える形に落とし込みます。
scp とは
scp (Secure Copy) は SSH の上に乗ったファイル転送ツールで、リモートホストとの間でファイルやディレクトリを安全にコピーします。cp のリモート版と考えると分かりやすく、シェルから 1 行で完結する手軽さが魅力です。
本コースの実行環境ではリモート接続を行うことができないため、本レッスンでは構文・典型例・落とし穴を学び、ローカルでの代替手段として cp -r を使う方法を示します。
基本構文
ターミナル
scp [オプション] コピー元 コピー先「リモート」を指定する書き方は ユーザー@ホスト:パス です。コピー元・先のどちらでもリモート指定できます。
ターミナル
# ローカル → リモート (アップロード)
scp local.txt deploy@example.com:/tmp/
# リモート → ローカル (ダウンロード)
scp deploy@example.com:/var/log/app.log ./
# リモート → 別のリモート (デフォルトはローカル経由で中継。直接転送は -R)
scp alice@host1:/data/a.txt bob@host2:/data/主要オプション
| オプション | 役割 |
|---|---|
-r | ディレクトリを再帰的にコピー |
-P ポート | SSH ポート指定 (大文字 P) |
-i 秘密鍵 | 秘密鍵を指定 |
-p | 元のタイムスタンプと権限を保持 |
-v | 詳細表示 |
-l 帯域 | 転送速度制限 (Kbit/s) |
ssh の -p (小文字) はポート、scp の -P (大文字) もポートですが、文字種が違うので注意。
図解 scp の流れ
内部的には SSH の認証を再利用しているので、ssh deploy@example.com で繋がる相手なら scp も同じ鍵・同じユーザー名でそのまま動きます。
ディレクトリの転送
ターミナル
# dist ディレクトリごと丸ごとアップロード
scp -r dist/ deploy@example.com:/var/www/myapp/
# ログディレクトリを丸ごとダウンロード
scp -r deploy@example.com:/var/log/myapp/ ./logs/-r を忘れるとディレクトリは無視されてエラーになります。
ポートを指定する
本番サーバーが SSH を非標準ポートで運用しているケースは多いです。
ターミナル
scp -P 2222 -i ~/.ssh/id_ed25519 local.txt deploy@example.com:/tmp/これを覚えておかないと、Permission denied や Connection refused で時間を浪費します。
~/.ssh/config を使う
前レッスンで触れた ~/.ssh/config は scp でも有効です。
プレーンテキスト
Host prod
HostName prod.example.com
User deploy
Port 2222
IdentityFile ~/.ssh/id_ed25519この設定があれば scp file.tar.gz prod:/tmp/ のように短く書けます。
大きなディレクトリやファイル数の多い転送には
scpではなくrsyncを使うのがベターです。scpは転送のたびに毎回ファイル全体を送りますが、rsyncは差分転送で大幅に高速化できます。次のレッスンで扱います。
よくあるエラー
Permission denied (publickey): 鍵が登録されていない /-i指定が間違っているNo such file or directory: 相手側のパスが間違い、または書き込み権限がないscp: ...: Is a directory:-r忘れHost key verification failed: 相手のホスト鍵が変わった。中間者攻撃の可能性、または再構築されたサーバー
sftp との違い
sftp は SSH 上の対話的ファイル転送ツールで、get/put/ls などの FTP 風コマンドを使います。インタラクティブに何度もやり取りしたい場合や、ディレクトリブラウズしながら選んで転送したい場合は sftp が向きます。1 ショット転送なら scp の方が早いです。
ローカル代替例
本コースの executor ではリモート接続不可なので、コンセプトを確認するなら cp で十分です。
ターミナル
# scp の代わり ローカル内でディレクトリごとコピー
mkdir -p /tmp/src /tmp/dst
echo "hello" > /tmp/src/a.txt
echo "world" > /tmp/src/b.txt
cp -r /tmp/src/. /tmp/dst/
ls /tmp/dst/
# a.txt b.txtリモート相手の代わりにディレクトリで dst を用意しただけで、構造はそっくりです。手元の Linux 環境では ssh localhost と scp を使って自分自身を相手に練習することもできます。
ファイル転送は本番運用で頻繁に発生します。
scpの構文を毎回検索せずに口で言えるようになると、それだけで現場での印象がだいぶ変わります。
大容量転送のコツ
大きなファイルを scp する場合、まずローカルで tar + gzip してから 1 ファイルにまとめて送るのが定番です。たくさんの小ファイルを 1 つずつ転送するよりも、ハンドシェイクが減って圧倒的に速くなります。
ターミナル
# ローカルで圧縮 → 転送 → リモートで展開
tar czf logs.tar.gz logs/
scp logs.tar.gz deploy@example.com:/tmp/
ssh deploy@example.com 'cd /tmp && tar xzf logs.tar.gz'まとめ
scpは SSH 上のファイル転送ツール。cpのリモート版- リモート指定は
ユーザー@ホスト:パス - ディレクトリは
-r、ポートは-P(大文字) - 差分転送なら
rsync、対話ならsftpが向く - ローカルでは
cp -rで似た構造を練習できる - 大容量は
tar+gzipで 1 ファイルにまとめてから送る
次のレッスン
次は rsync で効率的に同期 で、離れたサーバへ安全にファイルを転送するscpコマンドを、ターミナルで実際に操作して習得します を学びます。
事前確認 — 進む前に次の 3 つができることを確認しましょう。
- scp の要点を自分の言葉で説明できる
- このレッスンの最小コード (または操作手順) を見ずに書ける
- 練習問題やクイズで間違えた箇所を読み直して理解した
理解度チェック (30 秒)
Q. scp とは何か、1 文で説明してください。
A. 本文の「このレッスンで分かること」または冒頭の説明文を見直し、自分の言葉で要約できれば OK。詰まったら本レッスンの最初の H2 セクションを読み返してみましょう。
関連レッスン