Linuxのrsyncコマンド徹底解説!基本構文・オプション・実用例まとめ
rsync(remote synchronization)は、ローカルストレージ内はもちろん、ネットワーク経由でもファイルを同期できる強力なファイルコピーツールです。
その性能の高さから広く普及しており、ファイルのバックアップ、複数のファイルサーバー間での内容の統一、Webアプリのコードやアセットをサーバーへデプロイする用途などによく使われています。
rsyncは認識できるほぼすべてのファイルをコピーでき、ファイルサイズと更新日時をもとに変更の有無を判断し、更新が必要なファイルだけを効率的に同期します。
rsyncコマンドは非常に多くのオプションを持つ大きなコマンドです。このガイドでは、最もよく使われるシナリオをカバーする実用的な使い方をわかりやすく紹介します。
基本構文
rsync OPTIONS SOURCE DESTINATION
各要素の意味は以下の通りです。
- OPTIONS: 後述の一覧から選んだオプションをスペース区切りで指定します
- SOURCE: 同期元のファイルまたはフォルダへのパス。リモートホストの情報を含めることもできます
- DESTINATION: 同期先のパス。こちらもリモートホストを指定できます
- SOURCEとDESTINATIONの順序は必ず守ってください!
主なオプション
よく使われるオプションを、マニュアルから抜粋してカテゴリ別に紹介します。
■ 何をコピーするか:
-r, --recursive ディレクトリを再帰的に処理する
-R, --relative 相対パス名を使用する
--exclude=PATTERN PATTERNに一致するファイルを除外する
--exclude-from=FILE FILEから除外パターンを読み込む
-I, --ignore-times サイズとタイムスタンプが一致するファイルも除外しない
--size-only 転送要否の判定にファイルサイズのみを使用する
--modify-window=NUM ファイル比較時のタイムスタンプの許容誤差(秒)(デフォルト=0)
--include=PATTERN PATTERNに一致するファイルを除外しない
--include-from=FILE FILEから包含パターンを読み込む
■ どうコピーするか:
-n, --dry-run 実際には変更を行わない試験実行をする
-l, --links シンボリックリンクをシンボリックリンクとしてコピーする
-L, --copy-links シンボリックリンクを参照先のファイル/ディレクトリに変換する
--copy-unsafe-links 「安全でない」シンボリックリンクのみ変換する
--safe-links コピー先ツリー外へのリンクを無視する
--munge-links シンボリックリンクをより安全な形に変換する
-H, --hard-links ハードリンクを保持する
--devices デバイスファイルを保持する(スーパーユーザーのみ)
--specials 特殊ファイルを保持する
-D, --devices --specials デバイスファイル+特殊ファイルを保持する(スーパーユーザーのみ)
-g, --group グループを保持する
-o, --owner 所有者を保持する(スーパーユーザーのみ)
-p, --perms パーミッションを保持する
--remove-source-files 送信側が同期済みファイル(ディレクトリ以外)を削除する
-t, --times タイムスタンプを保持する
-S, --sparse スパースファイルを効率的に扱う
-x, --one-file-system ファイルシステムの境界を越えない
-B, --block-size=SIZE チェックサムのブロックサイズを固定する(デフォルト700)
-e, --rsh=COMMAND rshの代替となるリモートシェルを指定する
--rsync-path=PATH リモートマシン上のrsyncのパスを指定する
--numeric-ids uid/gid値をユーザー/グループ名にマップしない
--timeout=SECONDS IOタイムアウトを秒単位で設定する
-W, --whole-file ファイル全体をコピーし、差分チェックを行わない
■ コピー先に関するオプション:
-a, --archive アーカイブモード(-rlptgoDと同等、-H,-A,-Xを除く)
-b, --backup バックアップを作成する(--suffix・--backup-dir参照)
--backup-dir=DIR バックアップを指定ディレクトリに作成する
-z, --compress 転送中にファイルデータを圧縮する
-c, --checksum 更新日時とサイズではなくチェックサムに基づいてスキップする
-C, --cvs-exclude CVSと同じ方法でファイルを自動的に無視する
--existing 既に存在するファイルのみ更新する
--delete 送信側に存在しないファイルを受信側で削除する
--delete-excluded 除外されたファイルも受信側で削除する
--delete-after 転送後に削除を実行する(転送中ではなく)
--force 空でなくてもディレクトリの削除を強制する
--ignore-errors IOエラーがあっても削除を実行する
--max-delete=NUM 削除するファイル数をNUM以下に制限する
--log-file-format=FMT 指定した形式でファイル転送をログに記録する
--partial 転送途中のファイルを保持する
--progress 転送中の進捗状況を表示する
-P --partial --progress と同等
--stats ファイル転送の統計情報を表示する
-T, --temp-dir=DIR 一時ファイルを指定ディレクトリに作成する
--compare-dest=DIR DIRを基準にコピー先ファイルとの比較も行う
-u, --update 更新のみ(新しいファイルを上書きしない)
■ その他のオプション:
--address=ADDRESS 指定したアドレスにバインドする
--blocking-io リモートシェルでブロッキングIOを使用する
--bwlimit=KBPS I/O帯域幅を制限する(KB/秒)
--config=FILE 代替のrsyncd.confファイルを指定する(デーモン)
--daemon rsyncデーモンとして起動する
--no-detach 親プロセスからデタッチしない(デーモン)
--password-file=FILE デーモンアクセス用パスワードをFILEから取得する
--port=PORT 代替のrsyncdポート番号を指定する
-f, --read-batch=FILE バッチファイルを読み込む
-F, --write-batch=FILE バッチファイルを書き出す
--version バージョン番号を表示する
-v, --verbose 出力を詳細にする
-q, --quiet 出力を簡潔にする
-4, --ipv4 IPv4を優先する
-6, --ipv6 IPv6を優先する
-h, --help ヘルプ画面を表示する
すべてのオプションを確認したい場合は、次のコマンドでrsyncのユーザーマニュアルを参照してください。
man rsync
実用例
以下では各オプションの意味は繰り返し説明しません。意味が不明な場合は、必ず上記の一覧に戻って確認してください。誤ったコマンドを実行してデータを失わないよう注意しましょう。
ローカル → ローカル(単一ファイル)
ローカルマシン上のあるディレクトリから別のディレクトリへ、単一ファイルを同期する方法です。
rsync -zvh /path/to/my-file.tar /path/to/destination/
以降の例では、rsyncの最も一般的な用途である「ディレクトリ同期」に焦点を当てて解説します。
ローカル → ローカル(ディレクトリ)
同じマシン上のあるディレクトリから別のディレクトリへ、すべてのファイルを同期します。
rsync -avzh /path/to/source /path/to/destination
「-avzh」とは何か?これは複数のオプションを連結して書いたもので、「-a -v -z -h」と個別に指定するよりも手早い書き方です。
ローカル → リモート(ディレクトリ)
ローカルのソースディレクトリから、ネットワーク経由でリモートコンピュータ上の宛先へすべてのファイルを同期します。
rsync -avz /path/to/source/ user@192.168.1.11:/path/at/destination/
注意点:
- userはリモートシステム上のユーザー名です
- /path/to/source/はローカルコンピュータ上のソースディレクトリへのパスです
- 192.168.1.11はリモートシステムのIPアドレスです(IPアドレスまたはホスト名のどちらでも指定できます)
- /path/at/destination/はリモートファイルシステム上のパスです
- 同期はrsyncデーモンを使って行われます
SSHを使ったローカル → リモート(ディレクトリ)
-eオプションを使うと、rsyncが使用するプロトコルを指定できます。これにより、SSH経由で安全にファイルを転送できます。
rsync -avzh -e ssh /path/to/source/ user@192.168.1.11:/path/at/destination/
リモート → ローカル(ディレクトリ)
リモートコンピュータ上のソースディレクトリから、ネットワーク経由でローカルコンピュータ上の宛先へすべてのファイルを同期します。
rsync -avzh user@192.168.1.11:/path/to/source /path/to/destination
注意点:
- userはリモートシステム上のユーザー名です
- 192.168.1.11はリモートシステムのIPアドレスです(IPアドレスまたはホスト名のどちらでも指定できます)
- /path/to/sourceはリモートファイルシステム上のパスです
- /path/to/destinationはローカルコンピュータ上の宛先です
- 同期はrsyncデーモンを使って行われます
SSHを使ったリモート → ローカル(ディレクトリ)
rsync -avzh -e ssh user@192.168.1.11:/path/to/source /path/to/destination
ディレクトリの場合と同様に、単一ファイルの同期も「ローカル→リモート」「リモート→ローカル」「SSH経由」のいずれの形でも実行できます。
同期時に考慮すべきその他のポイント
帯域幅への配慮
インターネット経由で同期する場合は、ネットワーク上の他のサービスを遅くしないよう、使用する帯域幅を制限するとよいでしょう。
rsync -avz --bwlimit 512 /path/to/source/ user@192.168.1.11:/path/at/destination/
削除の扱い
ソース側でファイルやフォルダが削除されていて、宛先側にまだ残っている場合、宛先側でも削除してソースの完全なミラーにしたいことがあります。ただし、このオプションを使う前に、本当に削除してよいのか必ず確認してください。
rsync -avz --delete /path/to/source/ user@192.168.1.11:/path/at/destination/
ファイルの包含・除外
ファイルパターンの一致によって、同期に含めるファイルと除外するファイルを指定できます。同期したくないファイルがある場合は、除外しておきましょう。
rsync -avz -e ssh --exclude '*' --include 'keep*' /path/to/source/ user@192.168.1.11:/path/at/destination/
このrsyncコマンドは、「keep」で始まるファイルとディレクトリのみを同期対象とし、それ以外のすべてのファイル・ディレクトリ(*)を除外します。
ドライラン(試験実行)の活用
ドライランでは、変更される予定のファイルが出力されますが、実際には何も行われません。ファイルが同期されたり変更されたりすることはないため、さまざまなオプションを試してその効果を事前に確認できます。
rsync -avz --dry-run /path/to/source/ user@192.168.1.11:/path/at/destination/
まとめ
システム上で大量のファイルを移動させる際は、Enterキーを押す前に入力内容を必ず確認してください。同期の方向を間違えて、重要なファイルを消してしまうことがないようにしましょう。
Linuxシェルコマンドに関する他の記事も、ぜひ合わせてご覧ください。
-
Linuxのlsコマンド徹底解説!ファイルとディレクトリを一覧表示する方法
Linuxのlsコマンドは、多くのユーザーが最初に使うことになる基本コマンドの一つです。この記事では、lsコマンドの基本的な使い方と、実務で頻繁に利用されるオプションについてわかりやすく解説します。 筆者が普段よく使うオプションの組み合わせは以下のとおりです。 ls -Zaltrh それでは、各オプションの意味をひとつずつ掘り下げながら、この組み合わせがなぜ便利なのかを説明していきます。 lsコマンドの基本構文 # ls [OPTION] [FILE] OPTIONS: [-a] 「.」または「..」で始まる隠しエントリを無視しない [-h] -lと併用した場合、サイズを人間が読みやすい形式で
-
コマンドプロンプト入門:ファイルとフォルダを操作する基本コマンド
コマンドプロンプト入門:ファイルとフォルダを操作する基本コマンド エクスプローラーを使わずにファイルを操作できたら便利だと思ったことはありませんか?開発者やITエンジニアの方なら、ターミナルでの作業は日常茶飯事でしょう。しかし、開発者でなくても、基本的なコマンドラインの知識は持っておいて損はありません。 このガイドでは、ターミナル作業で役立つ、よく使われるファイル操作コマンドを紹介します。 フォルダ間の移動には「cd」と「dir」 コマンドプロンプト(PowerShell や Windows Terminal でも同様)でファイルシステム内を移動するには、cd と dir という2つの基本コマ