rsyncは元々は『低速回線を使って高速にファイルを転送・同期する仕組み』として生まれました。
そのアルゴリズムはこの目的に対して極めて優れており、1996年に Andrew Tridgell と Paul Mackerras に発表されて以来、今までに広く使われています。
使い方
rsyncコマンド
rsync [オプション] コピー元 コピー先
rsyncコマンドは、リモート、ローカルにかかわらずディレクトリやファイルを高速にコピーするコマンドです。
ローカルとリモート間のディレクトリ同期やバックアップによく使われます。
オプション
-a:コピー元のディレクトリを再帰的にオーナー・グループ・パーミッション・タイムスタンプをそのままコピーします。オプション -rlptgoD と同じです。
-g:グループをそのままコピーします。
-l:シンボリックリンクをそのまま(ターゲットの指定を変えずに)コピーします。
-o:オーナーをそのままコピーします。
-p:パーミッションをそのままコピーします。
-r:ディレクトリ内を再帰的にコピーします。
-t:タイムスタンプをそのままコピーします。
-u:コピー元とコピー先を比較し、追加・更新されたファイル・ディレクトリのみをコピーします。
-v:コピーしているファイル名やバイト数などの情報を表示します。
-z:通信を圧縮します。
-4:IPv4を使用します。
-6:IPv6を使用します。
--delete:コピー元にない(削除された)ファイルをコピー先で削除します。コピー元とコピー先を同期します。
使用例
以下ではこれらの使用方法を例示しながら、rsyncコマンドについて解説します。
ローカルのディレクトリを高速にバックアップ
ディレクトリ(hoge)をバックアップディレクトリ(backup)にコピーします。
1 |
rsync -av hoge/ backup/ |
ローカルのディレクトリをリモートマシンにコピー
ローカル環境のディレクトリをリモートマシン先(IPアドレス:zzz.yyy.xxx.www)にコピーします。
ソースのバックアップや、環境を複製する場合など、最もよく使う例となります。
-z オプションを利用して通信を圧縮します。
1 |
$ rsync -auvz hoge/ user@zzz.yyy.xxx.www:/home/user/ |
ローカルのディレクトリとリモートマシンと同期
ローカルのディレクトリとリモートマシンのディレクトリを同期する場合は、--delete オプションを利用します。
こうすることで、ローカルとリモートマシンのディレクトリを全く同じ状態に同期します。
1 |
$ rsync -avz --delete hoge/ user@zzz.yyy.xxx.www:/home/user/ |
※ローカルに存在しないファイルがリモートマシン上にある場合は、そのファイルは削除されます。
完全な同期を必要としない場合以外は、--delete オプションは利用しないほうが安全です。
SSHのオプションを指定して、ローカルのディレクトリをリモートマシンにコピー
sshのオプションを指定する場合は、-e オプションを利用します。
SSHのセキュリティ強化のため通信のポート番号を変更している場合、ポート番号を明示してrsyncコマンドを実行します。
以下は、ポート番号を54321に設定している例です。
1 |
$ rsync -auvz -e 'ssh -p 54321' hoge/ user@zzz.yyy.xxx.www:/home/user/ |
「sshコマンド」の部分はシングルクォーテーションで囲います。
sshコマンドの他のオプションも同様の方法になります。
ログオプションの利用
rsyncでファイル転送を行った後に、どのファイルが転送されたのか確認したい場合があります。
rsyncのオプションには--log-fileがあり、これを指定することにより、ログに出力されます。
1 |
rsync -avz -delete --log-file=/var/log/rsync-`date +"%Y%m%d-%H%M"`.log -e ssh --rsync-path="sudo rsync" user@zzz.yyy.xxx.www:/home/user/hoge/ /home/user/hoge/ |