概要
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]。
沒有留言:
張貼留言