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 ~]$