rsyncコマンド
rsync は、ファイルやディレクトリを効率的に同期するためのコマンドで、ネットワーク経由でのデータ転送にも対応している。
デフォルトではSSHとは無関係であるが、オプションを指定することで SSHをトンネルとして利用できる。
パスワード認証方式の場合はパスワードを問われ、公開鍵認証方式では設定が済んでいればそのまま転送が開始される。
rsyncがインストールされていない場合、以下のコマンドでrsyncをインストールする
$ sudo apt update
$ sudo apt install rsync
書式: rsync オプション ローカルホストのファイルパス/ファイル名.拡張子 リモートホストのユーザ名@IPアドレスまたはドメイン名:リモートホストのディレクトリパス
書式: rsync オプション リモートホストのユーザ名@IPアドレスまたはドメイン名:リモートホストのファイルパス/ファイル名.拡張子 ローカルホストのディレクトリパス
1. ローカルホストからリモートホストへ転送する場合:
$ rsync -avz -e ssh "/home/user/Desktop/sample.txt" server@IPaddress_or_domainname:/home/server/test
実行結果:
sending incremental file list
sample.txt
sent 3,243 bytes received 35 bytes 6,556.00 bytes/sec
total size is 10,893 speedup is 3.32
2. リモートホストからローカルホストへ転送する場合:
$ rsync -avz -e ssh server@IPaddress_or_domainname:/home/server/test/Book1.xlsx /home/user/Desktop
実行結果:
receiving incremental file list
Book1.xlsx
sent 43 bytes received 9,504 bytes 6,364.67 bytes/sec
total size is 11,985 speedup is 1.26
| 基本的なオプション | 内容 |
|---|---|
| -e | ssh によって、rsyncがSSH経由で接続するよう指定 |
| -a | アーカイブモード: パーミッション、シンボリックリンクなどを保持 |
| -v | 詳細表示: 転送されるファイルの情報を表示する |
| -r | 再帰的にコピー: ディレクトリ内のすべてのファイルをコピーする |
| -u | 新しいファイルのみ更新: 送信先のファイルが送信元より新しい場合はスキップ |
| -n | シミュレーション: 実際には転送せず、どのファイルがコピーされるかを確認 |
| 転送最適化オプション | 内容 |
| -z | 圧縮転送: データを圧縮して送信し、ネットワーク帯域を節約 |
| -P | -progress(進行状況を表示) + --partial(中断時に部分的なファイルを保持) |
| --bwlimit=RATE | 帯域幅制限: 転送速度を制限(例: --bwlimit=1000 は 1000KB/s に制限) |
| --ignore-existing | 既存ファイルを無視: 送信先に既にあるファイルはスキップ |
| 削除・同期関連のオプション | 内容 |
| --delete | 不要なファイルを削除: 送信元にないファイルを送信先から削除 |
| --delete-before --delete-during --delete-after |
削除タイミングの制御(転送前・転送中・転送後) |
| --exclude=PATTERN | 特定のファイルを除外: 例 --exclude='*.tmp'(.tmp ファイルを除外) |
| --include=PATTERN | 特定のファイルのみ含める: --exclude と併用 |
| リモート転送関連のオプション | 内容 |
| --rsync-path=PATH | リモート側の rsync のパスを指定(例: --rsync-path='/usr/bin/rsync') |
| -p , --port=PORT | SSH ポート指定: -e "ssh -p 2222" という形で利用可能 |
| その他オプション | 内容 |
| --checksum | チェックサムを使用して差分検出(通常はタイムスタンプとサイズで比較) |
| --size-only | ファイルサイズのみで変更を判断 |
| --remove-source-files | 転送後に元のファイルを削除(空ディレクトリは削除されない) |
| --remove-source-dirs | ディレクトリも削除 |