【Ubuntu】ファイル転送の基本:scp / rsync の使い分けと事故らない型

scp / rsync の基本 - ファイル転送

この記事で解決できること

  • scprsync正しい使い分け が分かる
  • 「Permission denied」「転送されたはずなのに無い」などの 定番事故を即切り分けできる
  • サーバ運用で 安全にファイルを運ぶ型 が身につく

結論(実務の型)

  • 一発コピー・小規模scp
  • 大量 / 定期 / 再実行前提rsync
  • 事故る原因の8割は ①ユーザー ②パス ③権限 ④容量 のどれか

目次

  1. scp:単発コピーの基本
  2. scp の事故パターン
  3. rsync:実務で使う本命
  4. rsync 最大の罠:スラッシュ問題
  5. dry-run(事故防止の切り札)
  6. Permission denied(rsync編)
  7. 容量不足で失敗するケース
  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/中身だけコピー
  • srcsrcディレクトリごとコピー

事故率が一番高いポイント。必ず意識する。

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 で動作確認済みです。

次に読む