Bash 速習チュートリアル

Bash rsyncコマンド

1. rsyncコマンドの使用方法

rsyncコマンドは、ファイルのタイムスタンプやサイズをチェックすることで、コンピュータシステム間で効率的にファイルを転送・同期(シンクロナイゼーション)するために使用されます。

1.1 基本的な使い方

ディレクトリをリモートホストに同期するには、rsync -avz ソース ユーザー名@ホスト名:/パス の形式を使用します。

例:

rsync -avz /local/dir/ [email protected]:/remote/dir/
# /ローカル/ディレクトリ/ を [email protected]:/リモート/ディレクトリ/ に同期します

1.2 rsyncの出力を理解する

rsyncコマンドの出力内容は、使用するオプションによって異なりますが、一般的に以下の要素が含まれます。

  • ファイルリスト(File List): 転送されているファイルの一覧を表示します。
  • 転送進捗(Transfer Progress): 各ファイルの転送ステータスを表示します。
  • 圧縮率(Compression Ratio): 圧縮を使用した場合、その効果を示します。
  • スピード(Speed): ファイルが転送されている速度。

2. rsyncオプションの概要

rsyncコマンドで使用される、一般的なオプションをいくつか紹介します。

  • -a - アーカイブモード
  • -v - バーボジティ(詳細出力)を増やす
  • -z - ファイルデータを圧縮する
  • --delete - 余分なファイルを削除する
  • -r - ディレクトリ内に再帰的に入り込む
  • -u - 受信側より新しいファイルをスキップする
  • --progress - 転送中の進捗を表示する

2.1 -a オプション(アーカイブモード)

-aオプションはアーカイブモードを有効にします。これにより、パーミッション、タイムスタンプ、シンボリックリンクなどが保持されます。これは複数のオプションを組み合わせたような便利なモードです。

例:アーカイブモード

rsync -a /local/dir/ [email protected]:/remote/dir/

2.2 -v オプション(詳細出力)

-v(Verbose)オプションは詳細出力を有効にし、rsyncプロセスの詳細な情報を表示します。

例:詳細出力

rsync -av /local/dir/ [email protected]:/remote/dir/

2.3 -z オプション(圧縮)

-zオプションは、転送中にファイルデータを圧縮します。これにより、ネットワーク経由の転送プロセスを高速化できます。

例:圧縮の有効化

rsync -az /local/dir/ [email protected]:/remote/dir/

2.4 --delete オプション

--deleteオプションを使用すると、コピー元(ソース)に存在しないファイルをコピー先(デスティネーション)から削除します。これにより、両方のディレクトリを完全に一致させることができます。

例:余分なファイルの削除

rsync -avz --delete /local/dir/ [email protected]:/remote/dir/

2.5 -r オプション(再帰的コピー)

-r(Recursive)オプションは、rsyncがディレクトリ内を再帰的に探索し、すべてのファイルとサブディレクトリをコピーすることを可能にします。

例:再帰的コピー

rsync -ar /local/dir/ [email protected]:/remote/dir/

2.6 -u オプション(アップデート)

-u(Update)オプションは、受信側にあるファイルの方が新しい場合、そのファイルのコピーをスキップします。これにより、新しいファイルを古いデータで上書きすることを防ぎます。

例:新しいファイルをスキップ

rsync -avu /local/dir/ [email protected]:/remote/dir/

2.7 --progress オプション

--progressオプションは転送中に進捗状況を表示し、転送ステータスに関する詳細な情報を提供します。

例:進捗の表示

rsync --progress /local/dir/ [email protected]:/remote/dir/

3. 一般的なトラブルシューティング

rsyncの使用中には、"Permission Denied"(権限拒否)や "Connection Timeout"(接続タイムアウト)といった問題が発生することがあります。以下に解決のためのヒントをまとめます。

  • Permission Denied: ソースとデスティネーションの両方のディレクトリに対して、正しいパーミッションを持っているか確認してください。ユーザーの権限やSSHキーのアクセス権をチェックしましょう。
  • Connection Timeout: ネットワーク接続を確認し、リモートサーバーに到達可能であることを確認してください。ファイアウォールの設定やSSHのコンフィギュレーションもチェックの対象です。