誰かがこのrsyncコマンドを私に説明できますか?


11

誰がこれが何をするのか教えてもらえますか?

rsync -uva --delete /srv/bkp01 /srv/offbk2/ > ~/offbkp01.log

ログを削除bkp01offbk2て送信しますoffbkp01.logか?


彼はマンページを読むことができません。ここで彼が答えを読んでいると思うのはなぜですか?XD
トゥインクルズ

2
あなたがexplainshell.com/…を持っているとき、誰がmanページを必要とますか?!
トム

回答:


33

これを部分に分割するために、2つの主要なセクションがあり、その後に要約と注記が続きます。

  • rsyncコマンド:
    rsync -uva --delete /srv/bkp01 /srv/offbk2/
  • rsyncコマンドを実行するシェルによって実行される出力リダイレクト:
    rsync-command > ~/offbkp01.log

rsync コマンド:

基本コマンド:

  • rsync -これには説明は必要ないと思います(ただし、要求があれば提供します)。

コマンドオプション:

  • -uva -一連の単一文字オプション(以下に示す短い形式と長い形式):

    • -u --update-すべての変更は、ソース上のファイルと同じ年齢(およびサイズが異なる)または古いファイルにのみ適用するようrsyncに指示します。つまり、rsyncは、宛先を更新するソースからの変更のみを渡す必要がありますが、宛先ファイルが古いバージョンになるような変更は行わないでください。

      いくつかの例外があります。タイプの違い(たとえば、1つはファイル、もう1つはディレクトリ)は、日付に関係なく更新されます。シンボリックリンクと他の特別なファイルはこのオプションを無視します。そして、重要なことに、これはどのファイルが削除されるかに影響しません。

    • -v --verbose-実行中にrsyncが出力する情報量を増やします。これがないと、rsyncは(ほとんど?)何も出力しません。このオプションをそのまま使用すると、rsyncは転送中のファイルを通知し、最後に要約を表示します。その他のvmanページが二つ以上言うものの、印刷された情報を増やすよvデバッグ時にsがのみ使用してください。
    • -a --archive-これは、-rlptgD一緒にパッケージ化された他のいくつかのオプション()と同等です。長い名前が示すように、ファイルとディレクトリをアーカイブするための多くの一般的なオプションを設定する簡単な方法です。そうなる:
      • -r --recursive-ディレクトリを再帰的にコピーするようにrsyncに指示します。これ、またはより特定の-d --dirsオプションがない場合、rsyncは、検出したディレクトリをすべてスキップします(そして、出力でそれについて通知します)。
      • -l --links-ソースがシンボリックリンクの場合、宛先にシンボリックリンクを作成します。他のオプションに応じて、シンボリックリンクはスキップされるか、完全に別のコピー(つまり、シンボリックリンクではなくコンテンツ(またはファイルの別のコピー)を持つ真のディレクトリ)になります。
      • -p --perms -宛先ファイルの許可をソースファイルと同じに設定します。
      • -t --times-宛先ファイルの変更時間をソースファイルと同じに設定します。これらの時間を同期させると、rsyncアルゴリズムがより効率的になるため、通常は常に明示的または暗黙的にこれを使用する必要があります。
      • -g --group-宛先のグループ属性をソースと同じに設定します。デフォルトでは名前で関連付けますが、状況によってはグループID番号にフォールバックします。場合は受信 rsyncは、スーパーユーザー(またはでそれを偽造として実行されていない--fake-super)、上のrsyncを起動したユーザグループのみことを受信側は、可能集合のメンバーです。それ以外の場合、グループは前述の同じユーザーのデフォルトグループに設定されます。
      • -D-オプション--devices--specials一緒に同等。彼らは意味する:
        • --devices-キャラクターおよびブロックデバイスファイルが転送されます。受信側の rsyncがスーパーユーザーとして実行されていない(またはで偽装されている--fake-super)場合は効果がありません。
        • --specials -特殊ファイル(ソケットなど)が転送されます(そうでなければ転送されません)。
  • --delete-宛先にはあるがソースにはないファイルを削除するようにrsyncに指示します。これは、上記の更新オプションの影響を受けません(実際、ほとんどのファイルシステムは、どのアクションが新しいかを確認するために必要なデータを保持しないため、どのようになりますか?)。このオプションは、ワイルドカード/グロブ展開のソースで機能するため、dir / *はdir /と同じではありません。重要な注意事項:
    • これは明らかに危険です。おそらく--dry-run最初にオプションを使用して試してみてください。これにより、意図しない変更が行われていないことを確認できるふり転送が行われます。
    • I / O(入力/出力)エラーがある場合、つまり、変更の転送、読み取り、または書き込みに問題がある場合、その時点から削除は無視されます。これは--ignore-errorsオプションで上書きできますが、おそらくそうしたくない/望まないでしょう。
    • 削除アルゴリズムにはいくつかのバリエーションがあり、それらについてはマニュアルページでさらに読むことができます。受信rsyncがバージョン3.0.0以降の場合(この記事の執筆時点で--delete-duringは)、アルゴリズムが使用されます。受信者が古い場合は、--delete-before使用されます。エラーが発生した場合(他のすべての変更が行われるまで何も削除しないなど)、ファイルが一定の一貫性を維持することが重要な場合は、デフォルトよりも具体的なオプションを使用する必要があります。

コマンドの場所:

  • /srv/bkp01-ソースファイルまたはディレクトリ。ディレクトリの最後にスラッシュがある場合/ない場合、および他のディレクトリが存在する場合の意味について、いくつかの詳細なルールがあります。あなたは見ることができますUSAGEの詳細については、manページのセクションを、しかし、ここで最後のスラッシュの欠如は、この意味ディレクトリが先にコピーされます、というよりも、このディレクトリの内容を先にコピーされています。これがディレクトリではなくファイルの場合も同じです。
  • /srv/offbk2/-宛先ディレクトリ。一般に、コマンドのどこかでオプションを指定するためにオプションを使用しない限り、これは常にrsyncコマンドセクションにリストされる最後の項目になります。

シェルの出力リダイレクト:

シェルコマンド:

  • >-これにより、stdout(標準出力)が左側にあるものから右側のファイルにリダイレクトされ、その内容になり、ファイルが存在しない場合は作成されます(可能な場合)。いくつかのメモ:
    • 上記のコマンドの最後に追加して、stderr(標準エラー出力)を同じファイルにリダイレクトすることもできます2>&1。順序は重要ですので、どこに置くかを慎重に一般化してください。マジックナンバー1はstdoutを2指し、stderrを指し、&(本質的に)「アドレス」であり、完全なコマンドスニペットは「stderrの出力をstdoutストリームにリダイレクトする」ことを意味します。
    • ログファイルを置き換えるのではなくログファイルに追加する場合は、>>代わりに使用できます。stderrを同じ場所にリダイレクトする方法は同じままです。
    • を使用して、stdoutとstderrを異なる場所に送信できます1> stdout_file 2> stderr_file。また、コマンドの>>代わりにを使用>して、置換ではなく追加を行うこともできます。

シェル変数/特殊記号:

  • ~ -これは、現在のユーザーのホームディレクトリの省略形であり、次のビットの一部を形成します。

シェルレベルの場所:

  • ~/offbkp01.log-現在のユーザーのホームディレクトリ内のファイルoffbkp01.log。これは、によるリダイレクトのためにrsyncコマンドの出力が置かれる場所です>

概要:

要約すると、このコマンドは次のことを行います。

  • すべての通常のファイル、ディレクトリ、シンボリックリンク、特殊ファイル、およびデバイスファイルをコピーます。
  • すべてではないにしても、ほとんどの重要なファイル属性
  • から /srv/bkp01
  • /srv/offbk2/bkp01
  • そして、それはなりに何かを削除する/srv/offbk2/ことがではなく、/srv/bkp01以下の条件で、:

    • もし通常のファイル、ディレクトリ、またはシンボリックリンク(?)がある修正時刻/srv/offbk2/ ものの方が新しい上の変更時間よりも/srv/bkp01それは更新されません場合、両方の項目が残っている同じタイプ((通常のファイル、ディレクトリ、またはシンボリックリンク? ))。
  • さらに、rsyncは実行中の情報(具体的には、どのファイルが転送されているのか、最終的な要約)を出力し、シェルはそれを ファイルに 書き込みます~/offbkp01.log。そのログファイルは、まだ存在しない場合は新しく作成され、既に存在する場合は上書きされます。


NB:--fake-superrsyncにスーパーユーザーのアクティビティをシミュレートさせるオプションです。これを行うには、ファイルの拡張属性を使用して、より大きな権限がなければ設定できなかった属性を保存します。各属性の実際のバージョンは、使用可能なオプションと特権が与えられれば、意味のあるものに設定されます。これにより、スーパーユーザー権限がない場合でもバックアップを作成するのが便利になりますが、実際のセキュリティ属性が設定されていない可能性があるため、rsyncを使用するよりもセキュリティ上のリスクが大きくなる可能性があることに注意してくださいそれらに関する情報がバックアップされていても、適切に。


出典:rsyncの操作とマンページの読み取りに多くの時間がかかります


8
これは印象的な最初の投稿の1つです。頑張ってね!
テルドン

2番目の@terdon ..くそー!彼は燃えています。良い仕事仲間を維持します。これは確かに印象的な答えです。
AzkerM

答えは「シャーロック・ホームズ」、私はあなたの説明のスタイルを愛する..ようなもののようです
ラーフルパティル

9

マニュアルから:

-削除

これにより、rsyncは受信側(送信側にないファイル)から無関係なファイルを削除しますが、同期されているディレクトリのみを削除します。ワイルドカードはシェルによって展開され、rsyncがリクエストを取得するため、ディレクトリの内容にワイルドカード(例: "dir / *")を使用せずに、ディレクトリ全体(例: "dir"または "dir /")を送信するようrsyncに依頼する必要がありますファイルの親ディレクトリではなく、個々のファイルを転送します。転送から除外されたファイルも、-delete-excludedオプションを使用するか、ルールを送信側でのみ一致するものとしてマークしない限り、削除対象から除外されます(フィルター規則セクションの包含/除外修飾子を参照)。

したがって、ワイルドカードを使用しなかった場合、元のディレクトリの一部ではないファイルを宛先から削除します。

ソースディレクトリ:

1.txt
2.txt
3.txt

宛先ディレクトリ:

4.txt

rsyncの後に4.txtがなくなり、1.txt、2.txt、3.txtが宛先になります。


他のものに関して:

uva
  • 更新ファイル
  • verbose:結果を端末にエコーします(つまり、ログファイルにリダイレクトして最後の質問にyesします)
  • アーカイブ:アーカイブモード。-rlptgoDと等しい(-H、-A、-Xなし)

出典:man rsync
Sammitch

3

いいえ、bkp01ディレクトリから無関係なファイルを削除するだけです。

また:

  • -u--update-受信側で新しいファイルをスキップします
  • -v--verbose-冗長性を高める
  • -a--archive-アーカイブモード。-rlptgoDと等しい(-H、-A、-Xなし)

rsync -uva --delete /srv/bkp01 /srv/offbk2/コマンドの出力は、リダイレクト演算子(~/offbkp01.logを使用してファイルに送信され、代わりに端末に出力されます。ファイルが存在しない場合は作成されます。ファイルが存在する場合、古いコンテンツは消去されます。>

詳細についてはman rsync、を参照してください。


3
からは何も削除されませんbkp01。宛先から、無関係なファイル、つまりソースに存在しないファイルを削除するだけです。
マットノルドホフ

bkp01からファイルは削除されません。
ザビエルJ

1
rsync 

リモートファイルコピー-ローカルディスク、ディレクトリ、またはネットワーク全体でファイルツリーを同期します。

-u update 

-v verbose

-a archive


--delete --> delete

ここでは、offbk2内のファイルを削除します 。

次に、結果の出力(成功または失敗)がそのログファイルにリダイレクトされます。


bkp01からファイルは削除されません。
ザビエルJ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.