ウェブサイト検索

LinuxのRsyncの例


rsyncは「リモート同期」を意味し、ローカルシステムまたはリモートマシン間でディレクトリを同期するための強力なコマンドラインユーティリティです。ほぼすべてのLinuxシステムにデフォルトで組み込まれており、このチュートリアルでは、管理者が複数のサーバー/ホスト間でデータを同期させるために使用する一般的なrsyncの例を提供することで、rsyncをより理解する手助けをします。

一部のユーザーは、rsyncをcpやscpのようなファイルコピーのツールだと誤解していますが、重複する部分はあるものの、rsyncは特に同期に優れています。言い換えれば、ソースディレクトリを取り、同一のデスティネーションディレクトリを作成することができます。そして、ソースディレクトリ内のファイルが変更されると、rsyncはコンテンツを効率的にデスティネーションディレクトリに同期させ、変更されたビットのみを転送します。また、rsyncは非常に安全なユーティリティで、リモートファイル転送にはSSHを利用しています。

これにより、rsyncはファイルコピーの上にバックアップツールとして非常によく機能します。多くのバックアップユーティリティは、何らかの形でrsyncを使用していますが、一部のユーザーはrsyncコマンドの使い方を学ぶ手間を惜しみます。実際には、それは非常に複雑になる可能性がありますが、rsyncは特定のことを行う必要がある場合にのみ複雑になります。基本からrsyncについて学べば、それを理解するのは簡単です。

このガイドでは、rsyncコマンドの使い方を例を通じて学びます。同期したい2つのディレクトリがある場合は、自分のシステムで手順に従って、rsyncコマンドを習得してください。

このチュートリアルでは、あなたは学びます:

  • rsync コマンドライン例

rsyncコマンドの例

rsyncについて学ぶ最も簡単な方法は、例を通じて学ぶことです。始めるために、以下のいくつかのコマンドを自分のシステムで試してみると、すぐにマスターできるでしょう。

基本的なrsyncの例

  1. rsyncには一般的に使用されるオプションがたくさんあります。これには、再帰的転送、ファイルの変更日時の転送、ファイルの権限、シンボリックリンクなどが含まれます。これらすべてのオプションを組み合わせると、-rlptgoD になります。しかし、rsyncはすべてのこれらのオプションを単一の -a(アーカイブ)スイッチにまとめているため、最も一般的なオプションを1つのフラグで使用できます。また、ディレクトリの末尾にスラッシュがあることにも注意してください。これにより、宛先で追加のディレクトリレベルが作成されるのを防ぎます。

    rsync -a /src/ /dst/
    


  2. 前のコマンドは、エラーが発生しない限り、あまり出力を生成しません。現在の転送に関するより多くの情報を得るには、コマンドに -v(冗長)オプションを追加できます。以下の構文は、おそらくあなたが見ることになる最も一般的なrsyncの形式です。これは、あなたがよく使うことになるので、特に覚えておくべきものです。

    rsync -av /src/ /dst/
    
  3. デフォルトでは、rsyncは宛先ディレクトリからファイルを削除しません。新しいファイルと現在のファイルへの変更のみを転送します。宛先ディレクトリから余分なファイルを削除したい場合は、コマンドに--deleteオプションを追加できます。

    rsync -av --delete /src/ /dst/
    
  4. rsyncが実際に変更を転送する前に、どのような変更を行う予定かを確認したい場合は、コマンドに-nまたは--dry-runフラグを使用できます。特に--deleteオプションを使用している場合は、どのファイルが削除されるかを表示するため、これは良いアイデアです。

    rsync -avn --delete /src/ /dst/
    
  5. これまでのところ、私たちは同じシステム上のディレクトリに対して動作するrsyncの例のみを示してきました。rsyncの最も強力な機能の1つは、リモートシステムでも使用できることです。SSHを通じてrsyncを実行するには、コマンドに-e sshオプションを追加します。また、コマンド内でリモートSSHユーザーと宛先ディレクトリを指定する必要があります。コマンドを入力した後、SSHパスワードを求められます。

    rsync -av -e ssh /src/ user@remote:/path/to/dst/
    
  6. リモートサーバーがデフォルトのポート(22)とは異なるポートでSSH接続を受け付けている場合、rsyncがそのポートに接続するように指示するために以下のコマンドの構文を使用できます。この例では、SSHがポート2200で実行されていると仮定しています。

    rsync -av -e 'ssh -p 2200' /src/ user@remote:/path/to/dst/
    


中級のrsyncの例

  1. リモート転送にrsyncを使用する際、--partialオプションと--progressオプションは非常に役立ちます。これらは、以前の同期が中断された場合に部分的な転送を再開し、すべてのファイルの現在の転送進行状況を表示します。それらの機能を単一のフラグとして組み合わせるために、-Pオプションを使用できます。

    rsync -avP -e ssh /src/ user@remote:/path/to/dst/
    
  2. リモート転送に関してのみ relevant になるもう一つの便利なオプションは、ファイル圧縮を有効にする -z フラグです。これにより、わずかな帯域幅を節約し、データ転送を高速化することができますが、ファイルを転送する前に圧縮するために、システムの CPU 使用量が少し増加します。

    rsync -avPz -e ssh /src/ user@remote:/path/to/dst/
    
  3. デフォルトでは、rsyncはファイルのサイズと変更時刻をチェックして変更があったかどうかを検出します。ソースディレクトリと宛先ディレクトリにあるファイルのサイズとmtimeが同じであれば、rsyncはそのファイルをスキップします。99.99%の状況では、これはファイルに変更があったかどうかを検出するための十分な方法です。しかし、-cオプションもあり、これを使用すると各ファイルのチェックサムをチェックします。これは、ソース内のファイルが宛先の対応するファイルと異なるかどうかを確認するための確実な方法ですが、CPUが各ファイルのチェックサムを決定するのに多くの時間を費やすため、全体のrsyncプロセスが著しく遅くなります。

    rsync -avc /src/ /dst/
    
  4. rsyncが転送しないファイルやディレクトリがあるのは一般的です。一般的な例はキャッシュディレクトリです。--excludeオプションと以下のコマンド構文を使用して、ファイルやディレクトリを除外できます。rsyncコマンドからのソースの相対パスを使用する必要があることに注意してください(言い換えれば、以下の例は、除外されたディレクトリが/src/.cache/にあることを意味します)。

    rsync -av --exclude .cache /src/ /dst/
    
  5. 複数のディレクトリやファイルをテキストファイルにリストすることもでき、その際は1行に1つずつ書きます。それから、--exclude-fromオプションを使用して、除外リストが含まれているテキストファイルの場所をrsyncに指示します。

    rsync -av --exclude-from exclusions.txt /src/ /dst/
    


高度なrsyncの例

  1. 特定のパターンに一致するファイル名を除外するためにワイルドカードを使用できることを忘れないでください。例えば、次のrsyncコマンドを使用して、すべての.jpgおよび.txtファイルを除外することができます。

    rsync -av --exclude *.jpg --exclude *.txt /src/ /dst/
    
  2. rsyncは、-Pオプションを使用したときにファイル転送に関する統計情報を提供します。これは前の例でも示されました。全ての転送が完了した際にも、統計の要約が表示されます。これらはすべてバイトで表示されるため、少し読みづらい場合があります。ファイルサイズを人間が読みやすくするために、コマンドに-hフラグを追加することができます。

    rsync -avh /src/ /dst/
    
  3. 私たちのrsyncの出力には、新しく作成されるファイル、更新されるファイル、権限が変更されるファイルなどの区別がありません。後でログを細かく確認する必要がある場合に本当に便利な、各ファイルの項目別の変更を表示するには、-iオプションを使用できます。

    rsync -avi /src/ /dst/
    
  4. rsyncの出力は、通常のbash演算子(例えば、>、>>など)を使用することでリダイレクトできます。次のコマンドは、rsyncの出力をターミナル画面ではなくテキストファイルに保存します。ただし、エラーが発生した場合は、ターミナルにまだ表示されます。

    rsync -av /src/ /dst/ > rsync.log
    

rsyncの例をマスターする

  1. rsyncの出力を見ながら、同時に後で参照するためにファイルにログを取る場合は、コマンドをteeにパイプすることができます。

    rsync -av /src/ /dst/ | tee rsync.log
    
  2. rsyncには、何が正確に転送されるかを制御するための非常に細かい機能が多数あります。ほとんどすべてのrsyncコマンドに含まれる-aオプションは、さまざまなフラグによって上書きできます。たとえば、以下のコマンドを参照してください。ここでは、-aオプションを使用しているにもかかわらず、rsyncにファイルのオーナー、グループ、および権限を更新しないよう指示しています。

    rsync -av --no-perms --no-owner --no-group /src/ /dst/
    
  3. ハードリンクを保持するために、rsyncで-Hオプションを使用してください。このオプションを使用しないと、rsyncはハードリンクをファイルとして転送します。

    rsync -avH /src/ /dst/
    


  4. -lオプションを使用して、シンボリックリンクをシンボリックリンクのままコピーするか、-Lオプションを使用して、シンボリックリンクをリモート先の参照ファイルまたはディレクトリに変換します。-aオプションは自動的に-lを含むことに注意してください。

    rsync -avL /src/ /dst/
    
  5. 帯域幅を節約する必要がある場合は、--max-sizeオプションを使用して、rsyncに特定のサイズ以下のファイルのみを転送するよう指示できます。次の例では、500 KB未満のサイズのファイルのみを転送します。

    rsync -av -e ssh --max-size='500k' /src/ user@remote:/path/to/dst/
    

締めくくりの考え

このガイドでは、Linuxにおけるrsyncコマンドの20の異なる実用的なコマンド例を学びました。例の数からもわかるように、rsyncは非常に汎用性のあるツールで、ユーザーからの非常に特定の指示を受け取ることができます。これにより、バックアップやファイル転送ツールとして非常に理想的です。必要に応じて正確に構成できるからです。しかし、それはまた、学ぶべき選択肢が豊富にあることを意味します。このチュートリアルでは、rsyncと一緒に使用するための最も一般的で便利なオプションのいくつかを紹介しましたので、大抵の状況には対応できるでしょう。

関連記事: