Linux scpコマンド入門
SSH経由でファイルを転送する
scpは、SSH接続を利用してローカルとリモートサーバー間でファイルを安全にコピーするコマンドです。暗号化された通信でファイル転送を行えます。
こんな人向けの記事です
- サーバーにファイルをアップロード・ダウンロードしたい人
- SSH経由で安全にファイルを転送したい人
- ディレクトリごとまとめて転送したい人
Step 1scpの基本的な使い方
scpの基本構文は scp [送信元] [送信先] です。リモート側は ユーザー名@ホスト名:パス の形式で指定します。
ターミナル
# ローカル → リモート(アップロード)
scp file.txt username@hostname:/home/username/
# リモート → ローカル(ダウンロード)
scp username@hostname:/var/log/app.log ./
# リモートのファイルを別名で保存
scp username@hostname:/etc/nginx/nginx.conf ./nginx_backup.conf
Step 2よく使うオプション
scpの主要なオプション一覧です。
| オプション | 説明 |
|---|---|
-r | ディレクトリを再帰的にコピー |
-P | ポート番号を指定(大文字P) |
-i | 秘密鍵ファイルを指定 |
-p | タイムスタンプとパーミッションを保持 |
-C | 転送データを圧縮 |
-q | 進捗表示を非表示 |
ポート指定は大文字 -P
sshコマンドのポート指定は小文字 -p ですが、scpでは大文字 -P です。よく間違えるポイントなので注意してください。
Step 3ディレクトリの転送
ディレクトリごと転送するには -r オプションを使います。
ターミナル
# ディレクトリをアップロード
scp -r ./myproject username@hostname:/home/username/
# ディレクトリをダウンロード
scp -r username@hostname:/var/www/html ./backup/
# 複数ファイルを一度に転送
scp file1.txt file2.txt username@hostname:/tmp/
# ワイルドカードで転送
scp username@hostname:/var/log/*.log ./logs/
Step 4SSH configとの連携
~/.ssh/config に設定があれば、scpでもその名前を使えます。
ターミナル
# SSH configが設定済みなら短い名前で転送
scp file.txt myserver:/home/alice/
scp -r ./deploy myserver:/var/www/
# ポートや鍵の指定も不要になる
scp production:/var/log/app.log ./
Step 5実践的な活用例
日常的なサーバー管理でよく使うscpのパターンです。
ターミナル
# 設定ファイルのバックアップ
scp myserver:/etc/nginx/nginx.conf ./backup/nginx.conf.bak
# デプロイ(ファイルをサーバーに配置)
scp -r ./dist/* myserver:/var/www/html/
# サーバー間のファイル転送
scp server1:/data/backup.tar.gz server2:/data/
# 大きなファイルを圧縮して転送
scp -C large_file.dat myserver:/tmp/
大量のファイル転送にはrsyncが最適
scpは小規模なファイル転送に向いています。大量のファイルや差分転送が必要な場合は rsync コマンドの方が効率的です。rsyncは変更があったファイルだけを転送できます。