目次- 1. はじめに
- 2. インストール
- 3. 基本的な使い方
- 3.1、-rパラメータ
- 3.2、-aパラメータ
- 3.3、-nパラメータ
- 3.4、--deleteパラメータ
- 4. ファイルを除外する
- 4.1. --exclude パラメータ
- 4.2. --includeパラメータ
- 5. リモート同期
- 5.1 SSHプロトコル
- 5.2 rsyncプロトコル
- 6. 増分バックアップ
- 7. 構成項目
1. はじめにrsync は、ファイル同期によく使用される Linux アプリケーションです。 ローカル コンピューターとリモート コンピューター間、または 2 つのローカル ディレクトリ間でファイルを同期できます (ただし、2 つのリモート コンピューター間の同期はサポートされていません)。 cp やmv コマンドの代わりに、ファイル コピー ツールとしても使用できます。 
名前のr 」はリモートを意味します。rsync は実際には「リモート同期」を意味します。他のファイル転送ツール (FTP や scp など) とは異なり、rsync の最も重要な機能は、送信側と受信側の既存のファイルをチェックし、変更された部分のみを転送することです (デフォルトのルールでは、ファイル サイズまたは変更時刻が変更されています)。 2. インストールローカル コンピューターまたはリモート コンピューターに rsync がインストールされていない場合は、次のコマンドを使用してインストールできます。 # デビアン $ sudo apt-get rsyncをインストール # レッドハット $ sudo yum rsyncをインストール # アーチリナックス $ sudo pacman -S rsync
転送の両端に rsync がインストールされている必要があることに注意してください。 3. 基本的な使い方3.1、-rパラメータrsync コマンドをローカルで使用する場合、 cp やmv コマンドの代わりに使用して、ソース ディレクトリをターゲット ディレクトリに同期できます。 $ rsync -r ソース 宛先
上記のコマンドでは、 -r サブディレクトリを含む再帰を意味します。 -r が必須であることに注意してください。そうしないと、rsync は正常に実行されません。 source ディレクトリはソース ディレクトリを示し、 destination ターゲット ディレクトリを示します。 同期する必要があるファイルまたはディレクトリが複数ある場合は、次のように記述できます。 $ rsync -r ソース1 ソース2 宛先
上記のコマンドでは、 source1 とsource2 両方がdestination ディレクトリに同期されます。 3.2、-aパラメータ-a パラメータは-r の代わりに使用できます。再帰同期に加えて、メタ情報 (変更時間、権限など) も同期できます。 rsync は、ファイルの更新が必要かどうかを判断するためにデフォルトでファイル サイズと変更時刻を使用するため、 -r よりも-a の方が便利です。次のような使い方が一般的な書き方です。
$ rsync -a ソース 宛先
destination ディレクトリが存在しない場合は、rsync によって自動的に作成されます。上記のコマンドを実行すると、ソースディレクトリsource ターゲットディレクトリdestination に完全にコピーされ、 destination/source というディレクトリ構造が形成されます。
ソース ディレクトリsource の内容のみを宛先ディレクトリdestination に同期する場合は、ソース ディレクトリの後にスラッシュを追加する必要があります。 $ rsync -a ソース/ 宛先
上記のコマンドを実行すると、 source ディレクトリの内容がdestination ディレクトリにコピーされ、 destination の下にsource サブディレクトリは作成されません。 3.3、-nパラメータrsync の実行後にどのような結果が生成されるかわからない場合は、まず-n または--dry-run パラメータを使用して実行結果をシミュレートできます。 $ rsync -anv ソース/宛先
上記のコマンドでは、 -n パラメータはコマンド実行の結果をシミュレートし、実際にコマンドを実行するわけではありません。 -v パラメータは結果をターミナルに出力し、何が同期されるかを確認できるようにします。 3.4、--deleteパラメータデフォルトでは、rsync はソース ディレクトリのすべての内容 (明示的に除外されたファイルを除く) が宛先ディレクトリにコピーされることのみを保証します。 2 つのディレクトリを同一に維持せず、ファイルを削除しません。ターゲット ディレクトリをソース ディレクトリのミラー コピーにする場合は、 --delete パラメータを使用する必要があります。これにより、ターゲット ディレクトリにのみ存在し、ソース ディレクトリには存在しないファイルが削除されます。 $ rsync -av --delete ソース/ 宛先
上記のコマンドでは、 --delete パラメータによりdestination source のミラーになります。 4. ファイルを除外する4.1. --exclude パラメータ場合によっては、同期中に特定のファイルまたはディレクトリを除外する必要があります。この場合、 --exclude パラメータを使用して除外パターンを指定できます。 $ rsync -av --exclude='*.txt' ソース/ 宛先 # または $ rsync -av --exclude '*.txt' ソース/ 宛先
上記のコマンドはすべての TXT ファイルを除外します。 rsync は「ドット」で始まる隠しファイルを同期することに注意してください。隠しファイルを除外する場合は、 --exclude=".*" と記述できます。 ディレクトリ内のすべてのファイルを除外したいが、ディレクトリ自体は除外したくない場合は、次のように記述します。 $ rsync -av --exclude 'dir1/*' ソース/ 宛先
複数の除外パターンを指定するには、複数の--exclude パラメータを使用します。 $ rsync -av --exclude 'file1.txt' --exclude 'dir1/*' ソース/ 宛先
複数の除外パターンでは、1 つの--exclude パラメータのみを使用して、Bash の大規模な拡張機能を利用することもできます。 $ rsync -av --exclude={'file1.txt','dir1/*'} ソース/ 宛先
除外パターンが多数ある場合は、1 行に 1 つのパターンをファイルに書き込み、このファイルを--exclude-from パラメータで指定できます。 $ rsync -av --include="*.txt" --exclude='*' ソース/ 宛先
4.2. --includeパラメータ--include パラメータは、同期する必要があるファイル パターンを指定するために使用され、多くの場合、 --exclude と組み合わせて使用されます。
$ rsync -av --include="*.txt" --exclude='*' ソース/ 宛先
上記のコマンドは、同期時にすべてのファイルが除外され、TXT ファイルは含まれるように指定します。 5. リモート同期5.1 SSHプロトコルrsync は、2 つのローカル ディレクトリ間の同期をサポートするだけでなく、リモート同期もサポートします。ローカル コンテンツをリモート サーバーに同期できます。 $ rsync -av ソース/ ユーザー名@リモートホスト: 送信先
リモート コンテンツをローカルに同期することもできます。 $ rsync -av ユーザー名@リモートホスト:ソース/宛先
デフォルトでは、rsync はリモート ログインとデータ転送に SSH を使用します。 初期の rsync は SSH プロトコルを使用していなかったため、プロトコルを指定するには-e パラメータが必要でしたが、これは後で変更されました。したがって、以下では-e ssh を省略できます。 $ rsync -av -e ssh ソース/ ユーザー@リモートホスト:/ 宛先
ただし、ssh コマンドに追加のパラメータがある場合は、 -e パラメータを使用して実行する SSH コマンドを指定する必要があります。 $ rsync -av -e 'ssh -p 2234' ソース/ ユーザー@リモートホスト:/ 宛先
上記のコマンドでは、 -e パラメータは SSH がポート 2234 を使用することを指定します。 5.2 rsyncプロトコルSSH を使用するだけでなく、他のサーバーに rsync デーモンがインストールされ実行されている場合は、 rsync:// プロトコル (デフォルト ポート 873) を使用して送信することもできます。具体的な書き方は、サーバーとターゲットディレクトリを二重コロンで区切ることです:: 。 $ rsync -av ソース/ 192.168.122.32::モジュール/宛先
上記のアドレスのmodule 実際のパス名ではなく、管理者によって割り当てられた rsync デーモンによって指定されたリソース名であることに注意してください。 rsync デーモンによって割り当てられたすべてのモジュールのリストを知りたい場合は、次のコマンドを実行できます。 $ rsync rsync://192.168.122.32
rsync プロトコルでは、二重コロンの使用に加えて、 rsync:// プロトコルを直接使用してアドレスを指定することもできます。 $ rsync -av ソース/ rsync://192.168.122.32/module/destination
6. 増分バックアップrsync の最大の特徴は、増分バックアップを実行できることです。つまり、デフォルトでは変更されたファイルのみがコピーされます。 rsync は、ソース ディレクトリとターゲット ディレクトリを直接比較するだけでなく、ソース ディレクトリとベース ディレクトリ間の変更をターゲット ディレクトリに同期するベース ディレクトリの使用もサポートしています。 具体的なアプローチとしては、最初の同期は完全バックアップであり、すべてのファイルはベース ディレクトリ内で同期されます。後続の各同期は増分バックアップであり、ソース ディレクトリとベース ディレクトリ間で変更された部分のみが同期され、これらの部分が新しいターゲット ディレクトリに保存されます。この新しいターゲット ディレクトリにもすべてのファイルが含まれますが、実際には、変更されたファイルのみがこのディレクトリに存在し、変更されていないその他のファイルはベース ディレクトリ ファイルへのハード リンクです。 --link-dest パラメータは、同期のベース ディレクトリを指定するために使用されます。 $ rsync -a --delete --link-dest /compare/path /source/path /target/path
上記のコマンドでは、 --link-dest パラメータでベース ディレクトリ/compare/path を指定し、ソース ディレクトリ/source/path ベース ディレクトリと比較し、変更されたファイルを見つけて、ターゲット ディレクトリ/target/path にコピーします。変更されていないファイルに対してハードリンクが作成されます。このコマンドの最初のバックアップは完全バックアップであり、それ以降のバックアップはすべて増分バックアップです。 以下は、ユーザーのホーム ディレクトリをバックアップするスクリプトの例です。
#!/bin/bash
# rsync を使用して増分バックアップを実行するスクリプト
-o errexit を設定する
set -o 名詞セット
-o パイプフェイルを設定する
読み取り専用 SOURCE_DIR="${HOME}"
読み取り専用 BACKUP_DIR="/mnt/data/backups"
読み取り専用 DATETIME="$(日付 '+%Y-%m-%d_%H:%M:%S')"
読み取り専用 BACKUP_PATH="${BACKUP_DIR}/${DATETIME}"
読み取り専用 LATEST_LINK="${BACKUP_DIR}/latest"
mkdir -p "${BACKUP_DIR}"
rsync -av --delete \
"${SOURCE_DIR}/" \
--link-dest "${LATEST_LINK}" \
--exclude=".cache" \
「${BACKUP_PATH}」
rm -rf "${LATEST_LINK}"
ln -s "${BACKUP_PATH}" "${LATEST_LINK}" 上記のスクリプトでは、同期ごとに新しいディレクトリ${BACKUP_DIR}/${DATETIME} が生成され、ソフト リンク${BACKUP_DIR}/latest このディレクトリを指すようになります。次回バックアップするときには、 ${BACKUP_DIR}/latest ベース ディレクトリとして使用され、新しいバックアップ ディレクトリが生成されます。最後に、ソフト リンク${BACKUP_DIR}/latest 新しいバックアップ ディレクトリにポイントします。 7. 構成項目-a および--archive パラメータはアーカイブ モードを示し、変更時間、権限、所有者などのすべてのメタデータが保存され、ソフト リンクも同期されます。
--append パラメータは、前回中断された場所からファイルの転送を続行することを指定します。 --append-verify パラメータは--append パラメータと似ていますが、転送が完了した後にファイルを検証します。検証に失敗した場合は、ファイル全体が再送信されます。 -b および--backup パラメータは、ターゲット ディレクトリに既に存在するファイルを削除または更新するときに、ファイルの名前を変更してバックアップすることを指定します。デフォルトの動作は、ファイルを削除することです。名前変更ルールは、 --suffix パラメータで指定されたファイルサフィックスを追加することです。デフォルトは~ です。 --backup-dir パラメータは、ファイル バックアップが保存されるディレクトリを指定します (例: --backup-dir=/path/to/backups )。 --bwlimit パラメータは帯域幅の制限を指定します。デフォルトの単位は KB/s です (例: --bwlimit=100 )。 -c および--checksum パラメータは、 rsync の検証方法を変更します。デフォルトでは、rsync はファイル サイズと最終変更日が変更されたかどうかのみをチェックします。変更された場合は再送信されます。このパラメータを使用すると、ファイル コンテンツのチェックサムを判断して再送信するかどうかを決定します。 --delete パラメータは、ターゲット ディレクトリにのみ存在し、ソース ディレクトリには存在しないファイルを削除し、ターゲット ディレクトリがソース ディレクトリのミラー イメージであることを保証します。 -e パラメータは、データを転送するために SSH プロトコルを使用することを指定します。 --exclude パラメータは--exclude="*.iso" のように、同期しないファイルを指定します。 --exclude-from パラメータは、除外するファイル パターンを含むローカル ファイルを指定します。各パターンごとに 1 行ずつ指定します。 --existing および--ignore-non-existing パラメータは、ターゲット ディレクトリに存在しないファイルとディレクトリは同期されないことを示します。 -h パラメータは人間が読める形式の出力を指定します。 -h および--help パラメータはヘルプ情報を返します。 -i パラメータは、出力ソース ディレクトリとターゲット ディレクトリ間のファイルの違いの詳細情報を示します。 --ignore-existing パラメータは、ファイルがすでにターゲット ディレクトリに存在する限り、そのファイルはスキップされ、これらのファイルは同期されないことを意味します。 --include パラメータは、同期中に含めるファイルを指定し、通常は--exclude と組み合わせて使用されます。 --link-dest パラメータは、増分バックアップのベース ディレクトリを指定します。 -m パラメータは、空のディレクトリを同期しないことを指定します。 --max-size パラメータは、転送するファイルの最大サイズ制限を設定します。たとえば、200KB 以下 ( --max-size='200k' ) などです。 --min-size パラメータは、転送するファイルの最小サイズ制限を設定します。たとえば、10KB 以上 ( --min-size=10k ) などです。 -n パラメータまたは--dry-run パラメータは、実際に実行せずに実行される操作をシミュレートします。 -v パラメータと一緒に使用すると、同期されるコンテンツを確認できます。 -P パラメータは、 --progress パラメータと--partial パラメータの組み合わせです。 --partial パラメータを使用すると、中断された転送を再開できます。このパラメータを使用しない場合、 rsync 転送の途中で中断されたファイルを削除します。このパラメータを使用すると、転送の途中のファイルもターゲット ディレクトリに同期され、中断された転送は次の同期時に再開されます。通常、 --append または--append-verify と一緒に使用する必要があります。 --partial-dir パラメータは、途中で転送されたファイル--partial-dir=.rsync-partial などの一時ディレクトリに保存されることを指定します。通常、 --append または--append-verify と一緒に使用する必要があります。 --progress パラメータは表示の進行状況を示します。 -r パラメータは再帰、つまりサブディレクトリを含めることを示します。 --remove-source-files パラメータは、転送が成功した後に送信者のファイルが削除されることを意味します。 --size-only パラメータは、ファイルの変更時刻の違いに関係なく、サイズが変更されたファイルのみが同期されることを意味します。 --suffix パラメータは、ファイル名をバックアップするときにファイル名に追加するサフィックスを指定します。デフォルトは~ です。 -u および--update パラメータは、ターゲット ディレクトリ内の更新された変更時刻を持つファイルが同期中にスキップされることを示します。つまり、更新されたタイムスタンプを持つファイルは同期されません。 -v パラメータは出力の詳細を示します。 -vv より詳細な情報を出力することを意味し、 -vvv 最も詳細な情報を出力することを意味します。 --version パラメータは rsync のバージョンを返します。 -z パラメータは、同期中にデータを圧縮することを指定します。 以上が Linux rsync の使い方の詳細です。Linux rsync の詳細については、123WORDPRESS.COM の他の関連記事もご覧ください。 以下もご興味があるかもしれません:- Rsync は他のすべてのバックアップ ツールよりも優れています。特定のディレクトリを手動でブロックできますか?
- LinuxはRsync+Inotifyを使用してローカルとリモートのデータのリアルタイム同期を実現します。
- サーバー間の Python rsync フォルダー同期スクリプト
- Python+rsyncは指定されたフォーマットでファイルを正確に同期します
- BrowserSyncで自動更新が開始されます
- Centos7 での Rsync+crontab 定期同期バックアップ
- Rsync を使用して Linux で自動バックアップを実行する
- Java Rsync 同時データ移行と検証の詳細な説明
|