scp と rsync:ファイルのコピー
コンピューターとサーバー間でファイルを転送する 2 つのコマンドについて、scp で足りる場面、rsync が役立つ場面、末尾のスラッシュで他人のディレクトリを上書きしない方法を説明します。
更新日 2026年8月23日
グラフィカルクライアントは一度きりの編集には便利ですが、デプロイやバックアップはコマンド1つで行うほうが簡単です。
scp: 単発のコピー
構文は cp と同じで、マシンのアドレスを指定するだけです。
scp dump.sql root@203.0.113.10:/root/
scp root@203.0.113.10:/var/log/nginx/error.log ./
scp -r ./site root@203.0.113.10:/var/www/
1つ目のコマンドはファイルを送信し、2つ目はファイルを取得し、3つ目はディレクトリ全体をコピーします(-r)。
SSHが別のポートで動作している場合は、大文字の -P で指定します。
scp -P 2222 dump.sql root@203.0.113.10:/root/
~/.ssh/configファイルを使えば、コマンドはもっと短くなります: scp dump.sql vds:/root/。
rsync: 同期
rsync は差分のみを転送し、中断された転送を再開でき、進行状況も表示します。繰り返しのデプロイでは何倍も高速です。
rsync -avz --progress ./site/ root@203.0.113.10:/var/www/example.com/
| フラグ | 動作 |
|---|---|
-a | パーミッション、タイムスタンプ、リンクを保持 |
-v | ファイル一覧を表示 |
-z | ストリームを圧縮 |
--progress | 転送の進行状況を表示 |
--delete | 手元にないものはマシン上から削除 |
--exclude | 不要なものをスキップ |
クリーンなデプロイの例:
rsync -avz --delete \
--exclude '.git' --exclude 'node_modules' --exclude '.env' \
./site/ vds:/var/www/example.com/
マシンから手元にコピーを取得:
rsync -avz vds:/root/backup-2026-08-23.tar.gz ./backups/
コピー元の末尾のスラッシュは「ディレクトリの中身」を意味します。
./site/はファイルをターゲット内に配置し、./siteはターゲット内にsiteサブディレクトリを作成します。「デプロイしたはずのファイルがない」原因の半分はこれです。
--delete には注意
--delete フラグは、マシン上のディレクトリを手元の完全なコピーにします。余分なものは確認なしで削除されます。まずはドライランを行ってください。
rsync -avzn --delete ./site/ vds:/var/www/example.com/
-n フラグは何が起こるかを表示するだけです。確信が持てたら n を外します。
速度
ディスク速度はティアごとに制限されています。書き込みは1コアあたり60 MB/s(最低60、最大400)、読み取りはその2倍、バーストは制限の3倍で30秒間持続します。ネットワーク帯域は最大500 Mbit/sです。VDS-1では大きなアーカイブをアップロードすると書き込み制限に達しますが、これは想定内であり、障害ではありません。状況を確認するには:
df -h
iostat -x 2
よくある間違い
| 症状 | 原因 |
|---|---|
Permission denied | 自分のユーザーのものではないディレクトリに書き込んでいます — rootでログインするか、所有者を変更してください |
No such file or directory | マシン上にディレクトリが存在せず、scp は作成しません: 事前に mkdir -p を実行してください |
| ファイルが1階層上に配置された | パスの末尾スラッシュの不足または余分 |
rsync: command not found | 両側にパッケージをインストールしてください: apt install -y rsync |
| デプロイ後にサイトが403を返す | 所有者が設定されていません: chown -R www-data:www-data /var/www/example.com |
グラフィカルクライアントを好む場合は、SFTPでのファイル転送をご覧ください。