Linux rsync コマンド
rsync コマンドとは
rsync (Remote Sync) は、Linux システムにおける強力なファイル同期ツールで、ローカルまたはリモートシステム間でファイルやディレクトリを効率的に同期できます。rsync は「差分転送」アルゴリズムで知られており、ソースファイルとターゲットファイルの差分部分のみを転送するため、ファイル転送効率が大幅に向上します。
rsync の主な特徴
- 差分同期:変更されたファイル部分のみを転送し、帯域幅と時間を節約
- 属性の保持:ファイル権限やタイムスタンプなどのメタデータを保持可能
- 圧縮転送:データ転送時の圧縮に対応し、ネットワーク負荷を軽減
- 柔軟な除外:特定のファイルやディレクトリを除外可能
- リモート対応:SSH 経由でリモートサーバーのファイルを安全に同期
rsync 基本構文
rsync [选项] 源文件 目标文件
よく使うコマンド形式
ローカル同期:
rsync -av /path/to/source/ /path/to/destination/
ローカルからリモートへ同期:
rsync -avz /local/path/ username@remote_host:/remote/path/
リモートからローカルへ同期:
rsync -avz username@remote_host:/remote/path/ /local/path/
rsync よく使うオプションの詳細
| オプション | 正式名称 | 説明 |
|---|---|---|
| -a | --archive | アーカイブモード、すべてのファイル属性を保持(-rlptgoD に相当) |
| -v | --verbose | 詳細な転送情報を表示 |
| -z | --compress | 転送時にデータを圧縮 |
| -r | --recursive | ディレクトリを再帰的にコピー |
| -l | --links | シンボリックリンクを保持 |
| -p | --perms | ファイル権限を保持 |
| -t | --times | ファイルの更新時刻を保持 |
| -g | --group | ファイルのグループを保持 |
| -o | --owner | ファイルの所有者を保持 |
| -D | --devices | デバイスファイルを保持(スーパーユーザーのみ) |
| -h | --human-readable | 数値を人間が読みやすい形式で出力 |
| --progress | 転送進捗を表示 | |
| --delete | 転送先にあるソースに存在しないファイルを削除 | |
| --exclude=PATTERN | PATTERN に一致するファイルを除外 | |
| --include=PATTERN | PATTERN に一致するファイルを含める |
rsync 実践的な使用例
例1:ローカルディレクトリの同期
例
# /home/user/docs を /backup/docs に同期し、すべての属性を保持
rsync -av /home/user/docs/ /backup/docs/
rsync -av /home/user/docs/ /backup/docs/
注意:ソースディレクトリの後のスラッシュ/が重要です:
- スラッシュあり:ディレクトリの内容を同期
- スラッシュなし:ディレクトリ自体を同期
例2:リモートサーバーのバックアップ
例
# ローカルディレクトリをリモートサーバーに同期し、圧縮を使用
rsync -avz /data/backups/ user@example.com:/remote/backups/
rsync -avz /data/backups/ user@example.com:/remote/backups/
例3:除外オプション付きの同期
例
# 同期するが、.tmp ファイルと log ディレクトリを除外
rsync -av --exclude='*.tmp' --exclude='log/' /source/ /destination/
rsync -av --exclude='*.tmp' --exclude='log/' /source/ /destination/
例4:両端を完全に一致させる(転送先の余分なファイルを削除)
例
rsync -av --delete /source/ /destination/
rsync 高度な使い方
1. SSH でカスタムポートを使用
例
rsync -avz -e 'ssh -p 2222' /local/path/ user@host:/remote/path/
2. 帯域幅の制限(500KB/s に制限)
例
rsync -avz --bwlimit=500 /source/ /destination/
3. 部分転送(100KB より大きいファイルのみ転送)
例
rsync -av --min-size=100K /source/ /destination/
4. 定期バックアップスクリプト
例
#!/bin/bash
rsync -avz --delete /important/data/ backup@server:/backups/data/
echo "Backup completed at $(date)" >> /var/log/backup.log
rsync -avz --delete /important/data/ backup@server:/backups/data/
echo "Backup completed at $(date)" >> /var/log/backup.log
rsync よくある質問と回答
Q1: rsync と scp の違いは何ですか?
- rsync:差分同期で、差分部分のみを転送するため、定期バックアップに適しています
- scp:毎回全量転送するため、一度きりのファイル転送に適しています
Q2: 中断した rsync 転送を再開するには?
使用する--partialオプションで、部分的に転送されたファイルを保持します:
例
rsync -av --partial /source/ /destination/
Q3: rsync が何を行うかを実際に実行せずに確認するには?
使用する-n(dry-run) オプション:
例
rsync -avn /source/ /destination/
Q4: rsync の転送速度を向上させるには?
- 使用する
-zオプションで圧縮を有効にする - 使用する
--compress-level=N圧縮レベルを調整(1-9) - チェックサム計算を無効にする(信頼できるネットワークのみ):
--no-checksum
ベストプラクティスの推奨事項
- テスト先行:使用する
-nオプションでシミュレーション実行を先に行う - ログ記録:追加する
--log-file=rsync.log操作を記録 - 権限管理:使用を検討する
--chmodファイル権限を統一 - 定期タスク:crontab と組み合わせて自動バックアップを実現
- 安全な転送:常に SSH 経由でリモート転送を行う
まとめ
rsync は Linux システム管理者と開発者にとって必須のツールです。これを習得すると以下のことが可能になります:
- ローカルおよびリモートのファイル同期を効率的に実行
- 自動バックアップを実現
- ネットワークデータ転送を最適化
- ファイルシステムの整合性を維持
この記事の学習を通じて、rsync の基本的な使い方と高度なテクニックを習得できたはずです。実際の作業で練習を重ね、rsync のさらに多くの強力な機能を徐々に試してみることをお勧めします。
その他の拡張