Linux で rsync を使用する方法

Linux で rsync を使用する方法

1. はじめに

rsync は、ファイル同期によく使用される Linux アプリケーションです。

ローカル コンピューターとリモート コンピューター間、または 2 つのローカル ディレクトリ間でファイルを同期できます (ただし、2 つのリモート コンピューター間の同期はサポートされていません)。 cpmvコマンドの代わりに、ファイル コピー ツールとしても使用できます。

名前のr 」はリモートを意味します。rsync は実際には「リモート同期」を意味します。他のファイル転送ツール (FTP や scp など) とは異なり、rsync の最も重要な機能は、送信側と受信側の既存のファイルをチェックし、変更された部分のみを転送することです (デフォルトのルールでは、ファイル サイズまたは変更時刻が変更されています)。

2. インストール

ローカル コンピューターまたはリモート コンピューターに rsync がインストールされていない場合は、次のコマンドを使用してインストールできます。

# デビアン

$ sudo apt-get rsyncをインストール

# レッドハット

$ sudo yum rsyncをインストール

# アーチリナックス

$ sudo pacman -S rsync

転送の両端に rsync がインストールされている必要があることに注意してください。

3. 基本的な使い方

3.1、-rパラメータ

rsync コマンドをローカルで使用する場合、 cpmvコマンドの代わりに使用して、ソース ディレクトリをターゲット ディレクトリに同期できます。

$ rsync -r ソース 宛先

上記のコマンドでは、 -rサブディレクトリを含む再帰を意味します。 -rが必須であることに注意してください。そうしないと、rsync は正常に実行されません。 sourceディレクトリはソース ディレクトリを示し、 destinationターゲット ディレクトリを示します。

同期する必要があるファイルまたはディレクトリが複数ある場合は、次のように記述できます。

$ rsync -r ソース1 ソース2 宛先

上記のコマンドでは、 source1source2両方が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 同時データ移行と検証の詳細な説明

<<:  入力要素 [type="file"] を使用する場合のスタイルのカスタマイズとブラウザの互換性の問題に関する議論

>>:  CSS3は円錐グラデーション効果を実現します

推薦する

Nginx+Keepalived でデュアルマシン マスターとバックアップを実装する方法

序文まず、高性能サーバーの高可用性またはホットスタンバイソリューションである Keepalived ...

nohup /dev/null 2>&1 の使い方の詳しい説明

nohup コマンド: プロセスを実行しており、アカウントからログアウトしてもプロセスが終了しないと...

Firefox ブラウザでバックグラウンド ミュージックを再生するための究極のソリューション (Chrome マルチブラウザ対応)

FirefoxでBGMを再生するための推奨コードがテストに合格しました空のコントロールパネルを開いて...

JavaScript クロージャの説明

目次1. クロージャとは何ですか? 2. クロージャの役割2.1) メモリ2.2) プライベート変数...

Virtualbox で Ubuntu 16.04 の起動時に共有ディレクトリを自動的にマウントする最良の方法

仮想マシンを使用する人は通常、操作と使用を容易にするために仮想マシン用の共有ディレクトリを設定します...

VMwareでCentOSがインターネットにアクセスできない問題を素早く解決

昨日、VMware に CentOS7 をインストールしました。Tomcat パッケージを転送するた...

Vueプロジェクトでパラメータジャンプ機能を実装する

ページの説明:​ メインページ: 名前 —> shishengzuotanhuichaxun ...

MySQL 5.7.18 インストールチュートリアルと問題の概要

MySQL 5.7.18 のインストールと問題の概要。今日、新しい MySQL サーバーを導入しまし...

MySQLにおける時刻日付型と文字列型の選択について

目次1. DATETIMEとTIMESTAMPの使用1. 類似点2. 相違点3. 選択2. varc...

IdeaでMySQLデータベースに接続すると中国語の文字化けが発生する問題

問題: JDBCを使用してMySQLデータベースに接続すると、中国語の文字を挿入すると文字化けした文...

MySQL でプロファイルを使用する方法のチュートリアル

プロフィールとは何ですか?特定の SQL のパフォーマンスを分析したい場合に使用できます。プロファイ...

クエリプロファイラを使用して MySQL ステートメントの実行時間を表示する方法

前回の記事では、MySQL ステートメントの実行時間をチェックする 2 つの方法を紹介しました。今日...

MySQL の時間設定に関する考慮事項の詳細な要約

時間は本当に存在するのでしょうか?時間は人間が考え出した概念に過ぎず、物事の変化を測る基準に過ぎない...

Docker+Jenkinsを使用して自動的にビルドおよびデプロイする

この記事では、Docker+Jenkins の自動ビルドデプロイメントを紹介し、皆さんと共有します。...

LinuxはNetworkManagerを使用してMACアドレスをランダムに生成します

今では、自宅のソファーに座っていても、外の喫茶店にいても、ノートパソコンの電源を入れてWi-Fiに接...