rsync-2.6.3

[サーバの実験室 Slackware]

作成 : 2005/01/02

"サーバの実験室"の検索


rsync

rsyncは、ローカルまたはリモートとのファイルコピーをするためのユーティリティ。 更新されたファイルだけコピーするとか、消したファイルはリモートからも削除するとか、いろいろできるらしい。

リモートとのやり取りは、2.6.0からssh使用がデフォルトになったみたい。 なので、コピー元とコピー先のホストでsshによる通信が行えることが前提。

インストール

configure-->make-->make install。 バイナリは/usr/local/binにインストールされた。

# tar -zxvf rsync-2.6.3.tar.gz
# cd rsync-2.6.3
# ./configure
# make
# make install

使ってみる

ローカルの/hogeフォルダ全体を、リモートホスト10.1.1.1の/fooフォルダにコピーしてみる。 新規または更新されたファイルやフォルダは、リモートホストにコピーされる。

$ rsync -avz /hoge 10.1.1.1:/foo    <--- リモートホストの後にコロンをつけてからディレクトリを指定
The authenticity of host '10.1.1.1 (10.1.1.1)' can't be established.    <--- ~/.ssh/known_hosts に登録されていないときは、メッセージが表示される
RSA key fingerprint is 4d:1a:87:d6:f8:c5:d8:2e:b9:ac:2d:f5:50:d4:35:72.
Are you sure you want to continue connecting (yes/no)? yes    <--- ~/.ssh/known_hosts に登録してよいなら"yes"を入力
Warning: Permanently added '10.1.1.1' (RSA) to the list of known hosts.
user@10.1.1.1's password: (password)    <--- リモートホストのユーザのパスワードを入力
building file list ... done

hoge/
hoge/hoge00/
hoge/hoge00/hoge01.txt
hoge/hoge00/hoge02.txt
hoge/hoge1.txt
hoge/hoge2.txt

sent 377 bytes  received 120 bytes  198.80 bytes/sec
total size is 4  speedup is 0.01

    オプション
        -a : アーカイブ(-rlptgoDと同じ)
            -r : 再帰的(指定しないとディレクトリはスキップ)
            -l : シンボリックリンクをコピー
            -p : パーミッションを維持
            -t : タイムスタンプを維持
            -g : 所有グループを維持
            -o : 所有者を維持
            -D : デバイスファイルをコピー
        -v : 詳細を表示
        -z : 圧縮してコピー

    リモートホストには以下のようにコピーされる
        foo/
         +-hoge/
             +-hoge00/
             |   +-hoge01.txt
             |   +-hoge02.txt
             +-hoge1.txt
             +-hoge2.txt

コピー元のディレクトリの後にスラッシュをつけると、コピー先での配置が変わるので注意する。

$ rsync -avz /hoge/ 10.1.1.1:/foo    <--- コピー元ディレクトリの後にスラッシュをつけてみる
user@10.1.1.1's password: (password)    <--- リモートホストのユーザのパスワードを入力
building file list ... done

./
./hoge00/
./hoge00/hoge01.txt
./hoge00/hoge02.txt
./hoge1.txt
./hoge2.txt

sent 377 bytes  received 120 bytes  198.80 bytes/sec
total size is 4  speedup is 0.01

    リモートホストには以下のようにコピーされる
        foo/
         +-hoge00/
         |   +-hoge01.txt
         |   +-hoge02.txt
         +-hoge1.txt
         +-hoge2.txt

コピー元にないファイルやフォルダを、コピー先から削除したい場合は、--deleteオプションをつける。

$ rsync -avz --delete /hoge 10.1.1.1:/foo    <--- deleteオプション

-bオプションをつけると、コピー元とコピー先で同じ名前のファイルが存在する場合、コピー先のファイル名にサフィックス(デフォルトは~チルダ)を付加してから、コピー元のファイルを転送する。 コピー先のファイル名につけるサフィックスは、--suffixオプションで変更することができる。

$ rsync -b --suffix=".bak" /hoge 10.1.1.1:/foo

特定のファイルまたはディレクトリを除外したい場合は、--excludeオプションをつけて除外パターンを指定する。 複数パターンを除外したい場合は、--excludeオプションを複数指定する。 パターンの最初にスラッシュをつけると、トランスファールート直下のファイルまたはディレクトリのみ除外される。 パターンの最後にスラッシュをつけると、ディレクトリのみ除外される。 コピー元ディレクトリの後ろにスラッシュをつける場合とつけない場合で、トランスファールートの解釈が変わるので注意。

$ rsync -avz --exclude="hoge01*" /hoge/ 10.1.1.1:/foo

    赤のファイル・ディレクトリは除外される
        hoge/
         +-hoge00/
         |   +-hoge01/
         |   +-hoge02/
         |   +-hoge01.txt
         |   +-hoge02.txt
         +-hoge01.txt
         +-hoge02.txt
$ rsync -avz --exclude="/hoge01*" /hoge/ 10.1.1.1:/foo    <--- パターンの最初にスラッシュをつける

    赤のファイル・ディレクトリは除外される
        hoge/
         +-hoge00/
         |   +-hoge01/
         |   +-hoge02/
         |   +-hoge01.txt
         |   +-hoge02.txt
         +-hoge01.txt
         +-hoge02.txt
$ rsync -avz --exclude="hoge01*/" /hoge/ 10.1.1.1:/foo    <--- パターンの最後にスラッシュをつける

    赤のファイル・ディレクトリは除外される
        hoge/
         +-hoge00/
         |   +-hoge01/
         |   +-hoge02/
         |   +-hoge01.txt
         |   +-hoge02.txt
         +-hoge01.txt
         +-hoge02.txt

ローカルホストと異なるユーザでリモートホストにログインしたい場合は、次のようにする。

$ rsync -avz hoge_user@/hoge 10.1.1.1:/foo    <--- リモートホストのユーザを指定
hoge_user@10.1.1.1's password: (password)    <--- リモートホストのユーザhoge_userのパスワードを入力

スクリプトで動かすときのパスワード入力

rsyncを実行するとき、ssh接続のためのパスワード入力を求められるが、Cronから時刻起動したいときなどに困る。 ssh接続に公開鍵認証を使っているなら、パスワードなしの秘密鍵を作るか、ssh-agentを使う。 公開鍵認証を使う方法とssh-agentについては、LinuxでSSHを参照。


[サーバの実験室 slackware]