1. 程式人生 > 實用技巧 >rsync用法及引數詳解

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:DEST
 
3)訪問 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 命令,同步後的檔案的屬主將保持原來的使用者身份。

摘自:

https://www.cnblogs.com/noxy/p/8986164.html

http://www.cnblogs.com/f-ck-need-u/p/7220009.html