創用 CC 授權條款
除非另有註明,本網站的著作Fygul Hether製作,以創用CC 姓名標示-非商業性-禁止改作 4.0 國際 授權條款釋出。

2020年10月27日 星期二

rsync使用簡介

概要

Rsync是多數Unix類作業系統內建的工具程式,常被用在本機或與遠端機器做資料夾同步之類的用途。許多開源作業系統都是採用它來做鏡像站間的映像檔複製工作。本文談論點rsync的簡單使用,展示環境是Ubuntu MATE 20.04。

rsync簡介

用途與特色

Rsync是個快速好用的檔案複製工具,可做本機的複製,也可以利用遠端shell或是遠端rsync daemon與遠端的主機做複製。提供大量命令行選項以及設置檔案,可對複製工作做多方面的設置。它的delta-transfer algorithm差異傳輸算法,可以只傳送來源檔案與目的檔案之間不同的部分,而減少在網路上的資料傳輸量,也可將資料壓縮後傳送。Rsync廣泛用於備份與鏡像工作,也做為日常用改良版的複製命令。

它只做本機,或是本機與遠端機器的資料複製,不支援在兩部遠端機器之間複製檔案。

連線

用在本機與遠端主機以remote shell做同步檔案時,rsync以SSH連線遠端主機(也可用 -e 選項指定任何remote shell),連線後會調用遠端機器的rsync,之後二支程式會決定來源檔案的哪些部分要傳送。或者,遠端機器以daemon mode運行,預設開放TCP 873埠,本機以rsync協議(rsync://)連線後傳輸檔案,若無特別設置,資料傳輸不加密。

檔案比較

Rsync預設檢查檔案的大小與最後修改時間來尋找所要傳輸的檔案;也可以比較來源檔與目地檔的checksum(指定--checksum選項),但這會較花時間。

用法

命令形式

使用rsync就如同使用rcp般,要指定來源與目地,其中之一可以是在遠端機器。

以remote shell傳輸的命令形式,在主機(host)後有一半形冒號 : ;而連結rsync daemon的命令形式,在hotst後加雙冒號 :: ,或者指定rsync://:


rsync [OPTION]... SRC [SRC]... DEST
rsync [OPTION]... SRC [SRC]... [USER@]HOST:DEST
rsync [OPTION]... SRC [SRC]... [USER@]HOST::DEST
rsync [OPTION]... SRC [SRC]... rsync://[USER@]HOST[:PORT]/DEST
rsync [OPTION]... [USER@]HOST:SRC [DEST]
rsync [OPTION]... [USER@]HOST::SRC [DEST]
rsync [OPTION]... rsync://[USER@]HOST[:PORT]/SRC [DEST]

如果沒有給DEST,檔案會像 "ls -l" 的輸出格式般列示出來。

在rsync daemon的形式中,SRC或DEST是module name。為避免篇幅過長,以下不涉及daemon mode。

顯示幫助說明

打開終端機,執行 rsync 即可顯示用法與選項,還有上述的命令形式。這裡列其出中一部分選項:


 -v, --verbose               increase verbosity
 -q, --quiet                 suppress non-error messages
 -c, --checksum              skip based on checksum, not mod-time & size
 -a, --archive               archive mode; equals -rlptgoD (no -H,-A,-X)
 -u, --update                skip files that are newer on the receiver
 -n, --dry-run               perform a trial run with no changes made
 -e, --rsh=COMMAND           specify the remote shell to use
     --delete                delete extraneous files from destination dirs
     --delete-excluded       also delete excluded files from destination dirs
     --max-size=SIZE         don't transfer any file larger than SIZE
     --timeout=SECONDS       set I/O timeout in seconds
 -z, --compress              compress file data during the transfer
     --compress-level=NUM    explicitly set compression level
     --skip-compress=LIST    skip compressing files with a suffix in LIST
 -C, --cvs-exclude           auto-ignore files the same way CVS does
     --exclude=PATTERN       exclude files matching PATTERN
     --exclude-from=FILE     read exclude patterns from FILE
     --include=PATTERN       don't exclude files matching PATTERN
     --include-from=FILE     read include patterns from FILE
     --files-from=FILE       read list of source-file names from FILE
 -s, --protect-args          no space-splitting; only wildcard special-chars
 -h, --human-readable        output numbers in a human-readable format
     --progress              show progress during transfer
 -i, --itemize-changes       output a change-summary for all updates
     --out-format=FORMAT     output updates using the specified FORMAT
     --log-file=FILE         log what we're doing to the specified FILE
     --log-file-format=FMT   log updates using the specified FMT
     --list-only             list the files instead of copying them
     --bwlimit=RATE          limit socket I/O bandwidth
     --stop-at=y-m-dTh:m     Stop rsync at year-month-dayThour:minute
     --time-limit=MINS       Stop rsync after MINS minutes have elapsed
     --noatime               do not alter atime when opening source files
     --version               print version number
(-h) --help                  show this help (-h is --help only if used alone)

如果要傳輸的檔案包含空白,可指定 --protect-args 選項或在空白前加上 '\' 。

使用範例

與遠端機器做資料夾同步


$ rsync -av --delete --progress ~/data/ mypc:/home/fygul/data/ -e 'ssh -p 2012'

上例因mypc的SSH埠號不是使用預設的22,故用 -e 選項指定ssh程式所用的埠號。

注意SRC後若有加 '/' ,不會在DEST下再建立一SRC子目錄。上例的SRC若改成 ~/data ,則會複製到 /home/fygul/data/data 。這行為與BSD cp的習慣相同[5]。

系統根目錄的完整備份


$ rsync -avAXHS --progress --exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/run/*","/mnt/*","/media/*","/lost+found"} / /path/to/backup

GUI

以上純粹使用命令行,若想用圖形界面,可找到幾個,其中一個是Gsync,提供簡潔的界面,這裡就不做進一步的介紹。

其他

以上只是簡單的用法,別忘了rsync官網上的文件與範例[3],也可見別人寫的[4]。

參考與連結

  1. rsync
  2. Rsync
  3. rsync examples
  4. Linux 使用 rsync 遠端檔案同步與備份工具教學與範例
  5. rsync - ArchWiki

沒有留言:

張貼留言