Linuxにおけるrsyncコマンドをマスターする方法

その名の通り、rsyncは同期ツールです。初めて使用する際は、単にファイルやディレクトリをある場所から別の場所にコピーします。しかし、以降の使用では、これらの場所の違いのみを同期します。つまり、ソースディレクトリにファイルを1つ追加すると、rsyncはその新しいファイルだけを宛先にコピーします。これにより、特にリモート場所にコピーする際に、多くの時間と帯域幅を節約できます。

例えば、50GBのデータをリモートサーバーに同期する必要があるとしましょう。rsyncを毎日実行するようにスケジュールできます。毎回50GB全体をコピーする必要がなく、ユーティリティは差分のみを送信します。これは、毎日数メガバイトのデータをアップロードするだけで済むことを意味し、ギガバイトを送る必要はありません。

上の写真では、最初の実行では104MBが転送されたのに対し、2回目の実行では31KBのみが必要だったことがわかります。

さらに読む: Linuxにおける複数のクラウドストレージプロバイダーへの同期にRcloneを使用する

さまざまなLinuxディストリビューションにrsyncをインストールする方法

DebianおよびDebianベースのディストリビューション、例えばUbuntuでは、以下のコマンドでrsyncをインストールできます。

sudo apt install rsync

rsync-install

Fedoraでは、以下のコマンドを使用します:

dnf install rsync

RedHatから派生したディストリビューション(例:CentOS)では、以下のコマンドを使用します:

yum install rsync

Arch Linuxにrsyncをインストールするには、次のコマンドを使用します。

pacman -S rsync

openSUSEでは、次のようにします:

zypper install rsync

デフォルトのリポジトリに含まれていない場合は、openSUSEのrsyncインストールページを確認してください。

rsyncを使用してローカルファイルまたはディレクトリを同期する方法

rsyncの一般的な構文は次のとおりです:rsync [options] /path/to/source /path/to/destination

[options]は、手動で確認できるコマンドラインオプションを示します:

man rsync

rsync-command-line-options

手動の終了にはqを押してください。

ファイルをコピーするには:

rsync /bin/ls .

上記のコマンドはrsync /bin/ls /home/your_usernameと同等です。これにより、「ls」コマンドが現在いるディレクトリにコピーされます。デフォルトでは、これが/home/your_usernameとなります。ドット.は現在のディレクトリを示します。パス名は絶対パス( /home/your_username/Downloads/chrome.zip)または現在のディレクトリに対する相対パス( Downloads/chrome.zip)のいずれかです。

非常に大きなファイルを扱う場合、次のコマンドを使用できます。

rsync -P /path/to/file /path/to/destination

これにより、進行状況が表示され、中断した転送を再開できます。再開が必要な場合は、次のようにします:

rsync -P --append /path/to/file /path/to/destination

--appendなしでは、転送が最初から始まります。

ディレクトリを同期するには:

rsync -av /path/to/source /path/to/destination

例コマンド:

rsync -av /bin .

rsyncにおける末尾のスラッシュの影響(重要)

前のコマンドでは、ソースディレクトリのパスに末尾のスラッシュ/がないことに注意してください( /bin/bin/)。末尾のスラッシュがない場合、rsyncはディレクトリ自体をコピーします。したがってrsync -av /bin .は、次の画像に示される結果になります。

rsync-without-trailing-slash

末尾のスラッシュが使用されると、rsyncはそのディレクトリ内のコンテンツをコピーします。この場合、/binのすべてのファイルが宛先ディレクトリに散らばります。したがってrsync -av /bin/ .は、次の画像に示される結果になります。

rsync-with-trailing-slash

この違いを覚えておくことが非常に重要です。なぜなら、TABキーでディレクトリ名を自動補完する際に、自動的に末尾にスラッシュが追加されるからです。そのため、宛先ディレクトリを混乱させないように注意してください。

rsyncを使用してリモート場所(例:サーバー)と同期する方法

前のセクションで説明した内容は、リモート場所でも同様です。唯一の違いは、リモート場所のログインユーザー名とアドレスを先頭に付ける必要があることです。/binディレクトリをリモートコンピューターに送信するには、次のコマンドを使用します。

rsync -av /bin [email protected]:/home/your_username

rsyncはOpenSSHを介して接続します。これは、事前にリモート先にOpenSSHサーバーとログイン資格情報を設定しておく必要があることを意味します。your_usernameはサーバー上に作成されたユーザー名を指します。これは、ローカルマシンでのユーザー名と異なる場合があります。

ドメイン名を所有し、それをサーバーのIPに向けている場合、コマンド内でそのドメインを使用できます。

rsync -av /bin [email protected]:/home/your_username

大きな転送時には、-zパラメータを追加してデータを圧縮することが役立ちます:

rsync -avz /bin [email protected]:/home/your_username

すでに圧縮されているファイル(MP3などの音声ファイル、動画、JPEG画像)を送信する際には、圧縮パラメータを省略できます。これらはさらに圧縮できないため、-zを使用することで時間を無駄にすることになります。

リモート先からローカルコンピュータにファイルをコピーするには、場所を逆にするだけです:

rsync -avz [email protected]:/bin /home/your_username

結論

これで、知っておくべき最も重要なrsyncコマンドがカバーされました。ディレクトリを同期する方法についてより詳細な制御が必要な場合は、オンラインのrsyncマニュアルを参照し、「オプションの概要」を見つけるまでスクロールしてください。