管理者(または通常のユーザー)は、多くの場合、ターゲット上のすべてのファイルを毎回転送および上書きせずに、ファイルをバックアップするか、複数の場所(ローカルおよびリモートを含む)間でファイルを同期させる必要があります。この種のタスクのためのシステム管理者のベルトで最も便利なツールの1つは、 rsync
です。 。
rsync
ツールは、ディレクトリ構造を再帰的にナビゲートし、新しい/変更された/削除されたファイルで2番目の場所を更新できます。送信する前にファイルが宛先に存在するかどうかを確認し、スキップするすべての帯域幅と時間を節約します。また、 rsync
ディレクトリ構造(または単一のファイル)を別の宛先(ローカルまたはリモート)と同期する機能を提供します。これを効率的に行うために、デフォルトでは、ファイルの変更時間をチェックします。また、ソースと宛先のファイルのクイックハッシュチェックを実行して、新しいコピーを転送する必要があるかどうかを判断し、時間と帯域幅を大幅に節約できる可能性があります。
[次のこともお勧めします:Linuxシステム管理者向けの5つの高度なrsyncのヒント]
ほとんどのLinuxディストリビューションにデフォルトでパッケージ化されているため、簡単に開始できます。これは、macOS、* BSD、およびその他のUnixライクなオペレーティングシステムにも当てはまります。 rsync
の操作 は簡単で、コマンドラインやスクリプトで使用できます。一部のツールは、タスクを管理するための優れたUIにラップします。
コマンドラインで、 rsync
は、柔軟性のあるツールであるため、通常、いくつかのパラメータを使用して呼び出され、動作を定義します。最も単純な形式では、 rsync
ある場所のファイルがファイルシステムの別の場所でも同じであることを確認するように指示できます。
例:
# rsync file1.txt file2.txt
通常、 rsync
を渡すことが望ましいです 物事が人間が期待するように動作することを保証するためのいくつかのパラメーター。 -a
などのパラメータを渡す 「アーカイブ」は、他のいくつかを自動的に呼び出す「メタパラメータ」であるため、非常に一般的です。 -a
-rlptgoD
と同等です 、これは次のように分類されます:
-
-r
:ディレクトリを再帰的に処理します(現在のディレクトリ内のファイルのみを処理するのではありません) -
-l </ code> :シンボリックリンクを新しいシンボリックリンクとしてコピーする
-
-p
:権限を保持する -
-t
:変更時間を保持する -
-g
:グループの所有権を保持する -
-o
:ユーザーの所有権を保持します(他のユーザーのファイルを処理する場合はスーパーユーザーのみに制限されます) -
-D
:デバイスファイルをコピーする
多くの場合、これはユーザーが望む方法で機能し、大きな変更は必要ありません。ただし、それらの一部はユーザーのニーズに反している可能性があるため、特定の機能に分割することが正しい答えである可能性があります。
その他の注目すべきオプションは次のとおりです。
-
-n
:ファイルを転送せずにコマンドをドライランする -リストのみ
:rsync
するファイルのリストのみを表示します 転送します-
-P
:ファイルごとの進行状況を表示する -
-v
:全体的な進捗状況を表示し、完了時に各ファイルに関する情報を出力します -
-u
:ソースファイルよりも新しい場合は、ターゲットファイルの更新をスキップします -
-q
:クワイエットモード。端末出力が不要な場合にスクリプトに含めるのに便利です -
-c
:変更の時間とサイズではなく、チェックサム値を使用してスキップするファイルを決定します -既存
:ファイルを更新するだけで、不足している新しいファイルは作成しないでください-
-files-from =FILE
:テキストファイルからリストソースファイルを読み取る -
-exclude =PATTERN
:PATTERNを使用して、ファイルを同期から除外します -
-exclude-from =FILE
:上記と同じですが、ファイルから読み取ります -
-include =PATTERN
:除外ルールを無効にするためにも使用されます -
-include-from =FILE
:上記と同じですが、ファイルから読み取ります
rsync
の個人的なデフォルトのパラメータセット 最終的に-avuP
(アーカイブ、詳細な出力、新しいファイルのみの更新、実行中の作業の進行状況の表示)
ソースとターゲット
同期のソースとターゲットはファイルとディレクトリです。また、 rsync
SSHを介してリモートシステムと対話する機能を提供します。これにより、ユーザーは、ある場所から別の場所にファイルを同期できるようにネットワーク共有を設定する必要がなくなります。これは、 rsync
を簡単にスクリプト化できることを意味します 両端でSSHキーを構成した後のジョブにより、リモートファイル同期のために手動でログインする必要がなくなります。
例:

ここで構文を分解します:
-
rsync
の実行 コマンド -
-avuP
を使用 上記のパラメータ - ローカルドキュメントディレクトリをコピーするには
- steveの使用 リモートシステムのユーザーとして
- リモートシステムがファイルサーバーと呼ばれる場所 その名前でアクセスできます
- そして、スティーブの家からの相対的な経路は、の後に表示されます: -この場合、これをスティーブのホームディレクトリ自体に配置することを意味します
これにより、steveのDocumentsフォルダからリモートシステムのDocumentsディレクトリにすべてがコピーされ、変更されたファイルまたは新しいファイルのみが更新されます。これを1回実行するだけで十分です(新しい変更があるまで)。直後に再度実行すると、比較的同じ量の出力が生成されますが、すべてのファイルがスキップされるため、はるかに高速になります。
[APIオーナーズマニュアル:効果的なAPIプログラムの7つのベストプラクティス]
まとめ
rsync
の機能を活用するための便利な方法はたくさんあります。 。多くの場合、コマンドラインから1回限り実行するだけで、宛先に既に存在するものをコピーする時間を無駄にすることなく、一連のファイルをコピーできます。これをスクリプト化し、 cron
に追加します さまざまなパラメータを試してみると、平均的なシステム管理者にとってさらに多くの目標を達成するのに役立ちます。