連載
» 2017年02月02日 05時00分 UPDATE

Linux基本コマンドTips(82):【 rsync 】コマンド(その1)――ファイルやディレクトリを同期する

本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回は、「rsync」コマンドです。

[西村めぐみ,@IT]
「Linux基本コマンドTips」のインデックス

Linux基本コマンドTips一覧

 本連載では、Linuxの基本的なコマンドについて、基本的な書式からオプション、具体的な実行例までを分かりやすく紹介していきます。今回は、異なるホスト間でもファイルやディレクトリを同期できる「rsync」コマンドです。

rsyncコマンドとは?

 「rsync」は、リモート環境とファイルやディレクトリを「同期(sync)する」というコマンドです。ローカル環境のみでも使用できます。「変更があった分だけ更新する」という機能があるので、ディレクトリ単位のバックアップで特に便利に使えます。



rsyncコマンドの書式

rsync [オプション] 同期元 [同期先]

※[ ]は省略可能な引数を示しています




rsyncコマンドの主なオプション

 rsyncコマンドの主なオプションは次の通りです。

●通常のオプション
短いオプション 長いオプション 意味
-v --verbose 動作内容を表示する
-q --quiet 動作中のメッセージを抑制する
-n --dry-run 試験モード。実際には動作せず、動作内容だけ表示する(「-v」や「--stats」を一緒に指定する)
--stats ファイル数や転送サイズを表示する
--list-only コピーする代わりにファイルのリストを作成する
-a --archive アーカイブモード(「-rlptgoD -no-H -no-A -no-X」相当)
--no-オプション 指定したオプションを無効にする(「-H」を無効にする場合は「--no-H」のように指定する)
-I --ignore-times サイズとタイムスタンプが同じファイルも処理する
--size-only サイズが同じファイルは処理しない
-c --checksum 更新日とサイズではなく、チェックサムで変更の有無をチェックする
--daemon デーモンとして動作(「--daemon --help」でデーモン時に使用できるオプションが確認できる)

●「-a」で有効になるオプション
短いオプション 長いオプション 意味
-r --recursive ディレクトリを再帰的に処理する
-l --links シンボリックリンクをシンボリックリンクのままコピーする
-p --perms パーミッションを保持する
-t --times タイムスタンプを保持する
-g --group 所有グループをそのまま保持する
-o --owner 所有者をそのまま保持する(自分以外の所有者を保持するにはroot権限が必要)
-D デバイスファイルや特殊ファイルを保持する(「--devices --specials」相当)
--devices デバイスファイルを保持する(root権限が必要)
--specials 特殊ファイルを保持する

●「-a」で無効になるオプション
短いオプション 長いオプション 意味
-H --hard-links ハードリンクを保持する
-A --acls ACL(アクセス制御リスト)を保持する(「-p」も同時に指定した扱いになる)
-X --xattrs 拡張属性を保持する

●その他の主な同期オプション
短いオプション 長いオプション 意味
-R --relative 相対パス名を使用する
-d --dirs ディレクトリを再帰しない
-u --update 同期先のファイルの方が新しい場合はスキップする
--inplace ファイルを上書きする
--append 短いファイルに追加する
-b --backup バップアップファイルを作成する(ディレクトリや拡張子を指定しなかった場合は「~」を使用)
--backup-dir=ディレクトリ バックアップファイルを配置するディレクトリを指定
--suffix=拡張子 バックアップファイルの拡張子(デフォルトは「~」)
--existing 同期先に新規ファイルを作成しない
--ignore-existing 同期先にファイルがあったらスキップする
--remove-source-files 同期後にファイルを削除する
--delete 同期先にないファイルを同期先から削除する
--delete-before 同期先にないファイルを同期前に削除する
--delete-during,--del 同期先にないファイルを同期中に削除する
--delete-delay 同期中に削除すべきファイルを見つけて、後で削除する
--delete-after 同期先にないファイルを同期終了後に削除する
--delete-excluded 同期から除外したファイルも削除する
--ignore-errors I/Oエラーがあっても削除する
--force ディレクトリが空ではない場合も削除する
--max-delete=ファイル数 指定した数以上のファイルは削除しない
--max-size=サイズ 指定したサイズより大きなファイルは削除しない
--min-size=サイズ 指定したサイズより小さなファイルは削除しない
--exclude=パターン 指定したパターンにマッチしたファイルは処理しない
--exclude-from=ファイル 除外パターンを指定したファイルから読み込む
--include=パターン 指定したパターンにマッチしたファイルを処理する
--include-from=ファイル 対象パターンを指定したファイルから読み込む
--files-from=ファイル 同期元ファイルのリストを指定したファイルから読み込む
-0 --from0 対象リストなどのファイルを改行ではなくヌル文字(\0)で区切る

●シンボリックリンク関係のオプション
短いオプション 長いオプション 意味
-L --copy-links シンボリックリンクを対象にする
--safe-links リンク先が自分の配下にあるものだけを対象にする
--copy-unsafe-links リンク先が自分の配下にないものだけを対象にする
-k --copy-dirlinks ディレクトリへのリンクの場合もリンク先を転送する
-K --keep-dirlinks ディレクトリへのリンクをたどらない
-l --links シンボリックリンクをシンボリックリンクのままコピーする

●パーミッション関係のオプション
短いオプション 長いオプション 意味
-p --perms パーミッションを保持する
-E --executability 実行可能属性を保持する
--chmod=CHMOD パーミッションを指定する
-t --times タイムスタンプを保持する
-O --omit-dir-times 「--times」オプション指定時、ディレクトリは除外する
-g --group 所有グループをそのまま保持する
-o --owner 所有者をそのまま保持する(自分以外の所有者を保持するにはroot権限が必要)
--numeric-ids ユーザーIDとグループIDを保持する(転送先の名前に対応させない)

●ネットワーク転送関係のオプション(※ローカル転送時も使用可能)
短いオプション 長いオプション 意味
-T --temp-dir=ディレクトリ 指定したディレクトリに一時ディレクトリを作成する
-z --compress 転送中のデータを圧縮する
--compress-level=レベル データの圧縮レベルを指定する
--skip-compress=リストファイル リストファイルに書かれたファイルは圧縮しない
--port=ポート番号 ポート番号を指定する
--sockopts=OPTIONS TCPオプションを指定する
-8 --8-bit-output 8ビット以上の文字をエスケープしない
-h --human-readable 数字を読みやすい単位で表示する
--progress 転送の進行状況を表示する
-P (「--partial --progress」相当)
--partial 転送を中断したファイルを保持する
--partial-dir=ディレクトリ 転送を中断したファイルを保存するディレクトリ
-4 --ipv4 IPv4を使用する
-6 --ipv6 IPv6を使用する
--timeout=秒数 I/Oタイムアウトの秒数
--iconv=変換方法 ファイル名の変換方法を指定する(転送元がmacOSの場合は「--iconv=UTF-8-MAC,UTF-8」のように指定)



ディレクトリを同期する

 ディレクトリを同期したい場合は、「rsync -av 同期元/ 同期先/」のように指定します。同期先のディレクトリが存在しない場合は、自動的に作成されます。

 「-a」は「アーカイブ」を意味するオプションで、サブディレクトリが存在した場合は、「そのディレクトリも処理する(再帰処理)」「パーミッションやファイルのタイムスタンプを保持する」「シンボリックリンクをシンボリックリンクのままコピーする」などの動作となります。

 ファイルのサイズとタイムスタンプが同じ場合は「更新されていないファイル」とみなし、コピーから除外されます。チェックサムで比較したい場合は「-c」オプションを併用して、「rsync -acv 〜」のように指定します。「-v」は、動作中の内容を表示するオプションです。

コマンド実行例

rsync -av 同期元/ 同期先/

(2つのディレクトリを同期する)(画面1



画面1 画面1 「rsync」コマンドで「mydata」ディレクトリを「backup-mydata」ディレクトリにコピーした


ディレクトリ指定時の注意点

 同期元のディレクトリ末尾の「/」を省略した場合は、同期先のディレクトリの“中”に同期元と同じ名前のディレクトリが作成されます。

 例えば、「rsync -av mydata/ backup-mydata/」とした場合は、「mydata」の中にあるファイルやディレクトリが「backup-mydata」ディレクトリの中にコピーされます。

 これに対し、「rsync -av mydata backup-mydata/」とした場合は、「backup-mydata」の中に「mydata」ディレクトリが作成されることになります。なお、同期先の末尾の「/」の有無は影響しません。

 以下の画面2では、「rsync -av mydata/ 01mydata」(「/」あり)と「rsync -av mydata 02mydata」(「/」なし)の実行結果を比較しています。

画面2 画面2 ディレクトリ末尾の「/」の有無で「rsync」コマンドを実行した結果


異なるホスト間でディレクトリを同期する

 異なるホスト間でディレクトリを同期する場合は、同期元や同期先を「ホスト:パス」または「ユーザー名@ホスト:パス」のように指定します(参考:本連載第81回「scpコマンド――リモートマシンとの間でファイルをコピーする」)。

 ネットワークの回線速度が遅い環境で大きなファイルを転送する場合は、「-z」オプションで転送データを圧縮するとよいでしょう。

 また、大きなファイルを転送している際にエラーとなりやすい場合は「--partial」オプションを指定しておくと、次回のrsyncコマンド実行時に“続き”から再開することができます。「--partial-dir=」オプションでコピー中のファイルを保存する場所を指定しておくことも可能です。

コマンド実行例

rsync -avz 同期元ホスト名:パス 同期先

(異なるホスト間でディレクトリを同期する)

rsync -avz penguin@otherhost:~/Desktop/ 01desktop

(「otherhost」というホストの「penguin」というユーザーのデスクトップを、「01desktop」にコピーする)


 上記の実行例では「192.168.2.4」というホストに対し、現在のログイン名で接続して、自分のデスクトップにあるファイルを「01desktop」というディレクトリにコピーしています(画面3)。

画面3 画面3 異なるホスト間でディレクトリを同期する

 なお、rsyncコマンドの実行前には「ssh」コマンドで「ls -F ~/Desktop」を実行し、デストップにあるファイルを確認しています(参考:本連載第80回「sshコマンド――リモートマシンにログインしてコマンドを実行する」)



筆者紹介

西村 めぐみ(にしむら めぐみ)

PC-9801N/PC-386MからのDOSユーザー。1992年より生産管理のパッケージソフトウェアの開発およびサポート業務を担当。のち退社し、専業ライターとして活動を開始。著書に『図解でわかるLinux』『らぶらぶLinuxシリーズ』『はじめてでもわかるSQLとデータ設計』『シェルの基本テクニック』など。2011年より、地方自治体の在宅就業支援事業にてPC基礎およびMicrosoft Office関連の教材作成およびeラーニング指導を担当。


Copyright© 2017 ITmedia, Inc. All Rights Reserved.

@IT Special

- PR -

TechTargetジャパン

この記事に関連するホワイトペーパー

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。