rsync用法及引數詳解
rsync
rsync的目的是實現本地主機和遠端主機上的檔案同步(包括本地推到遠端,遠端拉到本地兩種同步方式),也可以實現本地不同路徑下檔案的同步,但不能實現遠端路徑1到遠端路徑2之間的同步(scp可以實現)。
不考慮rsync的實現細節,就檔案同步而言,涉及了原始檔和目標檔案的概念,還涉及了以哪邊檔案為同步基準。例如,想讓目標主機上的檔案和本地檔案保持同步,則是以本地檔案為同步基準,將本地檔案作為原始檔推送到目標主機上。反之,如果想讓本地主機上的檔案和目標主機上的檔案保持同步,則目標主機上的檔案為同步基準,實現方式是將目標主機上的檔案作為原始檔拉取到本地。當然,要保持本地的兩個檔案相互同步,rsync也一樣能實現,這就像Linux中cp命令一樣,以本地某檔案作為源,另一檔案作為目標檔案,但請注意,雖然rsync和cp能達到相同的目的,但它們的實現方式是不一樣的。
既然是檔案同步,在同步過程中必然會涉及到源和目標兩檔案之間版本控制的問題,例如是否要刪除源主機上沒有但目標上多出來的檔案,目標檔案比原始檔更新(newer than source)時是否仍要保持同步,遇到軟連結時是拷貝軟連結本身還是拷貝軟連結所指向的檔案,目標檔案已存在時是否要先對其做個備份等等。
rsync同步過程中由兩部分模式組成:決定哪些檔案需要同步的檢查模式以及檔案同步時的同步模式。
(1).檢查模式是指按照指定規則來檢查哪些檔案需要被同步,例如哪些檔案是明確被排除不傳輸的。預設情況下,rsync使用"quick check"演算法快速檢查原始檔和目標檔案的大小、mtime(修改時間)是否一致,如果不一致則需要傳輸。當然,也可以通過在rsync命令列中指定某些選項來改變quick check的檢查模式,比如"--size-only"選項表示"quick check"將僅檢查檔案大小不同的檔案作為待傳輸檔案。rsync支援非常多的選項,其中檢查模式的自定義性是非常有彈性的。
(2).同步模式是指在檔案確定要被同步後,在同步過程發生之前要做哪些額外工作。例如上文所說的是否要先刪除源主機上沒有但目標主機上有的檔案,是否要先備份已存在的目標檔案,是否要追蹤連結檔案等額外操作。rsync也提供非常多的選項使得同步模式變得更具彈性。
相對來說,為rsync手動指定同步模式的選項更常見一些,只有在有特殊需求時才指定檢查模式,因為大多數檢查模式選項都可能會影響rsync的效能。
rsync 的命令格式(用法)為:
1)本地使用: rsync [OPTION...] SRC... [DEST] 2)通過遠端 Shell 使用: 拉: rsync [OPTION...] [USER@]HOST:SRC... [DEST] 推: rsync [OPTION...] SRC... [USER@]HOST:DEST3)訪問 rsync 伺服器: 拉: rsync [OPTION...] [USER@]HOST::SRC... [DEST] 推: rsync [OPTION...] SRC... [USER@]HOST::DEST 拉: rsync [OPTION...] rsync://[USER@]HOST[:PORT]/SRC... [DEST] 推: rsync [OPTION...] SRC... rsync://[USER@]HOST[:PORT]/DEST
其中:
-
SRC: 是要複製的源位置
-
DEST: 是複製目標位置
-
若本地登入使用者與遠端主機上的使用者一致,可以省略 USER@
-
使用遠端 shell 同步時,主機名與資源之間使用單個冒號“:”作為分隔符
-
使用 rsync 伺服器同步時,主機名與資源之間使用兩個冒號“::”作為分隔符
-
當訪問 rsync 伺服器時也可以使用 rsync://URL
-
“拉”複製是指從遠端主機複製檔案到本地主機
-
“推”複製是指從本地主機複製檔案到遠端主機
-
當進行“拉”複製時,若指定一個 SRC 且省略 DEST,則只列出資源而不進行復制
下面列出常用選項:
選項 說明 -a, ––archive 歸檔模式,表示以遞迴方式傳輸檔案,並保持所有檔案屬性,等價於 -rlptgoD (注意不包括 -H) -r, ––recursive 對子目錄以遞迴模式處理 -l, ––links 保持符號連結檔案 -H, ––hard-links 保持硬連結檔案 -p, ––perms 保持檔案許可權 -t, ––times 保持檔案時間資訊 -g, ––group 保持檔案屬組資訊 -o, ––owner 保持檔案屬主資訊 (super-user only) -D 保持裝置檔案和特殊檔案 (super-user only) -z, ––compress 在傳輸檔案時進行壓縮處理 ––exclude=PATTERN 指定排除一個不需要傳輸的檔案匹配模式 ––exclude-from=FILE 從 FILE 中讀取排除規則 ––include=PATTERN 指定需要傳輸的檔案匹配模式 ––include-from=FILE 從 FILE 中讀取包含規則 ––copy-unsafe-links 拷貝指向SRC路徑目錄樹以外的連結檔案 ––safe-links 忽略指向SRC路徑目錄樹以外的連結檔案(預設) ––existing 僅僅更新那些已經存在於接收端的檔案,而不備份那些新建立的檔案 ––ignore-existing 忽略那些已經存在於接收端的檔案,僅備份那些新建立的檔案 -b, ––backup 當有變化時,對目標目錄中的舊版檔案進行備份 ––backup-dir=DIR 與 -b 結合使用,將備份的檔案存到 DIR 目錄中 ––link-dest=DIR 當檔案未改變時基於 DIR 建立硬連結檔案 ––delete 刪除那些接收端還有而傳送端已經不存在的檔案 ––delete-before 接收者在傳輸之前進行刪除操作 (預設) ––delete-during 接收者在傳輸過程中進行刪除操作 ––delete-after 接收者在傳輸之後進行刪除操作 ––delete-excluded 在接收方同時刪除被排除的檔案 -e, ––rsh=COMMAND 指定替代 rsh 的 shell 程式 ––ignore-errors 即使出現 I/O 錯誤也進行刪除 ––partial 保留那些因故沒有完全傳輸的檔案,以是加快隨後的再次傳輸 ––progress 在傳輸時顯示傳輸過程 -P 等價於 ––partial ––progress ––delay-updates 將正在更新的檔案先儲存到一個臨時目錄(預設為 “.~tmp~”),待傳輸完畢再更新目標檔案 -v, ––verbose 詳細輸出模式 -q, ––quiet 精簡輸出模式 -h, ––human-readable 輸出檔案大小使用易讀的單位(如,K,M等) -n, ––dry-run 顯示哪些檔案將被傳輸 ––list-only 僅僅列出檔案而不進行復制 ––rsyncpath=PROGRAM 指定遠端伺服器上的 rsync 命令所在路徑 ––password-file=FILE 從 FILE 中讀取口令,以避免在終端上輸入口令,通常在 cron 中連線 rsync 伺服器時使用 -4, ––ipv4 使用 IPv4 -6, ––ipv6 使用 IPv6 ––version 列印版本資訊 ––help 顯示幫助資訊 -
若使用普通使用者身份執行 rsync 命令,同步後的檔案的屬主將改變為這個普通使用者身份。
-
若使用超級使用者身份執行 rsync 命令,同步後的檔案的屬主將保持原來的使用者身份。
摘自: