サーバ間でファイルを転送したいとき、定番なのが scp と rsync です。どちらもSSH経由で安全に転送できますが、使いどころが違います。実例と違いをまとめます。
scp:シンプルにコピー
scpは、SSHを使ってファイルを そのままコピー します。
# ローカル → リモート
scp file.txt user@server:/var/www/
# リモート → ローカル
scp user@server:/var/log/app.log ./
# ディレクトリごと(-r)
scp -r ./dir user@server:/var/www/
シンプルで分かりやすく、単発のコピーに向きます。
rsync:差分同期で賢く
rsyncは、差分だけを転送して同期します。同じファイルは送り直さないので、2回目以降や大量ファイルで圧倒的に速く、途中で止まっても再開できます。
rsync -av ./dir/ user@server:/var/www/dir/
オプションの意味は、a=アーカイブ(権限・時刻を保持)、v=詳細表示。よく使う定番です。
rsyncの便利オプション
rsync -avz ./dir/ user@server:/dst/ # z=圧縮して転送(回線が細い時)
rsync -av --delete ./dir/ user@server:/dst/ # 送信元に無いファイルを送信先から削除(完全同期)
rsync -av --dry-run ./dir/ user@server:/dst/ # 実際には転送せず結果を確認(安全確認)
--delete は「完全に同じ状態にする」ときに強力ですが、消す方向なので --dry-run で必ず事前確認します。
scpとrsyncの違い(使い分け)
| scp | rsync | |
|---|---|---|
| 転送 | 毎回まるごと | 差分のみ |
| 速度(再転送) | 遅い | 速い |
| 再開 | 不可 | 可能 |
| 向き | 単発コピー | 定期同期・大量ファイル・バックアップ |
まとめ
単発でサッとコピーなら scp、差分同期・大量ファイル・定期バックアップなら rsync。rsyncは -av、圧縮は -z、完全同期は --delete(+--dry-runで確認)が定番です。用途で使い分ければ、サーバ間の転送が安全で速くなります。