Linuxコマンド辞典 rsyncコマンド(ネットワーク)
ディレクトリをリモートやローカルに高速かつ柔軟にコピーする「rsync」コマンドの概要と使い方を記載しています。
RHEL Fedora CentOS Vine Deblan Ubuntu Plamo
概要・使用方法
書式
$ rsync [オプション] コピー元 コピー先
ファイル/ディレクトリをローカルからローカル、ローカルからリモートホスト間を問わず高速に転送します。追加/更新されたファイルだけを転送し、転送元と転送先のディレクトリを同期させたり、転送元で削除されたファイルを転送先でも削除することもできます。リモートホストからrsyncを利用して転送にする場合は、リモートホストにrsyncがインストールされている必要があります。一般的にはリモートバックアップ用として利用されます。
バックアップ元ディレクトリの末尾に「/」を付けると、そのディレクトリをコピーするのではなく、そのディレクトリ以下のファイルやサブディレクトリをコピーすることになります。
オプション
-v –verbose | 冗長モードで実行する。コピーしているファイルを表示する |
-r –recursive | 指定したディレクトリの下のディレクトリも再帰的にコピーする |
-a –archive | 指定したディレクトリに含まれるファイル、ディレクトリをパーティション、所有者、タイムスタンプをそのままコピーする |
-u –update | 追加/更新されたファイルだけコピーする |
-d –delete | コピー元で削除されたファイルをコピー先で削除する |
-l –links | シンボリックリンクをそのままコピー、リンク先はコピーしない |
-H, –hard-links | ハードリンクをそのままコピーする |
-p –perms | パーミッションをそのままコピーする |
-o –owner | オーター設定をそのままコピーする |
-g –group | グループ設定をそのままコピーする |
-t –times | タイムスタンプをそのままコピーする |
-e コマンド –rsh=コマンド | rshの代わりに使用するコマンドを指定する。sshの場合は転送も暗号化が可能 |
-n, –dry-run | テストを実施する(実行結果を表示するだけ) |
-z –compress | 通信を圧縮する |
-4 –ipv4 | IPv4を利用する |
-6 -ipv6 | IPv6を利用する |
ディレクトリをローカルに高速にコピーする
$ rsync -auv バックアップ元ディレクトリ バックアップ先ディレクトリ
実行結果
[rin@localhost ~]$ rsync -auv ./test /tmp
sending incremental file list
test/
test/test.txt
sent 147 bytes received 39 bytes 372.00 bytes/sec
total size is 7 speedup is 0.04
[rin@localhost ~]$
コピー元の指定でtest/と指定すると、その下のファイルがそのまま/tmpにコピーされる。つまり、最後に/をつけるかどうかで動作が変わってくる
ファイルを追加して更新分を転送する
リモート先に通信を圧縮してファイルを転送する。また、-uオプションを指定することで更新されたファイルだけ転送する
$ rsync -auvz コピー元ディレクトリ ユーザ名@IPアドレス:/tmp
実行結果
[rin@localhost ~]$ rsync -auvz ./test rin@192.168.0.102:/tmp
sending incremental file list
sent 94 bytes received 17 bytes 222.00 bytes/sec
total size is 7 speedup is 0.06
[rin@localhost ~]$ cp ./testadd.txt ./test/ #ファイルをtestディレクトリ配下にコピー
[rin@localhost ~]$ rsync -auvz ./test rin@192.168.0.102:/tmp
sending incremental file list
test/
test/testadd.txt
sent 169 bytes received 39 bytes 416.00 bytes/sec
total size is 20 speedup is 0.10
[rin@localhost ~]$
SSH経由で安全にファイルコピーする
リモートコピーする場合は、SSH経由で安全にコピーするのがよいでしょう。もちろん、あらかじめSSHでログインできるようにしておく必要があります。また、コピー先ホストにもrsyncがインストールされている必要があります。
$ rsync -auvz --delete -e ssh コピー元ディレクトリ コピー先ホスト:/ディレクトリ
実行結果
[rin@localhost ~]$ rsync -auvz --delete -e ssh ./test 192.168.0.102:/tmp
sending incremental file list
test/
test/test999.txt
sent 183 bytes received 39 bytes 148.00 bytes/sec
total size is 20 speedup is 0.09
[rin@localhost ~]$