はじめに
こんにちは!今回はrsyncコマンドについて解説します。
rsyncは、ファイルやディレクトリを効率的に同期・バックアップするコマンドです。差分だけを転送するので、大容量のバックアップやリモートサーバーとの同期に最適。サーバー管理やバックアップ自動化の現場で毎日使われるコマンドですね。
「超スマートなファイルコピー&同期ツール」って感じです。
rsyncコマンドとは
rsyncは、ローカル、またはリモートのファイルやディレクトリを同期する外部コマンドです。“remote sync"の略ですね。
cpやscp の違いは、rsyncは差分検知 が得意なところ。既に同じファイルが存在していれば、変わった部分だけを転送します。だから、大容量のデータや定期的なバックアップに最適なんです。圧縮転送、削除ファイルの同期、タイムスタンプ保持など、バックアップに必要な機能が揃っています。
基本構文
|
|
コピー元にホスト名を含める場合はリモート転送になります。host:pathの形式です。
主なオプション
| オプション | 説明 |
|---|---|
-a |
アーカイブモード(-rlptgoD と同等) |
-v |
詳細表示(verbose) |
-z |
転送中に圧縮 |
-r |
ディレクトリを再帰的に処理 |
--delete |
コピー先に存在して、コピー元に無いファイルを削除 |
-e ssh |
SSH経由で転送 |
--exclude |
除外パターンを指定 |
--progress |
転送進捗を表示 |
-u |
新しいファイルのみ転送(update) |
--backup |
上書きファイルのバックアップを作成 |
使用例
例1: 基本的なローカルコピー
|
|
実行結果:
|
|
source/ディレクトリの内容をdestination/にコピーします。-aでアーカイブモード(所有者、権限、タイムスタンプ保持)。
例2: 詳細表示でコピー
|
|
実行結果:
|
|
-vで転送ファイルと統計情報が表示されます。
例3: リモートサーバーへのバックアップ
|
|
実行結果:
|
|
ローカルの/home/user/data/をリモートサーバーの/backup/data/に同期。-zで圧縮転送、--deleteでコピー先の余分なファイルを削除。
例4: リモートからローカルへのダウンロード
|
|
実行結果:
|
|
リモートサーバーのファイルをローカルにダウンロード。
例5: 差分のみ同期(効率的)
|
|
実行結果:
|
|
--progressで各ファイルの転送進捗を表示。差分だけが転送されます。
例6: 特定ファイルを除外してコピー
|
|
実行結果:
|
|
*.logファイルとcache/ディレクトリを除外してコピー。
例7: SSHで安全にリモート転送
|
|
実行結果:
|
|
-e sshで SSH経由で転送。パスフレーズ認証やSSH鍵を使った安全な転送。
例8: バックアップファイルを作成
|
|
実行結果:
|
|
上書きされるファイルをfilename~の形式でバックアップ。
例9: 日付付きバックアップ
|
|
実行結果:
|
|
日付を含むディレクトリ名でバックアップ。
例10: 大容量ファイルの転送(圧縮)
|
|
実行結果:
|
|
圧縮レベルを指定して、大容量ファイルを効率的に転送。
Tips・注意点
スラッシュの有無に注意
|
|
最後のスラッシュで動作が変わります。ディレクトリ構造が変わるので要注意。
–deleteは慎重に
|
|
--deleteを使うと、コピー先に存在してコピー元に無いファイルが削除されます。データ消失のリスクがあるので、重要なファイルは事前にバックアップ。
大容量転送は–partialで中断対応
|
|
転送途中で失敗した場合、--partialで部分ファイルが残り、次回は続きから転送できます。
実践的な使い方
定期バックアップスクリプト
|
|
毎日実行するcronスクリプト。日付付きで完全同期バックアップを作成。
サーバー間のデータ同期
|
|
本番サーバーにコードをデプロイ。差分だけ転送されるので高速。
開発環境から本番環境への資産転送
|
|
不要なディレクトリを除外して転送。容量節約と転送高速化。
まとめ
rsyncコマンドのポイント:
- ファイル・ディレクトリの効率的な同期・バックアップ
- -a: アーカイブモード(タイムスタンプ・権限保持)
- -z: 圧縮転送(リモート転送に最適)
- –delete: コピー先の不要ファイルを削除(要注意!)
- -e ssh: SSH経由で安全に転送
- 差分検知: 変わった部分だけ転送するから高速
- よく使う組み合わせ:
rsync -avz --delete --progress
バックアップやサーバー同期の場面で大活躍。一度覚えると手放せなくなるコマンドですよ!