linux之rsync遠端同步檔案
rsync全名
Remote Sync
,是類unix
下資料映象的備份工具。可以方便的實現本地,遠端備份檔案,rsync
最重要的一點是支援增量備份。
命令語法
rsync [OPTION]... SRC DESTrsync [OPTION]... SRC [USER@]host:DESTrsync [OPTION]... [USER@]HOST:SRC DESTrsync [OPTION]... [USER@]HOST::SRC DESTrsync [OPTION]... SRC [USER@]HOST::DESTrsync [OPTION]... rsync://[USER@]HOST[:PORT]/SRC [DEST]
對應於以上六種命令格式,rsync有六種不同的工作模式:
-
拷貝本地檔案。當SRC和DES路徑資訊都不包含有單個冒號":"分隔符時就啟動這種工作模式。如:rsync -a /data /backup
-
使用一個遠端shell程式(如rsh、ssh)來實現將本地機器的內容拷貝到遠端機器。當DST路徑地址包含單個冒號":"分隔符時啟動該模式。如:
rsync -avz *.c foo:src
-
使用一個遠端shell程式(如rsh、ssh)來實現將遠端機器的內容拷貝到本地機器。當SRC地址路徑包含單個冒號":"分隔符時啟動該模式。如:
rsync -avz foo:src/bar /data
-
從遠端rsync伺服器中拷貝檔案到本地機。當SRC路徑資訊包含"::"分隔符時啟動該模式。如:
rsync -av [email protected]::www /databack
-
從本地機器拷貝檔案到遠端rsync伺服器中。當DST路徑資訊包含"::"分隔符時啟動該模式。如:
rsync -av /databack [email protected]::www
-
列遠端機的檔案列表。這類似於rsync傳輸,不過只要在命令中省略掉本地機資訊即可。如:
rsync -v rsync://192.168.1.110/www
如果主機和path路徑之間使用單個冒號隔開,表示使用的是遠端shell通訊方式,而使用雙冒號隔開的則表示的是連線
rsync daemon
常用幾個引數
- -v verbose詳細輸出- -a 遞迴模式,遞迴方式傳輸檔案,並保持連線,許可權,使用者和組,時間資訊- -z 壓縮傳輸- -h human-readable, 輸出友好- -u 跳過已經存在的檔案
rsync 全部引數
-v, --verbose 詳細模式輸出-q, --quiet 精簡輸出模式-c, --checksum 開啟校驗開關,強制對檔案傳輸進行校驗-a, --archive 歸檔模式,表示以遞迴方式傳輸檔案,並保持所有檔案屬性,等於 -rlptgoD-r, --recursive 對子目錄以遞迴模式處理-R, --relative 使用相對路徑資訊-b, --backup 建立備份,也就是對於目的已經存在有同樣的檔名時,將老的檔案重新命名為~filename。可以使用 --suffix 選項來指定不同的備份檔案字首。--backup-dir 將備份檔案(如~filename) 存放在在目錄下。-suffix=SUFFIX 定義備份檔案字首-u, --update 僅僅進行更新,也就是跳過所有已經存在於 DST,並且檔案時間晚於要備份的檔案。(不覆蓋更新的檔案)-l, --links 保留軟鏈結-L, --copy-links 想對待常規檔案一樣處理軟鏈結--copy-unsafe-links 僅僅拷貝指向 SRC 路徑目錄樹以外的鏈結--safe-links 忽略指向 SRC 路徑目錄樹以外的鏈結-H, --hard-links 保留硬鏈結-p, --perms 保持檔案許可權-o, --owner 保持檔案屬主資訊-g, --group 保持檔案屬組資訊-D, --devices 保持裝置檔案資訊-t, --times 保持檔案時間資訊-S, --sparse 對稀疏檔案進行特殊處理以節省 DST 的空間-n, --dry-run 現實哪些檔案將被傳輸-W, --whole-file 拷貝檔案,不進行增量檢測-x, --one-file-system 不要跨越檔案系統邊界-B, --block-size=SIZE 檢驗演算法使用的塊尺寸,預設是 700 位元組-e, --rsh=COMMAND 指定使用 rsh、ssh 方式進行資料同步--rsync-path=PATH 指定遠端伺服器上的 rsync 命令所在路徑資訊-C, --cvs-exclude 使用和 CVS 一樣的方法自動忽略檔案,用來排除那些不希望傳輸的檔案--existing 僅僅更新那些已經存在於 DST 的檔案,而不備份那些新建立的檔案--delete 刪除那些 DST 中 SRC 沒有的檔案--delete-excluded 同樣刪除接收端那些被該選項指定排除的檔案--delete-after 傳輸結束以後再刪除--ignore-errors 及時出現 IO 錯誤也進行刪除--max-delete=NUM 最多刪除 NUM 個檔案--partial 保留那些因故沒有完全傳輸的檔案,以是加快隨後的再次傳輸--force 強制刪除目錄,即使不為空--numeric-ids 不將數字的使用者和組 ID 匹配為使用者名稱和組名--timeout=TIME IP 超時時間,單位為秒-I, --ignore-times 不跳過那些有同樣的時間和長度的檔案--size-only 當決定是否要備份檔案時,僅僅察看檔案大小而不考慮檔案時間--modify-window=NUM 決定檔案是否時間相同時使用的時間戳視窗,預設為 0-T --temp-dir=DIR 在 DIR 中建立臨時檔案--compare-dest=DIR 同樣比較 DIR 中的檔案來決定是否需要備份-P 等同於 --partial--progress 顯示備份過程-z, --compress 對備份的檔案在傳輸時進行壓縮處理--exclude=PATTERN 指定排除不需要傳輸的檔案模式--include=PATTERN 指定不排除而需要傳輸的檔案模式--exclude-from=FILE 排除 FILE 中指定模式的檔案--include-from=FILE 不排除 FILE 指定模式匹配的檔案--version 列印版本資訊
本地拷貝
當 SRC 和 DES 路徑資訊都不包含有單個冒號 “:” 分隔符時就啟動這種工作模式。
將jdk.tar.gz
拷貝到rumenz
目錄
> rsync -avhz jdk.tar.gz rumenz
將src
目錄拷貝到rumenz
目錄
將
/opt/src
目錄下的檔案同步傳送到rumenz
目錄下。記住如果目標地址沒有src
目錄,rsync
會自動建立該資料夾。
> rsync -azhv /opt/src rumenz/
將src
目錄下的所有檔案拷貝到rumenz
目錄
> rsync -azhv /opt/src/ rumenz/
SRC 路徑末尾的 / 表示不自動建立 DEST 資料夾,在 man rsync 中的解釋就是末尾的 / 表示”拷貝當前目錄下的檔案” ,而不是”拷貝當前的目錄”.
遠端拷貝
使用一個遠端 shell 程式(如 rsh、ssh) 來實現將本地機器的內容拷貝到遠端機器。當 DES 路徑地址包含冒號
:
或::
分隔符時啟動該模式。
將本地/opt/src/
目錄下 所有檔案同步備份到遠端 /opt/rumenz/ 目錄
> rsync -avhz /opt/src/ [email protected]:/opt/rumenz/
將本地/opt/src/
目錄同步備份到遠端 /opt/rumenz/ 目錄
> rsync -avhz /opt/src [email protected]:/opt/rumenz/
將遠端 /opt/rumenz
目錄拷貝到rumenz
目錄(ssh模式,單冒號)
> rsync -avhz [email protected]:/opt/rumenz rumenz/
將遠端 /opt/rumenz
目錄下所有的檔案拷貝到rumenz
目錄(ssh模式,單冒號)
> rsync -avhz [email protected]:/opt/rumenz/ rumenz/
將遠端 /opt/rumenz
目錄拷貝到rumenz
目錄(rsync模式,雙冒號)
> rsync -avhz [email protected]::/opt/rumenz rumenz/
將遠端 /opt/rumenz
目錄下所有的檔案拷貝到rumenz
目錄(rsync模式,雙冒號)
> rsync -avhz [email protected]::/opt/rumenz/ rumenz/
列遠端機的檔案列表
> rsync -v rsync://rumenz.com /www
rsync 使用非標準埠
-
經常遇見的一種情況就是 ssh 更改了預設 22 埠,這個時候就需要使用 -e 引數。
-
rsync 有兩種常用的認證方式,一種為 rsync-daemon 方式,另外一種則是 ssh。
-
ssh 一般為首選,但當遠端伺服器的 ssh 預設埠被修改後,rsync 找不到一個合適的方法來輸入對方 ssh 服務埠號。
-
比如現在向機器
rumenz.com
傳送檔案,但此時rumenz.com
的 ssh 埠已經不是預設的 22 埠。
> rsync -avz -e "ssh -p $port" /opt/src/ [email protected]:/opt/rumenz/
顯示備份進度
> rsync -zhve ssh --progress jdk.tar.gz [email protected]:/opt/rumenz/
限制備份檔案最大值
> rsync -zhve ssh --max-size='2000k' jdk.tar.gz [email protected]:/opt/rumenz/
備份結束後自動刪除本地檔案
> rsync --remove-source-files -zvh jdk.tar.gz [email protected]:/opt/rumenz/
設定備份頻寬
> rsync --bwlimit=100 -avzhe ssh /opt/src/ [email protected]:/opt/rumenz/