rsyncで簡単に実現!Linuxでリモートとローカルのディレクトリを同期する方法

リモートサーバーとローカルPC間でファイルをやり取りする場面は、開発や運用の現場では日常的に発生します。特にディレクトリ全体を同期させたい場合、「どのファイルが新しくて、どれが不要か」を手動で判断するのは手間も時間もかかります。そんなときに役立つのが、Linuxで使える「rsync」コマンドです。rsyncは、高速かつ信頼性の高いファイル転送を実現し、差分だけをコピーすることで通信コストを抑えることができます。本記事では、rsyncの基本的な使い方から、リモートとローカル間でのディレクトリ同期の方法、よく使うオプションや注意点まで、わかりやすく解説していきます。


rsyncとは?基本の概要を理解しよう

rsync(アールシンク)は、UNIX系OSで広く利用されているファイル同期ツールです。ローカル間のファイルコピーはもちろん、リモートのマシンとの間でもファイルを同期することができます。rsyncの最大の特徴は、「差分転送」ができる点です。つまり、変更があったファイルだけを検出して転送するため、大量のデータがある場合でも高速に同期できます。

また、SSHを通じて通信を行うため、安全性も確保されており、セキュリティの観点からも安心です。


rsyncの基本的な構文

rsyncの基本的な構文は以下のとおりです。

rsync [オプション] コピー元 コピー先

ローカル同士の例

rsync -avh /home/user/data/ /mnt/backup/data/

リモートからローカルへ同期する例

rsync -avz user@remote-server:/var/www/html/ ~/backup/html/

ローカルからリモートへ同期する例

rsync -avz ~/projects/myapp/ user@remote-server:/home/user/myapp/

よく使うrsyncのオプション解説

rsyncには多くのオプションがありますが、ここではよく使われる主なオプションを紹介します。

オプション説明
-aアーカイブモード。ディレクトリやシンボリックリンク、パーミッションなどを保持
-v詳細出力(verbose)を有効にする
-z転送中にデータを圧縮する(通信速度が遅い環境で有効)
-h出力を人間が読みやすい形式にする(ファイルサイズなど)
--deleteコピー元にないファイルをコピー先から削除する(完全な同期を取りたいときに使用)
-e sshSSH経由で通信するよう指定する(通常は省略可能)

rsyncでリモートとローカルを同期する実践例

ここからは、具体的なシナリオでrsyncの使い方を見ていきましょう。

1. リモートサーバーのディレクトリをローカルに同期

rsync -avz user@example.com:/home/user/website/ /home/localuser/website_backup/

このコマンドでは、リモートサーバーの /home/user/website/ ディレクトリを、ローカルの /home/localuser/website_backup/ に同期します。-a で属性を保持し、-v で出力を表示、-z でデータを圧縮して転送しています。

2. ローカルの変更をリモートに反映させる

rsync -avz ~/project/ user@example.com:/home/user/project/

こちらはローカルの ~/project/ をリモートのディレクトリへ同期する例です。Web開発などで、最新のソースコードをサーバーに反映したいときに使われます。

3. 双方向同期ではなく、片方向同期に注意

rsyncは「片方向」の同期です。つまり、コピー元が正であり、コピー先はそれに合わせて変更されるという動作です。双方向の同期をしたい場合は、unisonなどの別ツールを使うか、スクリプトを組んで管理する必要があります。


–deleteオプションを使った完全同期

rsyncは基本的にコピー元に存在しないファイルは削除しませんが、--delete オプションを使うことで「完全に一致した状態」にできます。

rsync -avz --delete ~/data/ user@remote:/home/user/data/

注意点としては、間違えるとデータが削除されてしまうリスクがあるため、必ずテストしてから運用しましょう。初めは --dry-run を付けて挙動を確認すると安心です。

rsync -avz --delete --dry-run ~/data/ user@remote:/home/user/data/

rsyncをcronで定期実行する

rsyncは手動でも使えますが、定期的に同期させたい場合はcronと組み合わせて自動化するのが便利です。

crontab -e

以下のように記述すれば、毎日深夜2時にリモートとローカルの同期が行われます。

0 2 * * * rsync -avz user@remote:/var/www/html/ ~/backup/html/

ログを残したい場合はリダイレクトを使います。

0 2 * * * rsync -avz user@remote:/var/www/html/ ~/backup/html/ >> /var/log/rsync.log 2>&1

rsyncの注意点とトラブルシューティング

1. ディレクトリ末尾の「/」の意味

コピー元のパスに「/」があるかないかで動作が変わるため注意が必要です。

  • /home/user/data/ → ディレクトリの中身をコピー
  • /home/user/data → ディレクトリごとコピー

これはよくあるミスなので、意識して書くようにしましょう。

2. パーミッションの違いに注意

ファイルの権限が変わってしまうことがあります。必要に応じて -a を使ったり、--chmod オプションで制御することも検討しましょう。

3. SSHのポート番号がデフォルトでない場合

例えばSSHが22番以外を使っている場合は、-e オプションで指定します。

rsync -avz -e "ssh -p 2222" ~/data/ user@remote:/home/user/data/

まとめ

rsyncは、Linux環境における非常に強力な同期ツールです。差分転送による効率的なファイル同期、安全なSSH通信、多彩なオプションにより、初心者から上級者まで幅広く活用されています。本記事で紹介したように、rsyncを使えばローカルとリモート間のディレクトリ同期が簡単に行えるようになります。定期的なバックアップやWebサーバーの更新など、様々な用途で活用してみてください。

タイトルとURLをコピーしました