【Ubuntu】ファイル転送の基本:scp / rsync の使い分けと事故らない型
この記事で解決できること
scpとrsyncの 正しい使い分け が分かる- 「Permission denied」「転送されたはずなのに無い」などの 定番事故を即切り分けできる
- サーバ運用で 安全にファイルを運ぶ型 が身につく
結論(実務の型)
- 一発コピー・小規模 →
scp - 大量 / 定期 / 再実行前提 →
rsync - 事故る原因の8割は ①ユーザー ②パス ③権限 ④容量 のどれか
目次
前提(対象環境)
- OS:Ubuntu
- SSH接続可能
- ローカル ↔ サーバ、サーバ ↔ サーバ両方を想定
1. scp:単発コピーの基本
1-1. ローカル → サーバ
$ scp local.txt user@server:/path/to/dir/
1-2. サーバ → ローカル
$ scp user@server:/path/to/file.txt .
1-3. ディレクトリを丸ごと
$ scp -r mydir user@server:/path/to/
-r 忘れ=何もコピーされない(初心者あるある)
2. scp の事故パターン
2-1. Permission denied
原因候補:
- 書き込み権限がない
- ユーザーを間違えている
/root配下に置こうとしている
切り分け:
$ ssh user@server $ ls -ld /path/to/dir $ whoami
2-2. 転送された「はず」なのに見当たらない
原因:相対パスを誤解している
# NG: ホームディレクトリの tmp/ に入る $ scp file.txt user@server:tmp/ # OK: /tmp/ に入る $ scp file.txt user@server:/tmp/
3. rsync:実務で使う本命
3-1. 基本形(まずはこれ)
$ rsync -av src/ user@server:/path/to/dst/
オプションの意味:
-a:属性保持(ほぼ必須)-v:詳細表示-z:圧縮(遅い回線で有効)
4. rsync 最大の罠:スラッシュ問題
rsync -av src/ dst/ # 中身だけコピー rsync -av src dst/ # srcディレクトリごとコピー
は 意味が違う。
src/→ 中身だけコピーsrc→ srcディレクトリごとコピー
事故率が一番高いポイント。必ず意識する。
5. dry-run(事故防止の切り札)
本番前に必ず確認。
$ rsync -av --dry-run src/ user@server:/path/
表示された内容=実際に起きること
不安なら必須。
6. Permission denied(rsync編)
よくある原因:
- 書き込み先の権限不足
- 所有者違い
- sudoが必要
対処例(sudo rsync)
$ rsync -av --rsync-path="sudo rsync" src/ user@server:/root/path/
※ sudo権限がある前提
7. 容量不足で失敗するケース
症状:
- 転送途中で止まる
- エラーが曖昧
確認:
$ df -h $ du -sh src/
転送先ディスクが満杯だと失敗する(no space left on device)
8. scp と rsync の使い分けまとめ
| 用途 | 推奨 |
|---|---|
| 単発ファイル | scp |
| ディレクトリ | rsync |
| 再実行前提 | rsync |
| 大量データ | rsync |
やってはいけないこと
- パスを確認せず実行
-rを付け忘れる- dry-run無しで rsync
- root直下に投げる
コピペ用:安全テンプレ
# scp(単発) scp file.txt user@server:/path/ # rsync(安全) rsync -av --dry-run src/ user@server:/path/ rsync -av src/ user@server:/path/
検証環境
本記事のコマンドは Ubuntu 24.04 LTS / bash 5.2 で動作確認済みです。