rsync(六)命令中文手册
生活随笔
收集整理的這篇文章主要介紹了
rsync(六)命令中文手册
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
?
rsync(1) rsync(1)名稱rsync - 一個快速、多功能的遠(yuǎn)程(和本地)文件拷貝工具摘要Local: rsync [OPTION...] SRC... [DEST]Access via remote shell:Pull: rsync [OPTION...] [USER@]HOST:SRC... [DEST]Push: rsync [OPTION...] SRC... [USER@]HOST:DESTAccess via rsync daemon:Pull: rsync [OPTION...] [USER@]HOST::SRC... [DEST]rsync [OPTION...] rsync://[USER@]HOST[:PORT]/SRC... [DEST]Push: rsync [OPTION...] SRC... [USER@]HOST::DESTrsync [OPTION...] SRC... rsync://[USER@]HOST[:PORT]/DEST當(dāng)僅有一個SRC或DEST參數(shù)時將列出源文件列表而不是復(fù)制文件。描述Rsync是一個快速且功能非常豐富的文件拷貝工具。它可以在本地和遠(yuǎn)程之間通過shell或rsync服務(wù)互相拷貝文件。它提供了大量的選項來控制它各方面功能的行為,且在指定待拷貝文件方面非常有彈性。它以其增量拷貝算法而出名,只拷貝源和目標(biāo)不同的文件部分,因此減少網(wǎng)絡(luò)間要傳輸?shù)臄?shù)據(jù)。Rsync每天都被廣泛用于做備份、鏡像和當(dāng)作升級版拷貝命令。Rsync使用"quick check"算法(默認(rèn))決定文件是否需要被傳輸,它會找出大小或最后修改時間(mtime)不同的文件。當(dāng)"quick check"算法表明了文件不需要被更新時,任何其他保留屬性(譯者注:除大小和最后修改時間外的屬性)都將直接在目標(biāo)文件上修改。rsync的其他特性包括:o 支持拷貝鏈接文件、設(shè)備文件、所有權(quán)(即所有者和所屬組)、屬組以及權(quán)限o 支持類似于GNU tar命令的exclude和exclude-from選項o 支持CVS排除模式以忽略相同的文件(譯者注:CVS是一種版本控制系統(tǒng),其他版本控制系統(tǒng)如git、svn)o 可以使用任意透明的遠(yuǎn)程shell(remote shell),包括ssh或rsho 不要求超級管理員權(quán)限o 以pipeline管道模型傳輸文件以便最小化降低成本o 支持匿名或可身份認(rèn)證的rsync daemon模式(做鏡像的理想方式)一般特性Rsync在本地或遠(yuǎn)程主機(jī)之間拷貝文件(但不支持兩個遠(yuǎn)程之間互相拷貝)。rsync有兩種不同的方式聯(lián)系遠(yuǎn)程主機(jī):使用遠(yuǎn)程shell程序作為傳輸方式(如ssh或rsh)或直接通過TCP聯(lián)系rsync守護(hù)進(jìn)程。當(dāng)命令行中指定的源或目標(biāo)主機(jī)后使用了單個冒號(:)時將使用遠(yuǎn)程shell傳輸模式。當(dāng)在命令行中指定的源或目標(biāo)主機(jī)后使用雙冒號(::)或使用了rsync://這種URL時將表示使用TCP聯(lián)系rsync守護(hù)進(jìn)程,但rsync://方式有一個例外,請參見下文"通過遠(yuǎn)程SHELL連接使用RSYNC-DAEMON特性"段落的內(nèi)容。但有一個特殊情況,如果只給定了源地址沒有給定目標(biāo)地址,則將以類似于"ls -l"的格式輸出文件列表。意料之中的是,如果給定的源地址和目標(biāo)地址都不是遠(yuǎn)程地址,則在本機(jī)進(jìn)行拷貝(見--list-only選項)。Rsync命令中,本地端總是扮演"client"角色,遠(yuǎn)程端總是扮演"server"角色。不要混淆"server"和rsync daemon,rsyncdaemon一定是一個"server",但是"server"可能是一個rsync daemon也可能是遠(yuǎn)程shell派生出來的進(jìn)程。安裝請閱讀README文件來查看安裝說明。當(dāng)安裝完成后,你可以通過遠(yuǎn)程shell(也可以通過rsync daemon協(xié)議)讓rsync與任意你能訪問的主機(jī)進(jìn)行交流。對于遠(yuǎn)程傳輸,現(xiàn)代rsync使用ssh與其他主機(jī)進(jìn)行交流,但是可以配置其他默認(rèn)的遠(yuǎn)程shell,如rsh或remsh。 你也可以通過命令行的"-e"選項或設(shè)置RSYNC_RSH環(huán)境變量來指定你想要使用的遠(yuǎn)程shell。rsync必須同時裝在源主機(jī)和目標(biāo)主機(jī)上。用法rsync的使用方法和rcp一樣。你必須指定源地址和目標(biāo)地址,其中一個可能是遠(yuǎn)程地址。也許解釋語法最好的方式是通過幾個示例:rsync -t *.c foo:src/這將會把當(dāng)前目錄下所有能匹配*.c的文件傳輸?shù)街鳈C(jī)foo上的src目錄下。如果遠(yuǎn)程主機(jī)上已經(jīng)存在某些同名文件,rsync的遠(yuǎn)程更新(rsync-update)協(xié)議將會更新哪些有差異的文件。更詳細(xì)的內(nèi)容見技術(shù)報告。rsync -avz foo:src/bar /data/tmp這將會以遞歸方式把遠(yuǎn)程主機(jī)foo上的src/bar目錄下的所有文件傳輸?shù)奖镜刂鳈C(jī)的/data/tmp目錄下。這些文件以歸檔(archive)模式傳輸,它保證在傳輸過程中保留符號鏈接、設(shè)備文件、屬性、權(quán)限、所有者、所屬組等。另外,在傳輸過程中會使用壓縮功能以減少要傳輸?shù)臄?shù)據(jù)體積。rsync -avz foo:src/bar/ /data/tmp使用尾隨斜線(/)改變了原本的行為,它避免了在目標(biāo)地址創(chuàng)建一個額外的目錄層次。帶有尾隨斜線時,你可以理解為"拷貝目錄的內(nèi)容"而不是拷貝"拷貝目錄名"(譯者注:即拷貝目錄本身),但是這兩種情況都會將目錄中包含的文件傳輸?shù)侥繕?biāo)目錄下。換句話說,下面兩條命令都以相同的方式進(jìn)行拷貝,包括/dest/foo的屬性設(shè)置。rsync -av /src/foo /destrsync -av /src/foo/ /dest/foo還需要注意的是,拷貝主機(jī)或引用模塊的默認(rèn)目錄不需要尾隨斜線。例如,下面的命令都拷貝遠(yuǎn)程(默認(rèn))目錄的內(nèi)容到本地的"/dest"。rsync -av host: /destrsync -av host::module /dest你也可以僅使用rsync的僅本地(local-only)模式,此模式下的源地址和目標(biāo)地址名稱中都不需要冒號(:)。它行為類似于cp命令的升級版。最后,你可以通過移除模塊名參數(shù)部分的方式列出rsync daemon中所有可用模塊。rsync somehost.mydomain.com::更詳細(xì)信息見下面段落。高級用法請求從遠(yuǎn)程主機(jī)傳輸多個文件的語法是通過指定和第一個遠(yuǎn)程地址格式相同的多個遠(yuǎn)程地址參數(shù),或者可以省略主機(jī)名部分。例如,下面的命令都會正常工作:(譯者注:遠(yuǎn)程地址中省略主機(jī)名時,將取前一個遠(yuǎn)程地址的主機(jī)名作為它的主機(jī)名)rsync -av host:file1 :file2 host:file{3,4} /dest/rsync -av host::modname/file{1,2} host::modname/file3 /dest/rsync -av host::modname/file1 ::modname/file{3,4}老版本的rsync需要在SRC部分使用引號和空格,如下示例:rsync -av host:'dir1/file1 dir2/file2' /destrsync host::'modname/dir1/file1 modname/dir2/file2' /dest這種方式在后續(xù)rsync版本中將繼續(xù)(默認(rèn))有效,但是它沒有第一種方式簡便。如果你要傳輸一個文件名中包含了空白字符的文件,可以使用"--protect-args"("-s")選項,也可以使用轉(zhuǎn)義符將空白字符轉(zhuǎn)義。例如:rsync -av host:'file\ name\ with\ spaces' /dest連接RSYNC DAEMONrsync也可以不使用遠(yuǎn)程shell作為傳輸方式。這情況看下,將直接連接遠(yuǎn)程RSYNC守護(hù)進(jìn)程,一般使用的是TCP的873端口。(顯然,這要求遠(yuǎn)程的RSYNC守護(hù)進(jìn)程必須是已運行的,見下文"啟動RSYNC服務(wù)以接受連接請求")這種方式的rsync使用方式和遠(yuǎn)程shell方式一樣,除了:o 需要使用雙冒號"::"分隔主機(jī)名和路徑,或者使用rsync://的URL格式。o "path"部分的第一個詞語是一個模塊名(譯者注:如hostname::modname/file)。o 遠(yuǎn)程RSYNC守護(hù)進(jìn)程可能會輸出你連接它的日期時間。o 如果沒有指定遠(yuǎn)程rsync服務(wù)的路徑名,將列出rsync服務(wù)主機(jī)上可訪問的路徑。o 如果沒有指定本地目標(biāo)地址,將列出遠(yuǎn)程rsync服務(wù)主機(jī)上指定的文件。o 必須不能指定"--rsh"("-e")選項。以下是拷貝遠(yuǎn)程模塊名為"src"中的所有文件示例:rsync -av host::src /dest遠(yuǎn)程daemon上的某些模塊可能需要身份驗證。如果是這樣,在連接時將會被詢問輸入密碼。如果想要避免被詢問,可以通過設(shè)置環(huán)境變量RSYNC_PASSWORD的值為你要使用的密碼,或者使用"--password-file"選項。這非常適用于腳本中。警告:在某些系統(tǒng)上,環(huán)境變量是對所有用戶可見的,此時建議使用"--password-file"選項。你可以通過web代理(web proxy)的方式與rsync daemon建立連接,只需設(shè)置環(huán)境變量RSYNC_PROXY的值為hostname:port指向你的web代理。但要注意,web代理的配置必須得支持與873端口的代理連接。你還可以使用代理程序與rsync daemon建立連接,只需設(shè)置環(huán)境變量RSYNC_CONNECT_PROG的值為你想要運行的命令來代替建立套接字連接。環(huán)境變量的值中可能會包含"%H",它代表rsync命令中所指定的主機(jī)名(因此如果想在值中包含一個"%"字符,需要使用"%%")。例如:export RSYNC_CONNECT_PROG='ssh proxyhost nc %H 873'rsync -av targethost1::module/src/ /dest/rsync -av rsync:://targethost2/module/src/ /dest/上面的命令中使用ssh在proxyhost上運行了nc命令,它將會轉(zhuǎn)發(fā)所有數(shù)據(jù)到目標(biāo)主機(jī)(%H)的873端口。通過遠(yuǎn)程SHELL連接使用RSYNC-DAEMON特性某些時候使用rsync daemon的各種特性(如可命名的模塊)比允許任意套接字連接到系統(tǒng)上(除了真正需要使用遠(yuǎn)程shell的訪問)更方便。rsync支持使用遠(yuǎn)程shell連接到主機(jī)上,它會派生出一個單用途(single-use)的"daemon"服務(wù)用于讀取遠(yuǎn)程用戶家目錄下的配置文件。如果你想要加密daemon-sytle傳輸?shù)臄?shù)據(jù),但由于daemon是被遠(yuǎn)程用戶啟動的,你無法通過這樣的daemon使用像chroot這樣的功能,也無法修改uid,這時使用遠(yuǎn)程shell是比較好的。(另一個加密daemon傳輸?shù)姆绞绞?#xff0c;使用ssh建立本地端口到遠(yuǎn)程主機(jī)的隧道,并且在遠(yuǎn)程主機(jī)上配置一個普通的rsync daemon只允許從"localhost"發(fā)起連接(譯者注:其實就是配置ssh的端口轉(zhuǎn)發(fā)))從用戶角度來看,使用遠(yuǎn)程shell連接使用rsync daemon與連接普通rsync daemon的命令行語法幾乎相同,唯一例外的是必須在命令行使用--rsh=COMMAND選項設(shè)置遠(yuǎn)程shell程序。(設(shè)置RSYNC_RSH環(huán)境變量不會打開此功能)例如:rsync -av --rsh=ssh host::module /dest如果需要指定不同用戶的遠(yuǎn)程shell,一定要記住,host前綴"user@"設(shè)置的是rsync上的用戶(即用于需要用戶認(rèn)證的模塊)。這意味著必須在ssh命令中使用"-l user"選項來指定遠(yuǎn)程shell,下面的例子中使用了"--rsh"的短格式選項"-e":rsync -av -e "ssh -l ssh-user" rsync-user@host::module /dest"ssh-user"將在ssh上生效,而"rsync-user"將用于認(rèn)證使用"module"模塊。(譯者注:對于連接目標(biāo)非daemon時,"ssh -l user"和"user@"作用是一樣的)(譯者注:遠(yuǎn)程shell連接使用rsync daemon,和真正的守護(hù)進(jìn)程rsync daemon是不同的,后者是配置好后永久監(jiān)聽在后臺提供服務(wù),而遠(yuǎn)程shell使用rsync daemon則是一種臨時性單用途的daemon進(jìn)程,雖然也會讀取配置文件,但它是由遠(yuǎn)程shell進(jìn)程fork出來的子進(jìn)程,此次連接結(jié)束后,此daemon進(jìn)程會自動消逝)啟動RSYNC服務(wù)以接受連接請求要連接到一個rsync daemon,遠(yuǎn)程系統(tǒng)上的rsync daemon必須已經(jīng)運行(或者像inetd一樣,已經(jīng)配置了當(dāng)特殊端口上有連接時會派生出rsync daemon)。關(guān)于如何啟動一個能處理從套接字進(jìn)來的連接的daemon的完整信息,請查看rsyncd.conf(5)——這是rsync daemon的配置文件,它包含如何運行daemon的非常詳細(xì)的信息(包括獨立模式(stand-alone)和inetd格式的配置)如果你使用的是某種遠(yuǎn)程shell傳輸方式,則沒有手動啟動rsync daemon的必要。傳輸過程中的排序Rsync總是會在內(nèi)部傳輸列表中對指定的文件名進(jìn)行排序。這將會使得相同目錄名的文件被合并在一起進(jìn)行傳輸,這樣一來,去除重復(fù)文件名就比較容易,但這可能會讓一些人產(chǎn)生疑惑:文件傳輸時的順序和命令行中給的順序不一致。如果想要讓那個某個特殊的文件比其他文件先傳輸,可以將它們分隔到不同的rsync命令上,或考慮使用"--delay-updates"選項(它不會影響傳輸時的排序,但會使得最后的文件更新(file-updating)階段更迅速)。示例以下是一些我使用rsync的示例。要備份包含了大量word文檔和郵件文件夾的家目錄,使用一個任務(wù)計劃(cron job)運行:rsync -Cavz . arvidsjaur:backup每個晚上都將通過PPP連接到主機(jī)"arvidsjaur"上的backup目錄。要同步samba源碼樹,使用下面的Makefile targets:get:rsync -avuzb --exclude '*~' samba:samba/ .put:rsync -Cavuzb . samba:samba/sync: get put這可以讓我和連接另一端的CVS目錄保持同步。然后再在遠(yuǎn)程主機(jī)上做一些CVS操作,這節(jié)省了我大量時間,因為遠(yuǎn)程CVS協(xié)議的效率并不高。我使用下面的命令在我的"old"和"new"ftp站點之間做一個鏡像:rsync -az -e ssh --delete ~ftp/pub/samba nimbus:"~ftp/pub/tridge"由于設(shè)置了cron計劃,每隔幾小時它就登錄一次。選項匯總下面是rsync中可用的命令匯總,關(guān)于選項的完整描述,請看后文。-v, --verbose increase verbosity-q, --quiet suppress non-error messages--no-motd suppress daemon-mode MOTD (see caveat)-c, --checksum skip based on checksum, not mod-time & size-a, --archive archive mode; equals -rlptgoD (no -H,-A,-X)--no-OPTION turn off an implied OPTION (e.g. --no-D)-r, --recursive recurse into directories-R, --relative use relative path names--no-implied-dirs don't send implied dirs with --relative-b, --backup make backups (see --suffix & --backup-dir)--backup-dir=DIR make backups into hierarchy based in DIR--suffix=SUFFIX backup suffix (default ~ w/o --backup-dir)-u, --update skip files that are newer on the receiver--inplace update destination files in-place--append append data onto shorter files--append-verify --append w/old data in file checksum-d, --dirs transfer directories without recursing-l, --links copy symlinks as symlinks-L, --copy-links transform symlink into referent file/dir--copy-unsafe-links only "unsafe" symlinks are transformed--safe-links ignore symlinks that point outside the tree-k, --copy-dirlinks transform symlink to dir into referent dir-K, --keep-dirlinks treat symlinked dir on receiver as dir-H, --hard-links preserve hard links-p, --perms preserve permissions-E, --executability preserve executability--chmod=CHMOD affect file and/or directory permissions-A, --acls preserve ACLs (implies -p)-X, --xattrs preserve extended attributes-o, --owner preserve owner (super-user only)-g, --group preserve group--devices preserve device files (super-user only)--copy-devices copy device contents as regular file--specials preserve special files-D same as --devices --specials-t, --times preserve modification times-O, --omit-dir-times omit directories from --times--super receiver attempts super-user activities--fake-super store/recover privileged attrs using xattrs-S, --sparse handle sparse files efficiently-n, --dry-run perform a trial run with no changes made-W, --whole-file copy files whole (w/o delta-xfer algorithm)-x, --one-file-system don't cross filesystem boundaries-B, --block-size=SIZE force a fixed checksum block-size-e, --rsh=COMMAND specify the remote shell to use--rsync-path=PROGRAM specify the rsync to run on remote machine--existing skip creating new files on receiver--ignore-existing skip updating files that exist on receiver--remove-source-files sender removes synchronized files (non-dir)--del an alias for --delete-during--delete delete extraneous files from dest dirs--delete-before receiver deletes before xfer, not during--delete-during receiver deletes during the transfer--delete-delay find deletions during, delete after--delete-after receiver deletes after transfer, not during--delete-excluded also delete excluded files from dest dirs--ignore-errors delete even if there are I/O errors--force force deletion of dirs even if not empty--max-delete=NUM don't delete more than NUM files--max-size=SIZE don't transfer any file larger than SIZE--min-size=SIZE don't transfer any file smaller than SIZE--partial keep partially transferred files--partial-dir=DIR put a partially transferred file into DIR--delay-updates put all updated files into place at end-m, --prune-empty-dirs prune empty directory chains from file-list--numeric-ids don't map uid/gid values by user/group name--timeout=SECONDS set I/O timeout in seconds--contimeout=SECONDS set daemon connection timeout in seconds-I, --ignore-times don't skip files that match size and time--size-only skip files that match in size--modify-window=NUM compare mod-times with reduced accuracy-T, --temp-dir=DIR create temporary files in directory DIR-y, --fuzzy find similar file for basis if no dest file--compare-dest=DIR also compare received files relative to DIR--copy-dest=DIR ... and include copies of unchanged files--link-dest=DIR hardlink to files in DIR when unchanged-z, --compress compress file data during the transfer--compress-level=NUM explicitly set compression level--skip-compress=LIST skip compressing files with suffix in LIST-C, --cvs-exclude auto-ignore files in the same way CVS does-f, --filter=RULE add a file-filtering RULE-F same as --filter='dir-merge /.rsync-filter'repeated: --filter='- .rsync-filter'--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-0, --from0 all *from/filter files are delimited by 0s-s, --protect-args no space-splitting; wildcard chars only--address=ADDRESS bind address for outgoing socket to daemon--port=PORT specify double-colon alternate port number--sockopts=OPTIONS specify custom TCP options--blocking-io use blocking I/O for the remote shell--stats give some file-transfer stats-8, --8-bit-output leave high-bit chars unescaped in output-h, --human-readable output numbers in a human-readable format--progress show progress during transfer-P same as --partial --progress-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--password-file=FILE read daemon-access password from FILE--list-only list the files instead of copying them--bwlimit=KBPS limit I/O bandwidth; KBytes per second--write-batch=FILE write a batched update to FILE--only-write-batch=FILE like --write-batch but w/o updating dest--read-batch=FILE read a batched update from FILE--protocol=NUM force an older protocol version to be used--iconv=CONVERT_SPEC request charset conversion of filenames--checksum-seed=NUM set block/file checksum seed (advanced)-4, --ipv4 prefer IPv4-6, --ipv6 prefer IPv6--version print version number(-h) --help show this help (see below for -h comment)Rsync以daemon方式運行時,還可以接受以下選項:--daemon run as an rsync daemon--address=ADDRESS bind to the specified address--bwlimit=KBPS limit I/O bandwidth; KBytes per second--config=FILE specify alternate rsyncd.conf file--no-detach do not detach from the parent--port=PORT listen on alternate port number--log-file=FILE override the "log file" setting--log-file-format=FMT override the "log format" setting--sockopts=OPTIONS specify custom TCP options-v, --verbose increase verbosity-4, --ipv4 prefer IPv4-6, --ipv6 prefer IPv6-h, --help show this help (if used after --daemon)選項Rsync可以接受長格式選項和段格式選項,下面列出了所有可使用的選項。如果以多種方式指定同一個選項,則使用逗號分隔。某些選項只有長格式,沒有短格式。如果選項要帶參數(shù),參數(shù)只能列在長格式選項后。如果要指定選項的參數(shù),可以使用"--option=param"的格式,也可以使用空白字符替換"="。某些參數(shù)可能需要使用引號包圍,避免被shell命令行解析。需要記住,文件名中的前導(dǎo)波浪號(~)是被shell替換的,因此"--option=~/foo"將不會從波浪號進(jìn)入家目錄(若要如此,將"="移除)--help 輸出所有選項簡短格式的幫助信息并退出。為了兼容老版本,當(dāng)只使用一個"-h"選項時也會輸出這些幫助信息。--version輸出rsync的版本號并退出。-v, --verbose該選項增加了傳輸過程中的大量信息。默認(rèn)情況下,rsync以靜默(silent)模式工作。單個"-v"將給出哪些文件正在被傳輸?shù)男畔?#xff0c;還會在傳輸結(jié)束時給出一個簡要總結(jié)信息。兩個"-v"選項(-vv)將給出哪些文件被忽略,并且在傳輸結(jié)束時給出更詳細(xì)的信息。超過兩個"-v"選項一般只在調(diào)試過程中使用。需要注意的是,傳輸過程中輸出的文件名是被"--out-format=%n%L"處理過的,它表示僅顯示文件名,如果是軟鏈接文件,則還顯示它指向誰。當(dāng)使用一個"-v"選項時,將不會告訴你文件的屬性改變了。如果明確要列出改變了屬性的文件列表清單(既可以使用"--itemize-change"也可以在"--out-format"中增加"%i"),(客戶端)輸出結(jié)果中將總是會增加所有已改變的條目清單。更詳細(xì)信息見"--out-format"選項。-q, --quiet該選項將減少大量傳輸過程中的信息,但無法禁止從遠(yuǎn)程主機(jī)產(chǎn)生的信息。該選項適用于cron任務(wù)計劃中。--no-motd此選項會影響客戶端在守護(hù)程序傳輸開始時輸出的信息。它會禁止motd信息,但是也會影響daemon對"rsync host::"請求顯示模塊列表的回應(yīng)信息,因此如果想要請求daemon的模塊列表,應(yīng)該忽略該選項。-I, --ignore-times正常情況下,rsync會忽略文件大小相同且最后修改時間戳相同的文件,該選項關(guān)閉"quick check"行為,使得所有的文件都會被更新。(譯者注:即從增量拷貝變成全量拷貝)--size-only該選項將修改rsync查找需要被傳輸文件的"quick check"算法,默認(rèn)該算法會找出所有大小或最后修改時間戳改變文件并傳輸,使用該選項將僅查找大小改變的文件并傳輸。在使用了某些鏡像備份但沒有保留精確時間戳的情況下,使用帶有該選項的rsync將非常有幫助。--modify-window當(dāng)比較時間戳?xí)r,rsync會把兩者相差不超過該選項所指定的值時認(rèn)為是相同的時間戳。正常情況下該選項的值為0(精確匹配),但在某些情況下,將此選項的值設(shè)置為非0將非常有用。特別是與Windows的FAT文件系統(tǒng)(此文件系統(tǒng)有2秒范圍內(nèi)的精確度差異)傳輸數(shù)據(jù)時,設(shè)置"--modify-window=1"將非常有用(允許文件時間戳有1秒的差異)。-c, --checksum此選項改變了rsync檢查文件改變和決定是否要傳輸?shù)姆绞健2皇褂迷撨x項,rsync使用"quick check"(默認(rèn)的)檢查發(fā)送端和接收端兩邊文件的大小和最后一次修改時間是否改變。使用該選項,將對每個匹配了大小的文件比較128位的校驗碼。生成校驗碼意味著兩端都會消耗大量的磁盤I/O以讀取傳輸隊列中文件的數(shù)據(jù)內(nèi)容(傳輸隊列早于讀取文件數(shù)據(jù),即先quick check,再生成和比較校驗碼),因此該選項會大幅度降低效率。發(fā)送端生成校驗碼的時刻是做文件系統(tǒng)掃描以生成可獲取文件列表時。接收端生成校驗碼的時刻是在掃描哪些文件發(fā)生改變時,它會對那些與發(fā)送端文件大小相同的文件生成校驗碼。所以,該選項的結(jié)果是:只傳輸校驗碼改變或文件大小改變(意味著校驗碼也改變)的文件。注意,rsync默認(rèn)總是在文件傳輸完成后再生成全部文件(whole-file)的校驗碼,并驗證傳輸完成的文件是否正確重組。但是使用該選項,它隱含了在傳輸前做"該文件是否需要更新?"的檢查,使得文件傳輸結(jié)束后不會自動去驗證它們重組的正確性。從協(xié)議30版本開始(對應(yīng)的rsync版本從3.0.0開始)使用的校驗碼是MD5格式的,更老的協(xié)議版本使用的校驗碼是MD4格式的。? ? ? ? ? ? ? ?(譯者注:即基于checksum來判斷文件是否要同步,而不是基于quick check算法。在兩個地方會計算checksum:sender端發(fā)送文件列表時,
? ? ? ? ? ? ? ?接收端的generator判斷文件是否要傳輸時)
-R, --relative表示使用相對路徑。這意味著會將命令行中指定的全路徑名而非路徑最尾部的文件名發(fā)送給服務(wù)端。當(dāng)要一次性發(fā)送多個不同目錄時該選項非常有用。例如,如果使用下面的命令:rsync -av /foo/bar/baz.c remote:/tmp/這將會在遠(yuǎn)程主機(jī)上的/tmp/目錄下創(chuàng)建一個baz.c文件。如果使用下面的命令:rsync -avR /foo/bar/baz.c remote:/tmp/將會在遠(yuǎn)程主機(jī)的/tmp/目錄下遞歸創(chuàng)建foo/bar/baz.c,它保留了命令行中指定的全路徑。這些額外的路徑元素被稱為"隱含目錄"(如上例中的foo和foo/bar)。從rsync 3.0.0開始,rsync總是會發(fā)送這些隱含目錄作為文件列表中的真實的目錄,即使發(fā)送端的某個路徑元素是一個軟鏈接。這使得拷貝全路徑文件時,不用擔(dān)心因為路徑中包含了軟鏈接而可能出現(xiàn)的非預(yù)期的問題(譯者注:即鏈接追蹤)。如果要復(fù)制服務(wù)端符號鏈接,請通過其路徑來復(fù)制符號鏈接,并通過實際路徑來復(fù)制器真實對象。如果使用的rsync版本較老,可能需要使用"--no-implied-dirs"選項。也可以對所指定的路徑限制發(fā)送時作為隱含目錄的路徑信息。從rsync 2.6.7版本開始,rsync可以在源路徑插入一個點".",就像這樣:rsync -avR /foo/./bar/baz.c remote:/tmp/這將會在遠(yuǎn)程主機(jī)上創(chuàng)建/tmp/bar/baz.c。(注意點后面必須跟上斜線,因此"/foo/."將不會被縮寫)對于更老版本的rsync,可能需要改變目錄來限制源路徑。例如,推送文件時:(cd /foo; rsync -avR bar/baz.c remote:/tmp/)(注意,括號將把兩個命令放入子shell中執(zhí)行,因此cd改變目錄不會影響未來的命令)如果使用老版本的rsync拉取文件,使用以下慣用格式(但只適用于非daemon的傳輸):rsync -avR --rsync-path="cd /foo; rsync" \remote:bar/baz.c /tmp/--no-implied-dirs該選項影響"--relative"選項的默認(rèn)行為。當(dāng)指定該選項時,在傳輸時不會包含源文件的隱含目錄。這意味著目標(biāo)主機(jī)上對應(yīng)路徑元素會被保留不變(如果它們存在的話),并且缺少的隱含目錄會以默認(rèn)屬性方式被創(chuàng)建。甚至允許目標(biāo)主機(jī)上隱含路徑元素和源地址的屬性有非常大的區(qū)別,例如在接收端某文件可能是某個目錄的符號鏈接。另外,當(dāng)rsync要傳輸?shù)奈募?#34;path/foo/file"時,如果使用"--relative"選項,則目錄"path"和"path/foo"是隱含目錄。如果在目標(biāo)主機(jī)上"path/foo"是一個指向"bar"文件的符號連接,接收端的rsync會刪除"path/foo",并重建它為一個目錄,然后將接收到的文件放入此新目錄中。使用"--no-implied-dirs"選項,接收端使用已存在的路徑元素更新"path/foo/file",意味著最終會在"path/bar"中創(chuàng)建file文件。另一個實現(xiàn)連接保留功能的方法是使用"--keep-dirlinks"選項(也將會使得后續(xù)的傳輸從符號鏈接定位到目錄中)。當(dāng)使用早于3.0.0版本的rsync拉取文件時,如果發(fā)送端的路徑中包含了符號鏈接,并且希望隱含目錄能以普通目錄方式被傳輸時,可能需要使用該選項。-b, --backup當(dāng)使用該選項時,如果目標(biāo)路徑中已存在需要被傳輸或需要被刪除的文件時將重命名該文件。可以使用"--backup-dir"選項控制備份文件的保存路徑,使用"--suffix"選項控制備份時追加在原文件名后的后綴。注意,如果不指定"--backup-dir"選項:(1)將隱含"--omit-dir-times"選項(2)如果"--delete"選項同時影響該文件,rsync將在排除規(guī)則的尾部添加一個起"保護(hù)"作用的篩選規(guī)則(例如,-f "P *~"),這會阻止之前備份的文件被刪除。注意,如果你使用了自己定義的篩選規(guī)則,你可能需要手動插入你的exclude/include規(guī)則,并且保證其優(yōu)先級較高防止被其他規(guī)則先匹配上而導(dǎo)致失效。--backup-dir=DIR結(jié)合"--backup"選項一起使用,這表示rsync在遠(yuǎn)端將存儲所有備份文件到指定的目錄下。這可用于增量備份。可以使用"--suffix"選項額外指定備份后綴(否則備份到指定目錄的文件將使用原文件名)。需要注意如果擬制定了一個相對路徑,備份目錄將會相對到目標(biāo)目錄,因此你可能真正想要指定的是一個絕對路徑或以"../"開頭的路徑。如果接收端是rsync daemon,備份目錄將無法超出模塊的路徑層次結(jié)構(gòu),因此請?zhí)貏e注意不要將其刪除或復(fù)制到其中。--suffix=SUFFIX該選項可以自定義"--backup"(-b)選項的備份文件名后綴,如果沒有指定"--backup-dir"選項,則默認(rèn)后綴為"~",否則后綴為空字符串。-u, --update該選項將強(qiáng)制忽略在目標(biāo)路徑下已存在且修改時間比源文件更新的文件。(如果已存在的目標(biāo)文件的修改時間和源文件相同,則只在文件大小不同時才會更新)注意該選項不會影響軟鏈接或其他特殊文件的拷貝機(jī)制。而且,不管兩端文件中的數(shù)據(jù)是否相同,考慮發(fā)送端和接收端不同的文件格式對于更新來說也是非常重要的。換句話說,如果源文件是一個目錄,而目標(biāo)已存在的同名文件卻是一個普通文件,則rsync會直接忽略它們的時間戳。該選項是一種傳輸規(guī)則,不是排除規(guī)則,因此不會影響進(jìn)入file-lists的文件,也因此不會影響刪除。它僅會限制接收端請求傳輸?shù)奈募?-inplace該選項會改變當(dāng)數(shù)據(jù)需要更新時,rsync傳輸文件的方式。默認(rèn)情況下,rysnc會創(chuàng)建一個文件的新副本,當(dāng)此文件傳輸完成時會將此副本移動到指定的路徑下。使用此選項后,將直接把更新部分的數(shù)據(jù)寫入到目標(biāo)文件中。(譯者注:此選項的拷貝機(jī)制可以理解為類似于drbd基于塊的拷貝機(jī)制)這會帶來以下幾種影響:o 硬鏈接不會被破壞。這意味著通過其他硬鏈接文件可以直接訪問到新數(shù)據(jù)。更進(jìn)一步說,嘗試拷貝不同源文件到多重鏈接的目標(biāo)文件時,將導(dǎo)致目標(biāo)數(shù)據(jù)像"拔河"一樣,來來回回地變化。o 使用中的二進(jìn)制程序不會被更新(操作系統(tǒng)會防止這樣的事情發(fā)生,二進(jìn)制程序自身也會在嘗試數(shù)據(jù)交換時崩潰)。o 在傳輸過程中,文件的數(shù)據(jù)會進(jìn)入不一致狀態(tài),并且如果傳輸被中斷或者更新失敗時,文件將繼續(xù)不一致。o rsync無法將數(shù)據(jù)寫入到一個無法被更新的文件中。雖然超級管理員可以更新任意文件,但普通用戶需要獲取文件的寫權(quán)限才能打開文件并向其中成功寫入數(shù)據(jù)。o 如果目標(biāo)文件中的數(shù)據(jù)在它被復(fù)制到某個位置之前被覆蓋,則rsync的增量拷貝效率會降低。如果使用了"--backup"則不會出現(xiàn)這樣的問題,因為rsync足夠智能,它會使用備份文件作為傳輸?shù)幕鶞?zhǔn)文件。警告:不能使用該選項對那些正被其他用戶訪問的文件,因此在選擇使用此選項進(jìn)行拷貝時需要小心謹(jǐn)慎。該選項適用于對于那些基于數(shù)據(jù)塊(block-based)改變或向文件尾部追加了數(shù)據(jù)的大文件,也適用于那些安裝在磁盤上而不是網(wǎng)絡(luò)上的系統(tǒng)。它也能有效幫助保持寫時復(fù)制(copy-on-write)文件系統(tǒng)的快照。該選項隱含了"--partial"選項(因為傳輸中斷不會刪除文件),但和"--partial-dir"以及"--delay-udpates"選項沖突。--append該選項使得rsync以追加數(shù)據(jù)到文件尾部的方式來更新文件,它會假定接收端上已存在的文件和發(fā)送端文件的前段數(shù)據(jù)是一致的。如果接收端上文件的大小等于或大于發(fā)送端文件的大小,則此文件會被忽略。該選項不會干涉不被傳輸文件的非內(nèi)容屬性(non-content,如權(quán)限,所有者等),也不會影響對非普通文件(non-regular)的更新。隱含了"--inplace"選項,但是和"--sparse"選項不沖突(因為它總是擴(kuò)充一個文件的長度)。--append-verify工作方式類似于"--append"選項,但是接收端已存在的數(shù)據(jù)在驗證階段會被包含在whole-file校驗碼中,如果最后驗證階段失敗了,該文件會被傳輸(rsync將使用正常、非追加的"--inplace"模式重發(fā)文件)。-d, --dirs以不遞歸的方式拷貝目錄本身,它不會拷貝目錄中的文件。不像"--recursive"選項,只拷貝目錄中的內(nèi)容而不拷貝目錄本身。除非目錄名中使用了"."或者以斜線結(jié)尾(如".","dir/.","dir/"等)。既不指定該選項,也不指定"--recursive"選項時,rsync將忽略所有遇到的目錄(并會向輸出這些影響信息)。如果同時指定了"--dirs"和"--recursive"選項,"--recursive"將優(yōu)先生效。如果沒有給定"--recursive"選項,"--files-from"或"--list-only"選項會隱含"--dirs"選項,此時在列表中能見到所有目錄。要想關(guān)閉此功能,可以指定"--no-dirs"或"--no-d"選項。還有一個比較有用的向后兼容的選項:"--old-dirs"(--old-d)。它告訴rsync使用"-r --exclude='/*/*'"僅列出目錄而不遞歸。-l, --links當(dāng)遇到符號鏈接時,將在目標(biāo)路徑重新創(chuàng)建符號鏈接。(譯者注:即拷貝符號鏈接本身)-L, --copy-links使用該選項時,當(dāng)遇到符號鏈接時將拷貝它所指向的目標(biāo)而不是符號鏈接本身(譯者加:但僅只是追蹤了鏈接文件指向文件中的數(shù)據(jù),文件名仍然是符號鏈接文件的文件名。舉個例子,如果client端a文件-->b文件,則使用該選項拷貝a時,將在receiver端生成a文件,但a文件是一個普通文件,其中的數(shù)據(jù)來源是client端b文件的數(shù)據(jù))。老版本的rsync使用該選項還會告訴接收端也追蹤符號鏈接到其指向的目標(biāo)中。在目前的rsync版本中,要實現(xiàn)這樣的功能需要指定"--keep-dirlinks"(-K)選項。--copy-unsafe-linksThis tells rsync to copy the referent of symbolic links that point outside the copied tree. Absolute symlinks are also treatedlike ordinary files, and so are any symlinks in the source path itself when --relative is used. This option has no additionaleffect if --copy-links was also specified.--safe-linksThis tells rsync to ignore any symbolic links which point outside the copied tree. All absolute symlinks are also ignored. Usingthis option in conjunction with --relative may give unexpected results.-k, --copy-dirlinksWithout this option, if the sending side has replaced a directory with a symlink to a directory, the receiving side will deleteanything that is in the way of the new symlink, including a directory hierarchy (as long as --force or --delete is in effect).See also --keep-dirlinks for an analogous option for the receiving side.--copy-dirlinks applies to all symlinks to directories in the source. If you want to follow only a few specified symlinks, atrick you can use is to pass them as additional source args with a trailing slash, using --relative to make the paths match upright. For example:rsync -r --relative src/./ src/./follow-me/ dest/This works because rsync calls lstat(2) on the source arg as given, and the trailing slash makes lstat(2) follow the symlink, giv‐ing rise to a directory in the file-list which overrides the symlink found during the scan of "src/./".-K, --keep-dirlinks該選項使得receiver端將符號鏈接視為目錄文件,就像它是真的目錄一樣,但只有它在sender端能匹配一個真實目錄時才會如此。不使用該選項,receiver端的符號鏈接將被刪除或替換為一個真實目錄。例如,假設(shè)你要傳輸一個包含文件"file"的目錄"foo",但是在receiver端上的"foo"是一個指向"bar"目錄的符號鏈接。如果不使用該選項,receiver端將刪除符號鏈接"foo",然后重建它為一個目錄,然后接收"file"到此目錄中。如果使用了該選項,receiver端將保留符號鏈接,然后將"file"存放到"bar"目錄中去。(譯者注:上述示例的命令格式為"rsync -r foo user@host:/path",其中path下有個名為foo的鏈接文件)需要注意一點:如果使用了"--keep-dirlinks",你必須信任你所有拷貝中的鏈接文件。如果某個非信任用戶要創(chuàng)建屬于它自己的符號鏈接(指向某目錄),在下一次傳輸過程中,可能會使用真實目錄替換掉符號鏈接并影響鏈接文件所指向目錄中的文件內(nèi)容。對于備份拷貝,你最好是用mount的bind功能而不是使用符號鏈接來改變接收端的目錄層次。參見"--copy-dirlinks"選項,它是在sender端上類似的選項。-H, --hard-linksThis tells rsync to look for hard-linked files in the source and link together the corresponding files on the destination. With‐out this option, hard-linked files in the source are treated as though they were separate files.This option does NOT necessarily ensure that the pattern of hard links on the destination exactly matches that on the source.Cases in which the destination may end up with extra hard links include the following:o If the destination contains extraneous hard-links (more linking than what is present in the source file list), the copyingalgorithm will not break them explicitly. However, if one or more of the paths have content differences, the normalfile-update process will break those extra links (unless you are using the --inplace option).o If you specify a --link-dest directory that contains hard links, the linking of the destination files against the--link-dest files can cause some paths in the destination to become linked together due to the --link-dest associations.Note that rsync can only detect hard links between files that are inside the transfer set. If rsync updates a file that has extrahard-link connections to files outside the transfer, that linkage will be broken. If you are tempted to use the --inplace optionto avoid this breakage, be very careful that you know how your files are being updated so that you are certain that no unintendedchanges happen due to lingering hard links (and see the --inplace option for more caveats).If incremental recursion is active (see --recursive), rsync may transfer a missing hard-linked file before it finds that anotherlink for that contents exists elsewhere in the hierarchy. This does not affect the accuracy of the transfer (i.e. which files arehard-linked together), just its efficiency (i.e. copying the data for a new, early copy of a hard-linked file that could have beenfound later in the transfer in another member of the hard-linked set of files). One way to avoid this inefficiency is to disableincremental recursion using the --no-inc-recursive option.-p, --perms該選項告訴receiver端的rsync,要將目標(biāo)文件的權(quán)限值設(shè)置為何源文件一樣(即權(quán)限保留)。(參見"--chmod"選項以獲取rsync修改sender端權(quán)限的方式)當(dāng)沒有使用該選項時,將以如下方式設(shè)置權(quán)限值:o 已存在的文件繼續(xù)保留它們的原有權(quán)限,盡管"--executability"選項可能會改變文件的執(zhí)行權(quán)限。o 對于新文件,將從源文件中獲取普通權(quán)限值,再配合receiver端文件所在目錄的默認(rèn)ACL權(quán)限或umask值決定文件的最終權(quán)限,并且會禁用它們的特殊權(quán)限位,除非新的目錄文件從其父目錄中繼承了sgid權(quán)限。因此,當(dāng)"--perms"和"--executability"選項都被禁用時,rsync的行為和其它文件拷貝工具的行為一樣,例如cp、tar。總結(jié)以下:要設(shè)置目標(biāo)文件(包括新文件和已存在的舊文件)的權(quán)限值為源文件的權(quán)限值,使用"--perms"選項。要設(shè)置新的目標(biāo)文件默認(rèn)權(quán)限,請確保"--perms"選項是關(guān)閉的,然后使用"--chmod=ugo=rwX"(這將保證啟用所有非掩碼位權(quán)限)。如果想以更簡單的方式實現(xiàn)后一種情況,你可能需要為其定義一個popt別名,例如將下面的命令行放入文件~/.popt中(下面的命令中定義了"-Z"選項,并使用了"--no-g"使得目標(biāo)文件的所屬組使用目標(biāo)目錄的默認(rèn)組):rsync alias -Z --no-p --no-g --chmod=ugo=rwX然后可以在命令行中使用新的選項,例如:rsync -avZ src/ dest/(警告:請確保"-a"選項不是跟隨在"-Z"后的,否則將重新啟用上面已經(jīng)定義的兩個"--no-*"選項。)-E, --executability該選項使得rsync在未指定"--perms"選項時對普通文件保留文件的執(zhí)行權(quán)限(或者不可執(zhí)行權(quán)限)。普通文件上開啟了"x"才認(rèn)為有可執(zhí)行權(quán)限。當(dāng)目標(biāo)文件已存在且和對應(yīng)源文件的可執(zhí)行權(quán)限值不一樣時,rsync將采用如下方式修改權(quán)限:o To make a file non-executable, rsync turns off all its ’x’ permissions.o To make a file executable, rsync turns on each ’x’ permission that has a corresponding ’r’ permission enabled.如果指定了"--perms"選項,則該選項被忽略。-A, --acls使目標(biāo)文件的ACL屬性和源文件的ACL屬性一致。該選項隱含了"--perms"選項。-X, --xattrs使目標(biāo)文件的擴(kuò)展屬性和源文件的擴(kuò)展屬性保持一致。--chmod該選項使得rsync可以將目標(biāo)文件的權(quán)限設(shè)定為此處所指定的權(quán)限值,讓rsync以為這些指定的權(quán)限就是源文件的權(quán)限。也因此在未配合"--perms"一起使用時該選項無效。在chmod(1)的man文檔中記錄了普通的語法解析規(guī)則,你可以通過加上一個前綴"D"來指定該權(quán)限規(guī)則只對目錄有效,或者加上前綴"F"指定該權(quán)限規(guī)則只對普通文件有效。例如,下面的例子保證了所有目錄都標(biāo)記了sgid權(quán)限,其它人對文件都不可寫,所有者和所屬組都可寫,且所有人都有執(zhí)行權(quán)限:--chmod=Dg+s,ug+w,Fo-w,+X可以指定多個使用逗號分隔的"--chomod"選項。-o, --owner該選項使得rsync將目標(biāo)文件的所有者設(shè)置為和源文件一樣(即保留所有者屬性),但要求接收端的rsync是以super user身份運行的(或指定了"--no-super"選項)。如果不指定該選項,目標(biāo)文件的所有者將設(shè)置為調(diào)用rsync的用戶身份(譯者注:例如rsync /src name1@host:/path,則目標(biāo)文件的所有者為name1)。默認(rèn)情況下,目標(biāo)文件的所有者名稱是由uid來匹配的,但在某些環(huán)境下,可能會保留使用uid。(詳細(xì)信息見"--numeric-ids"選項)(譯者注:例如源文件的所有者為name1,其uid=1000,那么將在目標(biāo)主機(jī)上尋找uid=1000所對應(yīng)的用戶名,如果能找到則所有者設(shè)置為用戶名,否則設(shè)置為uid=1000)-g, --group此選項的意義完全同"--owner",所以不做對應(yīng)翻譯。--devices該選項使得rsync可以傳輸字符設(shè)備和塊設(shè)備到目標(biāo)主機(jī)上以重新創(chuàng)建這些設(shè)備。該選項要求接收端的rsync是以super user身份運行的(譯者注:例如,root用戶也算是super user,則rsync /devicename root@host:/path),否則該選項失效。(見"--super"和"--fake-super"選項)--specials該選項使得rsync可以傳輸特殊文件,如命名套接字,命名管道等。-D 該選項等價于"--devices --specials"選項組合。-t, --times該選項告訴rsync將mtime隨同文件一起傳輸給receiver,使得目標(biāo)文件的mtime和源文件一樣。千萬注意,如果不指定該選項,原本排除那些mtime相同的文件而獲得的性能提升將不再生效;換句話說,如果沒有在rsync命令行中使用"-t"或"-a"選項,將導(dǎo)致下一次傳輸以類似于"-I"的方式進(jìn)行,即更新所有文件(盡管在文件沒有真正發(fā)生更改的情況下,rsync的增量傳輸算法可以讓更新效率很高,但最好還是使用"-t")-O, --omit-dir-times該選項告訴rsync,當(dāng)保留mtime(見"--times")時,將忽略目錄。如果receiver端正在通過NFS共享目錄,使用"-O"是一個不錯的選擇。如果指定了"--backup"但沒有指定"--backup-dir",將隱含該選項。--super該選項告訴receiver端在進(jìn)行某些操作時嘗試使用super-user身份,盡管receiver端的rsync不是以super user身份運行的。這些操作包括:通過"--owner"保留文件所有者,通過"--groups"保留文件所屬組(包括輔助組),通過"--devices"選項拷貝設(shè)備文件。在receiver端未以superuser身份調(diào)用rsync時,這些選項很有用。如果要關(guān)閉super user選項功能,則使用"--no-super"--fake-super如果啟用了該選項,rsync將通過對附加在每個文件上的擴(kuò)展屬性(根據(jù)實際需要)的保存/恢復(fù)來模擬super user。擴(kuò)展屬性包括:文件的owner、group、文件的設(shè)備信息(設(shè)備文件和特殊文件被創(chuàng)建為空文本文件)以及所有特殊權(quán)限位(suid/sgid/sbit)。在不使用super user備份數(shù)據(jù)時但又想保存ACL屬性時,該選項很有用。"--fake-super"選項默認(rèn)只影響命令發(fā)起端,如果想要通過遠(yuǎn)程shell影響遠(yuǎn)程端時,可以指定rsync的路徑:rsync -av --rsync-path="rsync --fake-super" /src/ host:/dest/由于本地拷貝時,兩端都在本地主機(jī)上,該選項將會同時影響本地的sender端和receiver端的文件。如果想要避免這樣的情況,需要通過指定"localhost"的地址方式來實現(xiàn)拷貝,或者可能也可以使用"lsh"遠(yuǎn)程shell來完成。該選項會被"--super"以及"--no-super"選項覆蓋。其他信息可以參見rsyncd.conf文件中的"fake super"。-S, --sparse嘗試以高效率的方式處理稀疏文件,使得它們在目標(biāo)主機(jī)上占用更少的空間。該選項不能和"--inplace"選項一起使用,因為"--inplace"不能向稀疏模式的文件中覆蓋數(shù)據(jù)。-n, --dry-run該選項使得rsync僅測試運行(并生成和真正運行時幾乎一樣的輸出信息)。該選項常和"-v"、"--verbose"、"-i"、"--itemize-changes"選項一起使用,以便查看rsync在這些選項下是如何工作的。配合"--itemize-changes"時的輸出結(jié)果應(yīng)該要和真正運行的結(jié)果完全一致(除非人為故意欺騙rsync或系統(tǒng)調(diào)用失敗)。如果輸出結(jié)果不一致,則出現(xiàn)了bug。配合其他幾個選項時,輸出結(jié)果除了在某些方面外應(yīng)該保持幾乎一致。尤其是,dry run不會真的發(fā)送數(shù)據(jù),因此"--progress"將的結(jié)果將很可能異常。 -W, --whole-file使用該選項將使得rsync不再使用增量傳輸算法,而是傳輸所有文件。如果源和目標(biāo)主機(jī)之間的帶寬高于磁盤的帶寬(特別是"磁盤"是網(wǎng)絡(luò)文件系統(tǒng)時),則該選項比增量傳輸更有效。當(dāng)源和目標(biāo)都是本地時,該選項是默認(rèn)的傳輸算法,但若受到write batch模式影響,則此算法不生效。(譯者注:假設(shè)A主機(jī)和B主機(jī)之間的網(wǎng)絡(luò)可以以1000MB/s的速度傳輸,而目標(biāo)主機(jī)B上磁盤的帶寬只有500MB/s,顯然目標(biāo)主機(jī)在文件重組時從basis file讀取數(shù)據(jù)塊的速度不如A發(fā)送給B快,所以在這種情況下,增量傳輸不如全量傳輸)-x, --one-file-system該選項告訴rsync不能跨文件系統(tǒng)遞歸(譯者注:例如根目錄下有mnt目錄,mnt常用來做掛載點,則遞歸根目錄時,不會遞歸到mnt里面)。該選項不會限制用戶從多個文件系統(tǒng)指定拷貝項,僅只是限制rsync在每個目錄下進(jìn)行遞歸,同時也以類似的限制方式限制刪除時receiver端遞歸。需要記住,使用mount命令的"bind"功能綁定了設(shè)備文件時,它也被認(rèn)為是在同一個文件系統(tǒng)上。如果重復(fù)指定該選項,rsync將忽略client端所有的掛載點目錄。否則,當(dāng)遇到掛載點時將當(dāng)作是空目錄(這些空目錄使用已掛載目錄的屬性,因為掛載點目錄下的文件是無法訪問的)。如果指定了"--copy-links"或"--copy-unsafe-links"選項使得rsync"瓦解"符號鏈接,則符號鏈接所指向的是另一個設(shè)備上的目錄時將和掛載點一樣對待。該選項不會影響指向非目錄的符號鏈接。(譯者注:翻譯有點不標(biāo)準(zhǔn),以下是原文)This tells rsync to avoid crossing a filesystem boundary when recursing. This does not limit the user’s ability to specify itemsto copy from multiple filesystems, just rsync’s recursion through the hierarchy of each directory that the user specified, andalso the analogous recursion on the receiving side during deletion. Also keep in mind that rsync treats a "bind" mount to thesame device as being on the same filesystem.If this option is repeated, rsync omits all mount-point directories from the copy. Otherwise, it includes an empty directory ateach mount-point it encounters (using the attributes of the mounted directory because those of the underlying mount-point direc‐tory are inaccessible).If rsync has been told to collapse symlinks (via --copy-links or --copy-unsafe-links), a symlink to a directory on another deviceis treated like a mount-point. Symlinks to non-directories are unaffected by this option.--existing, --ignore-non-existing告訴rsync,如果目標(biāo)主機(jī)上文件或文件所在目錄還不存在,則不自動創(chuàng)建它們,即這些文件將不被傳輸。如果該選項和"--ignore-existing"選項一起使用,將不更新任何文件(如果你的目的是刪除目標(biāo)主機(jī)上的無關(guān)文件,這將非常有用)。(譯者注:例如rsync --existing /etc/dhcp/* /tmp,由于/tmp下沒有dhcp目錄,所以dhcp目錄和其中的文件都不會被傳輸?shù)?tmp下)該選項屬于一種transfer rule,而不是exclude rule,因此不會影響進(jìn)入file list的文件,也因此不會影響刪除操作。該選項僅對receiver所請求要傳輸?shù)奈募M(jìn)行了限制。--ignore-existing該選項告訴rsync忽略對目標(biāo)主機(jī)上已存在的文件的更新(不會忽略已存在的目錄,或者什么也不做)。見"--existing"選項說明。該選項屬于一種transfer rule,而不是exclude rule,因此不會影響進(jìn)入file list的文件,也因此不會影響刪除操作。該選項僅對receiver所請求要傳輸?shù)奈募M(jìn)行了限制。 對于使用了"--link-dest"選項做備份時,碰巧備份被中斷,如果想繼續(xù)完成備份,則該選項有用。因為"--link-dest"選項會拷貝到一個新的目錄層次中,使用"--ignore-existing"將保證已存在的文件不會被調(diào)整。這意味著該選項僅盯著目標(biāo)上已存在的文件不放。--remove-source-files該選項告訴rsync移除sender端已經(jīng)成功傳輸?shù)絩eceiver端的文件(不包括任何目錄文件)。--delete該選項告訴rsync刪除receiver端有而sender端沒有的文件,但不是刪除receiver端所有文件,而是只對將要同步的目錄生效。你需要明確指定整個目錄(如"dir"或"dir/")而不是使用通配符來通配目錄的內(nèi)容(如"dir/*"),因為通配符會被shell進(jìn)行擴(kuò)展,使得rsync被請求傳輸單個文件而非文件的父目錄。被exclude排除的文件也會從delete中排除掉,除非使用了"--delete-excluded"選項或者標(biāo)記了只對sender端匹配上的文件有效(見篩選規(guī)則中的include/exclude修飾符)。(譯者注:由于exclude規(guī)則先生效,delete時認(rèn)為源端不存在而目標(biāo)端存在,使得delete也想要刪除這些被排除的文件,但默認(rèn)情況下,在刪除時對這些被排除的文件加上了保護(hù)規(guī)則,所以這些文件無法被delete掉,這是一個容易疑惑的地方。要刪除這些被排除的文件,只需使用選項"--delete-excluded"選項將這些被保護(hù)的文件強(qiáng)制取消保護(hù))(譯者注:(1)不會刪除receiver端任何目錄,即使是子目錄也不刪除(2)delete動作是由generator進(jìn)程執(zhí)行的)該選項如果錯誤使用將是非常危險的!強(qiáng)烈建議先使用"--dry-run"(-n)進(jìn)行測試,以確定將刪除那些文件。如果sender端探測到了任何i/o錯誤,將自動禁用遠(yuǎn)程刪除功能。這是為了防止sender端的臨時文件系統(tǒng)故障(如NFS錯誤)導(dǎo)致大規(guī)模刪除目標(biāo)文件。可以指定"--ignore-errors"選項強(qiáng)制忽略任何I/O錯誤。"--delete"選項一般可能會配合"--delete-WHEN"的某一種或"--delete-excluded",它們不會產(chǎn)生沖突。但是,如果未指定任何"--delete-WHEN"時,rsync將默認(rèn)采用"--delete-during"算法。(譯者注:即在generator啟動后,每處理一個文件列表,就刪除該文件列表中需要刪除的文件,在處理某個文件列表時不會刪除別的文件列表中的文件,其實這一點從"-vvvv"的結(jié)果中很容易獲取到)--delete-before請求在傳輸開始前執(zhí)行目標(biāo)文件刪除行為。該選項隱含了"--delete"選項。(譯者注:傳輸之前刪除指的在處理所有文件列表之前先刪除所有文件列表中指定要刪除的文件,也就是說在generator剛啟動時立即刪除所有文件列表中待刪除文件,而默認(rèn)的--delete則是在generator剛啟動時刪除第一個文件列表中的待刪除文件)在傳輸之前執(zhí)行刪除對于文件系統(tǒng)空間緊俏時是很有幫助的。但是,由于它會在傳輸開始之前發(fā)起一段延遲,這一段延遲很可能會使得傳輸超時(如果指定了"--timeout"選項),還會強(qiáng)制rsync使用老的、非增量的遞歸算法,此算法要求rsync將所有傳輸中的文件一次性掃描到內(nèi)存中。--delete-during, --del請求receiver端的文件刪除行為是隨著文件傳輸時逐步執(zhí)行的。隱含了"--delete"選項。(譯者注:"--delete"沒有和"--delete-WHEN"同時使用時,"--delete"默認(rèn)采用的就是"--delete-during")--delete-delay請求receiver端的文件刪除行為在所有文件列表中的文件都全部傳輸完成后才刪除。在結(jié)合"--delay-updates"、"--fuzzy"選項一起使用時比較有用,并且相比"--delete-after"來說效率更高。--delete-after請求receiver端的文件刪除行為在所有文件列表中的文件都全部傳輸完成后才刪除。和"--delete-delay"不同的是,該選項會采用老的、非增量傳輸?shù)乃惴▽鬏斨械乃形募淮涡話呙璧絻?nèi)存中,因此效率不高。--delete-excluded為了刪除sender端沒有而receiver端有的文件,可以指定該選項告訴rsync即使文件被"--exclude"排除了,也要在遠(yuǎn)程將其刪除。--ignore-errors告訴"--delete",即使在遇到I/O錯誤時也要繼續(xù)。--force該選項告訴rsync,當(dāng)某個非空目錄要被非目錄文件替換時,將此非空目錄刪除掉。這只有在刪除行為未激活時才有效。--max-delete=NUM限制rsync最多能刪除NUM個文件或目錄,如果突破了該限制,將輸出警告信息并以狀態(tài)碼25退出。可以使用"--max-delete=0"來保證不會在遠(yuǎn)程刪除任何文件,因為只要有刪除行為,就會警告并退出。--max-size=SIZE限制rsync傳輸?shù)淖畲笪募笮 ?梢允褂脝挝缓缶Y,還可以是一個小數(shù)值(例如:"--max-size=1.5m")。該選項是一個傳輸規(guī)則,而不是排除規(guī)則,因此不會影響文件進(jìn)入文件列表,也因此不會影響刪除行為。它僅僅只是限制了receiver端請求傳輸?shù)奈募S腥缦驴捎煤缶Y:"K"("KiB")=1024字節(jié)、"M"("MiB")、"G"("GiB")。如果想使用1000作為換算單位,則使用KB、MB、GB。(注意,所有大寫字母都可以使用小寫字母替換)。最后,如果后綴以"+1"或"-1"結(jié)尾,則值表示減小或增大一個字節(jié)。例如:"--max-size=1.5mb-1"表示1499999字節(jié),"--max-size=2g+1"表示2147483649字節(jié)。--min-size=SIZE限制rsync傳輸?shù)淖钚∥募笮 _@可以用于禁止傳輸小文件或那些垃圾文件。單位的指定方法同"--max-size"。-B, --block-size=BLOCKSIZE該選項強(qiáng)制修改rsync算法將文件劃分為數(shù)據(jù)塊時的塊大小。一般基于正在更新的文件來選擇大小值。詳細(xì)信息見技術(shù)報告。(譯者注:rsync算法的作者說塊大小在500-1000時是比較好的選擇。對于超過1M的文件絕對不要讓塊大小低于500,否則性能極低。)-e, --rsh=COMMAND該選項允許你選擇用于本地和遠(yuǎn)程之間的通信的遠(yuǎn)程shell程序。一般情況下,rsync默認(rèn)配置為使用ssh,但如果在本地網(wǎng)絡(luò)上,你可能更喜歡使用rsh。如果該選項和格式[user@]host::module/path一起使用,則該遠(yuǎn)程shell命令會在遠(yuǎn)程主機(jī)上啟動一個rsync daemon(譯者注:可以認(rèn)為是臨時模擬的rsync daemon進(jìn)程),并且所有數(shù)據(jù)都將通過此遠(yuǎn)程shell的連接傳輸,而不是通過網(wǎng)絡(luò)套接字所連接的遠(yuǎn)程主機(jī)上的rsync daemon。見上文"通過遠(yuǎn)程SHELL連接使用RSYNC-DAEMON特性"。允許在COMMAND中提供多個遠(yuǎn)程shell參數(shù),它們將會作為一個整體傳遞給rsync。多個參數(shù)必須使用空格(不能是制表符tab或其他任意空白字符),分隔,也可以使用單引號或雙引號包圍參數(shù)來保護(hù)空格(但不能使用反斜線)。注意在單引號字符串內(nèi)部使用多個單引號將返回給你一對單引號,同理,雙引號也一樣(盡管你需要注意哪些引號是shell來解析的,哪些引號是rsync解析的)。例如:-e 'ssh -p 2234'-e 'ssh -o "ProxyCommand nohup ssh firewall nc -w1 %h %p"' (Note that ssh users can alternately customize site-specific connect options in their .ssh/config file.)你也可以使用RSYNC_RSH環(huán)境變量指定遠(yuǎn)程shell程序,它能接受和"-e"選項一樣的值。另外請查看會影響該選項的"--blocking-io"選項。--rsync-path=PROGRAM指定遠(yuǎn)程機(jī)器上要運行的程序以啟動遠(yuǎn)程rsync進(jìn)程。當(dāng)遠(yuǎn)程rsync程序不在默認(rèn)目錄/usr/local/bin/rsync下常會使用該選項指定其路徑。但要注意,PROGRAM是在shell的幫助下運行的,因此它可以是任意程序、腳本或你想運行的命令序列,只要它們不會破壞rsync正在使用的標(biāo)準(zhǔn)輸入和標(biāo)準(zhǔn)輸出即可。一個很棘手的例子是在遠(yuǎn)程機(jī)器上設(shè)置不同的默認(rèn)目錄以便使用"--relative"選項。例如:rsync -avR --rsync-path="cd /a/b && rsync" host:c/d /e/(譯者注:以上示例將會在本地主機(jī)創(chuàng)建/e/c/d,其中c/d數(shù)據(jù)來源于遠(yuǎn)程主機(jī)的/a/b/c/d)-C, --cvs-exclude這是一個很有用的簡寫排除文件法,用于排除大量不希望在系統(tǒng)之間傳輸?shù)奈募K褂昧祟愃朴贑VS的算法來決定一個文件是否要被忽略。exclude列表被初始化為排除以下格式的文件(這些初始化條目被標(biāo)記為易過期,見"篩選規(guī)則"段落的說明):RCS SCCS CVS CVS.adm RCSLOG cvslog.* tags TAGS .make.state .nse_depinfo *~ #* .#* ,* _$* *$ *.old *.bak *.BAK *.orig *.rej.del-* *.a *.olb *.o *.obj *.so *.exe *.Z *.elc *.ln core .svn/ .git/ .hg/ .bzr/然后,$HOME/.cvsignore文件中的文件列表將會被添加到此exclude列表,此外還會包含CVSIGNORE環(huán)境變量中指定的所有文件(所有cvsignore名稱由空白字符分隔)最后,和.cvsignore文件在同一個目錄中的文件,如果它們能匹配此文件中列出的規(guī)則,則也會被排除。不像rsync的篩選/排除規(guī)則,這些匹配模式是使用空白字符分隔的。更多cvs的模式見cvs(1)的man文檔。如果將"-C"選項結(jié)合"--filter"規(guī)則,需要記住,無論"-C"選項處于命令行的哪些位置,這些cvs排除規(guī)則都將會追加在你所指定的規(guī)則之后。這就使得"-C"選項指定的規(guī)則比你自行指定的規(guī)則優(yōu)先級耕地。如果你想將CVS規(guī)則插入到你的篩選規(guī)則中的某個位置,那么就不要使用"-C"選項,而是使用一種結(jié)合方式:"--filter:C"或"--filter=-C"。前者啟用.cvsignore文件中的規(guī)則進(jìn)行每目錄掃描,后者則是一次性導(dǎo)入所有上面說所的CVS規(guī)則。-f, --filter=RULE該選項可以讓你添加規(guī)則,以便從待傳輸?shù)奈募斜碇杏羞x擇性地排除某些文件。在遞歸傳輸中,結(jié)合該選項是非常有用的。你可以在命令行中使用任意多個"--filter"選項以建立要排除的文件列表。如果篩選規(guī)則中包含了空白字符,需要使用引號包圍以防被shell解析。在下文中同樣介紹了如何使用下劃線替代空格來分隔rsync參數(shù)和規(guī)則。該選項的詳細(xì)信息請參見"篩選規(guī)則"段落說明。-F 該選項是一種添加到"--filter"規(guī)則的簡寫法,只有兩種可能:第一種是單個"-F"選項,此時它是以下規(guī)則的簡寫:--filter='dir-merge /.rsync-filter'這告訴rsync查找那些分散在目錄結(jié)構(gòu)中的所有.rsync-filter文件,然后使用這些規(guī)則篩選出傳輸中的文件。第二種是如果重復(fù)使用"-F"選項,則它是以下規(guī)則的簡寫:--filter='exclude .rsync-filter'該規(guī)則將從傳輸中篩選出.rsync-filter本身。關(guān)于該選項如何工作的更詳細(xì)信息,見"篩選規(guī)則"段落說明。--exclude=PATTERN該選項是"--filter"選項的簡化格式,默認(rèn)為排除(exclude)規(guī)則,并且它將禁止對普通的篩選規(guī)則進(jìn)行解析。更詳細(xì)信息見"篩選規(guī)則"段落說明。--exclude-from=FILE該選項和"--exclude"選項類似,但是它是從包含了排除規(guī)則的文件中讀取排除規(guī)則(每行一個規(guī)則)。空行以及";"或"#"開頭的行為注釋行,如果給定的文件為"-",則表示從標(biāo)準(zhǔn)輸入中讀取排除規(guī)則。--include=PATTERN該選項是"--filter"選項的簡化格式,默認(rèn)為包含(include)規(guī)則,并且它將禁止對普通的篩選規(guī)則進(jìn)行語法解析。更詳細(xì)信息見"篩選規(guī)則"段落說明。--include-from=FILE該選項和"--exclude"選項類似,但是它是從包含了排除規(guī)則的文件中讀取排除規(guī)則(每行一個規(guī)則)。空行以及";"或"#"開頭的行為注釋行,如果給定的文件為"-",則表示從標(biāo)準(zhǔn)輸入中讀取排除規(guī)則。--files-from=FILE該選項可以在FILE中精確指定要傳輸?shù)奈募斜怼H绻鸉ILE為"-"則表示從標(biāo)準(zhǔn)輸入中讀取文件列表。它還調(diào)整了rysnc的默認(rèn)行為以便能夠更簡單地指定要傳輸?shù)奈募?#xff1a;o 它隱含了"--relative"(-R)選項,所以會保留在文件中每個條目所指定的路徑信息。(使用"--no-relative"或"--no-R"關(guān)閉該功能)o 它隱含了"--dirs"(-d)選項,所以將在目標(biāo)主機(jī)上創(chuàng)建列表中指定的目錄而不是悄悄地跳過它們。(使用"--no-dirs"或"--no-d"關(guān)閉該功能)o "--archive"(-a)將不再隱含"--recursive"(-r),因此如果真的要遞歸到目錄中,需要顯式指定"--recursive"(-r)。o 它的副作用是改變了rsync的默認(rèn)狀態(tài),因此"--files-from"選項在命令行中的位置和其它選項的解析無關(guān)(例如,"-a"選項放在"--files-from"選項的前后的工作方式是一樣的)。從FILE中讀取的所有文件名都是相對于源目錄的相對路徑,任何前導(dǎo)斜線都會被移除,也無法使用".."進(jìn)入源目錄的上一層次目錄。例如:rsync -a --files-from=/tmp/foo /usr remote:/backup如果/tmp/foo中包含了字符串"bin"或"/bin",將在遠(yuǎn)程主機(jī)上創(chuàng)建/backup/bin作為/usr/bin所對應(yīng)的目標(biāo)文件。如果包含了字符串"bin/"(注意尾隨斜線),則將傳輸/usr/bin目錄以及其內(nèi)的文件。如果指定了"-r"選項,則所有目錄結(jié)構(gòu)都會被傳輸(要記住當(dāng)使用了"--files-from"時,"-r"選項需要顯式指定,因為"-a"選項不再隱含該選項)。還要注意,適用"--files-from"時,"--relative"選項的默認(rèn)行為是僅復(fù)制從文件中讀取的路徑信息,不再強(qiáng)制復(fù)制原規(guī)范路徑(即此示例中的/usr)另外,"--files-from"的文件可以從遠(yuǎn)程主機(jī)上讀取,而不一定要從本地主機(jī)上讀取,只需在文件的前面指定"host:"即可。要求"host:"的host必須是rsync兩端的某一端,為了簡寫,可以使用簡寫的前綴":"表示遠(yuǎn)端主機(jī)。例如:rsync -a --files-from=srchost:/path/file-list srchost:/ /tmp/copyrsync -a --files-from=:/path/file-list srchost:/ /tmp/copy這將會拷貝在遠(yuǎn)程主機(jī)"srchost"上/path/file-list文件中指定的所有文件。注意:對"--files-from"的文件進(jìn)行排序可以使得rsync效率更高,因為它將使得rsync不用再重新讀取相鄰能共用的路徑元素。如果不進(jìn)行排序,則rsync可能會多次重新掃描路徑元素(隱含目錄),重復(fù)生成文件列表。-0, --from0告訴rsync從文件中讀取規(guī)則或文件名時是以空字符(\0)終止的。該選項會影響"--exclude-from"、"--include-from"、"--files-from"以及所有在"--filter"中指定的規(guī)則合并文件。它不會影響"--cvs-exclude"(因為從.cvsignore文件中讀取的名稱都是以空白字符分隔的)。-s, --protect-args該選項將使得所有發(fā)送給遠(yuǎn)程rsync進(jìn)程的文件名和大多數(shù)選項都不允許被遠(yuǎn)程shell解析。這意味著空格不再分隔文件名,任意非通配特殊字符都不會被翻譯(即成為普通字符,如:~、$、;、&等)。通配字符將被遠(yuǎn)程主機(jī)上的rsync擴(kuò)展(正常情況下是由遠(yuǎn)程shell來擴(kuò)展的)。-T, --temp-dir=DIR該選項明確receiver端文件重組時的臨時目錄。默認(rèn)情況下,receiver端將在文件所在目錄中創(chuàng)建臨時文件。在receiver端,如果目標(biāo)文件所在磁盤分區(qū)剩余大小不足以存儲待重組文件時,可以使用該選項將臨時文件存儲到其他的分區(qū)中,在這種情況下,由于創(chuàng)建的臨時文件和目標(biāo)路徑不在同一個分區(qū)上,所以重組完成時無法直接重命名,而是只能從臨時目錄中拷貝到目標(biāo)路徑下。如果你使用該選項的原因不是磁盤空間不足,你可能要將此選項結(jié)合"--delay-updates"選項一起使用,這將保證所有的拷貝文件都放入到目標(biāo)層次結(jié)構(gòu)的子目錄中,并等待傳輸結(jié)束。-y, --fuzzy該選項告訴rsync,如果目標(biāo)主機(jī)上的basis file缺失,將主動搜索出一個文件作為basis file。目前的算法是在同一目錄中模糊搜索目標(biāo)basis file,搜索的規(guī)則是:要么文件大小和修改時間完全一致,要么文件名相似。如果搜索到了符合條件的文件,rsync將使用該文件作為basis file,這樣可能會加速傳輸速度。(譯者注:在目標(biāo)主機(jī)上進(jìn)行文件重組時,會從basis file中拷貝匹配塊,在真正的basis file缺失時,模糊搜索出的basis file可能能提供一些匹配塊,從而減少sender要發(fā)送的數(shù)據(jù)量,加快整個同步過程)注意,如果使用了"--delete"選項,可能會把潛在的basis file給刪除掉,因此如果想避免這種情況,可以指定"--delete-after"選項,或者直接指定文件名來排除將被刪除的文件。--compare-dest=DIR該選項指示rsync使用目標(biāo)主機(jī)上的DIR作為額外的層次結(jié)構(gòu),以便和傳輸中的文件做比較(如果目標(biāo)目錄中不存在basis file)。如果在DIR中發(fā)現(xiàn)了和sender端完全一致的文件,則該文件將不會傳輸?shù)侥繕?biāo)目錄中。該選項在做稀疏備份時很有用,因為它僅備份從某一次更早的備份開始發(fā)生了改變的文件。(譯者注:以備份目錄為比較目錄DIR,同步時將比較該目錄中的文件,最終將僅傳輸發(fā)生了改變的文件到目標(biāo)目錄下)從rsync 2.6.4版本開始,可以通過多個"--compare-dest"選項提供多個比較目錄,使得rsync可以按照為了精確匹配而指定的順序來搜索列表。如果發(fā)現(xiàn)能匹配上但僅只有屬性不同,將生成一個本地副本然后更新這些屬性信息。如果未能匹配上,將選擇DIRs中的basis file來提高傳輸速度。如果DIR是相對路徑,它將是相對于目標(biāo)目錄的。見"--copy-dest"和"--link-dest"。--copy-dest=DIR該選項類似于"--compare-dest",但rsync會從DIR中以本地拷貝的方式拷貝未改變的文件到目標(biāo)目錄中。可以通過多個"--copy-dest"選項提供多個DIR,使得rsync可以按照為了匹配未修改文件的順序來搜索列表。如果未匹配上,則選擇DIR中的basisfile以嘗試提高傳輸速度。如果DIR是相對路徑,它將是相對于目標(biāo)目錄的。見"--copy-dest"和"--link-dest"。--link-dest=DIRThis option behaves like --copy-dest, but unchanged files are hard linked from DIR to the destination directory. The files mustbe identical in all preserved attributes (e.g. permissions, possibly ownership) in order for the files to be linked together. Anexample:rsync -av --link-dest=$PWD/prior_dir host:src_dir/ new_dir/If file’s aren’t linking, double-check their attributes. Also check if some attributes are getting forced outside of rsync’s con‐trol, such a mount option that squishes root to a single user, or mounts a removable drive with generic ownership (such as OS X’s"Ignore ownership on this volume" option).Beginning in version 2.6.4, multiple --link-dest directories may be provided, which will cause rsync to search the list in theorder specified for an exact match. If a match is found that differs only in attributes, a local copy is made and the attributesupdated. If a match is not found, a basis file from one of the DIRs will be selected to try to speed up the transfer.This option works best when copying into an empty destination hierarchy, as rsync treats existing files as definitive (so it neverlooks in the link-dest dirs when a destination file already exists), and as malleable (so it might change the attributes of a des‐tination file, which affects all the hard-linked versions).Note that if you combine this option with --ignore-times, rsync will not link any files together because it only links identicalfiles together as a substitute for transferring the file, never as an additional check after the file is updated.If DIR is a relative path, it is relative to the destination directory. See also --compare-dest and --copy-dest.Note that rsync versions prior to 2.6.1 had a bug that could prevent --link-dest from working properly for a non-super-user when-o was specified (or implied by -a). You can work-around this bug by avoiding the -o option when sending to an old rsync.-z, --compress使用該選項,rsync將對發(fā)送給目標(biāo)主機(jī)的文件數(shù)據(jù)(file data)進(jìn)行壓縮,這可以減少傳輸?shù)臄?shù)據(jù)量——在某些緩慢的連接中可能比較適用。注意,該選項一般情況下可以實現(xiàn)比通過遠(yuǎn)程shell壓縮或傳輸過程壓縮獲得更好的壓縮比,因為它利用了明確不通過連接發(fā)送的匹配數(shù)據(jù)塊中的隱含信息。請通過"--skip-compress"選項確定不被壓縮的默認(rèn)文件后綴列表。--compress-level=NUM顯式指定"--compress"的壓縮級別。如果NUM為非零值,則該選項將隱含"--compress"選項。--skip-compress=LIST該選項通過指定后綴格式來決定哪些文件不被壓縮。LIST的值為使用斜杠"/"分隔的一個或多個文件后綴(不包括點.)如果LIST指定的是空字符串,則表示壓縮所有文件。支持簡單的字符類匹配。所謂的字符類由中括號和寫在中括號中的一系列的字母組成(例如:非特殊的字符類[abcz],特殊的字符類[:alpha:],注意,短橫線"-"在此沒有特殊的意義,僅表示一個簡單的字符)。注意,字符"*"和"?"沒有特殊的意義。例如此處示例指定了6個不壓縮的后綴(因為其中一個規(guī)則mp[34]匹配了兩種后綴):--skip-compress=gz/jpg/mp[34]/7z/bz2默認(rèn)不被壓縮的后綴列表為:(不同版本的rsync可能會有些微改變)7z avi bz2 deb gz iso jpeg jpg mov mp3 mp4 ogg rpm tbz tgz z zip該后綴列表將會被"--skip-compress"選項指定的后綴列表覆蓋,但有一種情況例外:以rsync daemon為源拷貝文件時,rsync將在不被壓縮的文件列表中增加你指定的后綴文件(并且該文件列表可能會被配置為非默認(rèn)情況)(譯者注:也就是說,當(dāng)從rsync daemon拷貝時,指定的壓縮忽略后綴不是覆蓋原壓縮忽略列表,而是追加到原壓縮忽略列表)。--numeric-ids使用該選項后,rsync將傳輸gid和uid,而不是字符格式的username和groupname然后將其映射到兩端。默認(rèn)情況下,rsync將使用用戶名和組名來決定如何設(shè)置文件的所有者和所屬組。但要注意,即使沒有指定"--numeric-ids"選項,也絕不會通過字符格式的username和groupname來映射特殊的uid=0和gid=0。如果在源主機(jī)上的用戶或組沒有字符格式的名稱(譯者注:即只有uid和gid,沒有username和groupname),或者目標(biāo)主機(jī)上沒有相同的用戶/組,則將使用uid/gid來設(shè)置所有權(quán)關(guān)系。請參看rsyncd.conf的man文檔中關(guān)于"use chroot"的設(shè)置說明,以獲取關(guān)于chroot設(shè)置后如何影響rsync對用戶名和組名的查找能力以及你能對此做些什么。--timeout=TIMEOUT該選項設(shè)置的是最大IO超時時間,單位為秒。如果在指定時間內(nèi)沒有數(shù)據(jù)被傳輸,則rsync將直接退出。默認(rèn)值為0表示永不超時。--contimeout該選項設(shè)置rsync成功連接rsync daemon的等待超時時間。如果在指定時間內(nèi)未連接上rsync daemon,則rsync將以錯誤方式退出。--address默認(rèn)當(dāng)rsync連接rsync daemon時,rsync所使用的地址將會綁定到通配符地址上(譯者注:默認(rèn)通配符地址為0.0.0.0,即可以從任意接口的任意地址上向外發(fā)起連接)。使用該選項可以明確指定rsync要綁定的IP地址或主機(jī)名。請同樣參見"--daemon"模式中"--address"選項獲取詳細(xì)信息。--port=PORT該選項可以顯式指定一個要使用的tcp端口號而不是默認(rèn)的873端口。該選項只能在連接rsync daemon時的雙冒號(::)的語法格式中使用(因為URLrsync://user@host:port/語法本身就可以指定端口號,所以不需要該選項明確指定)。請同樣參見"--daemon"模式中"--port"選項獲取詳細(xì)信息。--sockopts這個選項可以為希望最大程度地調(diào)整系統(tǒng)的人們提供無窮樂趣。你可以設(shè)置各種套接字選項使得傳輸速度更快(或更慢!)。關(guān)于該選項的可設(shè)置項請閱讀setsockopt()系統(tǒng)調(diào)用的man文檔。默認(rèn)情況下,該選項沒有設(shè)置任何值。該選項只影響使用套接字連接rsync daemon的情況。在"--daemon"模式中也有該選項。--blocking-io該選項告訴rsync在啟動遠(yuǎn)程shell傳輸時使用阻塞I/O模型。如果遠(yuǎn)程shell為rsh或remsh,rsync默認(rèn)會使用阻塞I/O,否則默認(rèn)將使用非阻塞I/O模型。(注意,ssh更適合使用非阻塞I/O)-i, --itemize-changes請求輸出一個明細(xì)列表,這個列表記錄的是每個文件發(fā)生了哪些改變,包括屬性的改變。它完全等價于"--out-format='%i %n%L'"。如果重復(fù)該選項,未發(fā)生改變的文件也會被輸出。因為幾乎不用,所以不做翻譯。--out-format=FORMAT該選項允許你自定義rsync client對每個更新過程產(chǎn)生輸出的信息格式。指定的格式為"%"加一個單字符。如果指定了"-v"選項,則其默認(rèn)的格式為"%n%L"(將輸出文件名,如果是一個鏈接文件,則輸出其指向的對象)。完整的格式列表,見rsyncd.conf的man文檔中"log format"段落。指定"--out-format"是對每個文件、目錄等都輸出信息的。rsync將在文件傳輸之前輸出這些信息,除非請求輸出傳輸過程中的統(tǒng)計信息,這樣它會在文件傳輸結(jié)束前輸出信息,在這種情況下如果同時指定了"--progress"選項,rsync將會同時輸出正在傳輸中的文件名。--log-file=FILE請求將輸出信息記錄到文件中。類似于"--out-format"。它可以指定記錄client以及非daemon的server端的日志。如果在客戶端的命令行上指定該選項,則默認(rèn)格式為"%i %n%L"。以下是一個請求遠(yuǎn)端來記錄日志的示例:rsync -av --rsync-path="rsync --log-file=/tmp/rlog" src/ dest/該選項對于調(diào)試非預(yù)期的連接關(guān)閉比較有用。--log-file-format=FORMAT該選項指定要在"--log-file"文件中記錄的日志格式(當(dāng)然,需配合"--log-file"才生效)。如果FORMAT指定為空,將不會記錄更新的文件信息。完整的格式列表,見rsyncd.conf的man文檔中"log format"段落。--stats該選項讓rsync打印文件傳輸過程中的詳細(xì)統(tǒng)計數(shù)據(jù),從中可以看出增量算法的效率如何。統(tǒng)計數(shù)據(jù)包括如下幾項:o Number of files是所有"文件"的數(shù)量總數(shù),包含目錄、字符鏈接等。o Number of files transferred是普通文件通過rsync的增量傳輸算法更新的數(shù)據(jù)大小,它不包括創(chuàng)建的目錄、字符鏈接等非文件數(shù)據(jù)。o Total file size是傳輸中所有文件的總大小。該大小不會計算目錄和特殊文件大小,但會包含字符鏈接的大小。 o Total transferred file size是所有已傳輸文件的總大小。o Literal data是所有非匹配數(shù)據(jù)塊的數(shù)據(jù)大小,即傳輸給receiver端的純文件數(shù)據(jù)大小。 o Matched data是所有匹配塊的數(shù)據(jù)總大小,即receiver端從basis file中拷貝的數(shù)據(jù)大小。o File list size是sender發(fā)送給receiver端的文件列表大小。它比內(nèi)存中文件列表的內(nèi)容要小很多,因為sender將其傳輸給receiver端的時候會將其進(jìn)行壓縮。o File list generation time是sender創(chuàng)建文件列表消耗的時間,單位為秒。老版本的rysnc可能不會輸出該項。o File list transfer time是sender將文件列表發(fā)送給receiver端所消耗的時間,單位為秒。 o Total bytes sent是rsync從sender端傳輸給receiver端的所有數(shù)據(jù)大小,單位字節(jié)。(譯者注:包括純文件數(shù)據(jù),信息數(shù)據(jù)等等非文件數(shù)據(jù))o Total bytes received是receiver端收到的所有非信息數(shù)據(jù)大小,單位字節(jié)。-8, --8-bit-output告訴rsync在輸出信息中保留所有高位字符不進(jìn)行轉(zhuǎn)義。幾乎用不上,所以不做翻譯。-h, --human-readable以人類可讀方式輸出信息。如果只指定單個該選項,則K/M/G的轉(zhuǎn)換單位為1000,指定多次,則轉(zhuǎn)換單位為1024。--partial默認(rèn)rsync在傳輸中斷時會刪除只傳輸了一部分不完整文件(partial file)。在某些環(huán)境下,可能希望保留這些已傳輸?shù)牟糠帧?#34;--partial"選項告訴rsync保留這些部分,這可以使得下一次傳輸只傳輸剩余部分,從而加快傳輸速度。--partial-dir=DIR比直接使用"--partial"更好的做法是指定一個存放不完整數(shù)據(jù)(partial file)的目錄DIR,下次再傳輸時,rsync將使用一個文件來尋找到該DIR中的文件,以便提高傳輸速率,當(dāng)數(shù)據(jù)真正傳輸完整且傳輸真正完成后,該DIR將被刪除。注意,如果指定了"--whole-file"選項(后者隱含了該選項),則所有的"partial-dir"中正在更新的文件都會被刪除,因為rsync此時沒有使用增量傳輸算法來傳輸文件。rsync如果發(fā)現(xiàn)DIR不存在,則自動創(chuàng)建(但不是遞歸創(chuàng)建整個目錄路徑),這使得rsync在需要時能更方便地使用相對路徑在文件所在目錄下直接創(chuàng)建partial-dir(例如"--partial-dir=.rsync-partial"),并且在partial file被刪除時自動移除該目錄。如果partial-dir的值不是一個絕對路徑,rsync將在所有的exclude規(guī)則的尾部追加一個exclude規(guī)則,用于防止partial file已經(jīng)存在于sender端,也能防止receiver端過早刪除partial file。例如:"--partial-dir"將在其他篩選規(guī)則的尾部添加一個等價于"-f 'P .rsync-partial/'"的規(guī)則。如果你正在使用自定義的exclude規(guī)則,你可能需要在你的exclude/hide/protect規(guī)則中添加partial-dir相關(guān)的條目,因為(1)向其他規(guī)則的尾部自動添加規(guī)則的行為可能會失效(2)你可能希望覆蓋rsync的排除選擇。例如,如果你想讓rsync清除被隨意亂放置的剩余partial file,需要指定"--delete-after"并且添加一條"risk"篩選規(guī)則,如"-f 'R .rsync-partial/'"(不要使用"--delete-before"或"--delete-during",除非你不想讓rsync使用剩余的partial file來完成此次傳輸)。重要:"--partial-dir"目錄不能讓其他用戶可寫,否則它有安全隱患。例如避免使用"/tmp"。你也可以通過環(huán)境變量"RSYNC_PARTIAL_DIR"來設(shè)置partial-dir的值。設(shè)置該環(huán)境變量不會強(qiáng)制開啟"--partial",但在指定了"--partial"時會影響它的partial-dir路徑。例如,不再讓"-partial-dir=.rsync-tmp"隨同"--progress"一起使用,而是設(shè)置"RSYNC_PARTIAL_DIR=.rsync-tmp",然后只需使用"-P"選項來應(yīng)用".rsync-tmp"目錄以完成partial傳輸。只有在以下情況下"--partial"不會查找該環(huán)境變量的值:(1)使用了選項"--inplace"(因為"--inplace"和"--partial-dir"選項沖突)(2)使用了選項"--delay-updates"(見下文)。--delay-updates該選項將receiver端每個重組的臨時文件保留在某個目錄中,直到傳輸結(jié)束之前才一次性將它們?nèi)恐孛麨楦髯詫?yīng)的目標(biāo)文件。這樣的行為使得所有文件的更新更具有原子性(譯者注:如果你了解數(shù)據(jù)庫事務(wù),就知道原子性是什么意思,最直白地說,具有原子性表示要么全部成功,要么全部失敗,所以這里更新具有原子性表示要么全部更新成功,要么全部更新失敗,但由于重命名覆蓋目標(biāo)文件后是不可回滾的,所以這里的原子性并不是那么的嚴(yán)格)。默認(rèn)情況下,這些臨時文件將放在每個目標(biāo)文件所在目錄下的".~tmp~"子目錄下,但如果指定了選項"--partial-dir",那么將使用該選項指定的目錄。請參見"--partial-dir"選項獲取相關(guān)信息。該選項和"--inplace"以及"--append"選項沖突。該選項使得receiver端使用更多的內(nèi)存空間,并且需要更多的磁盤空間以存儲額外的目標(biāo)文件副本。需要注意,"--partial-dir"不能使用絕對路徑,除非你能保證傳輸中的文件沒有同名文件(因為如果使用了絕對路徑,所有的臨時文件都放在那一個目錄下,重名文件會先后覆蓋),且在目錄層次結(jié)構(gòu)中沒有掛載點(因為如果無法重命名到指定路徑下,延遲更新將失敗)-m, --prune-empty-dirs該選項告訴receiver端的rsync從文件列表中刪除空目錄,包括那些沒有文件的空的嵌套目錄。這對于避免創(chuàng)建一堆無用的目錄很有用,例如在sender端使用include/exclude/filter規(guī)則掃描遞歸層次時會創(chuàng)建所有層次的目錄。注意傳輸規(guī)則(如"--min-size")不會影響文件進(jìn)入文件列表,因此不會讓目錄成為空目錄,即使目錄中沒有任何文件可以匹配上傳輸規(guī)則。由于該選項會修剪file list,所以會影響delete對目錄的刪除行為。但請記住,exclude排除的文件和目錄可以防止現(xiàn)有條目被刪除,因為排除規(guī)則即隱藏了源文件,又保護(hù)了目標(biāo)文件。可以使用全局"protect"篩選規(guī)則防止file list中的某個特定目錄被修剪。例如,下面的選項可以保證目錄"emptydir"仍然保留在file list中:--filter ’protect emptydir/’以下的示例可以從一個層次結(jié)構(gòu)中拷貝其中所有的.pdf文件,并且只在目標(biāo)主機(jī)上創(chuàng)建必要的目錄來存放這些.pdf文件,并會移除目標(biāo)上所有多余文件和目錄(注意此處使用了非目錄文件的hide篩選規(guī)則替代exclude規(guī)則):rsync -avm --del --include=’*.pdf’ -f ’hide,! */’ src/ dest如果不想刪除目標(biāo)主機(jī)上多余的文件,可以使用更古老的選項"--include='*/' --exclude='*'"替代hide篩選規(guī)則,不過你不一定能適應(yīng)它,畢竟它是古老的選項。--progress該選項告訴rsync顯示傳輸進(jìn)度信息,這是給那些無聊的用戶看的(譯者注:寫此文檔的作者還真是調(diào)皮,竟然這么直白)。該選項隱含"--verbose"選項。如果rsync正在傳輸?shù)氖且粋€普通文件,將以下面格式顯示進(jìn)度信息:782448 63% 110.64kB/s 0:00:04在此例中,receiver重組了sender發(fā)送的文件的782448字節(jié)的數(shù)據(jù)或者說重組了該文件的63%(譯者注:此處的意思是這些數(shù)據(jù)是文件的純數(shù)據(jù),不包括那些非文件信息類數(shù)據(jù)),且以110.64kB/s的速率重建文件,如果保持該速率,該文件將在4秒后重建完成。如果使用的是rsync的增量拷貝算法,那么這些統(tǒng)計數(shù)據(jù)可能會誤導(dǎo)用戶。例如,如果sender的文件由basis file和另一段放在basis file前面的數(shù)據(jù)組成,那么當(dāng)reciever在獲取純文件數(shù)據(jù)時,此處所顯示的速率值會急劇下降,而且要完成傳輸可能會比估計的時間更長,因為它還要處理匹配的數(shù)據(jù)塊部分。(譯者注:換句話說,該進(jìn)度信息是sender發(fā)送的純數(shù)據(jù)相關(guān)信息,和真正完成同步的進(jìn)度沒有直接關(guān)系) 當(dāng)文件傳輸完成,rsync將使用總結(jié)性的行替代進(jìn)度信息,類似格式如下:1238099 100% 146.38kB/s 0:00:08 (xfer#5, to-check=169/396)此示例中,文件大小為1238099字節(jié),整體傳輸平均速率是146.38kB/s,總共消耗了8秒才傳輸完成。"xfer#5"表示此文件是該rsync會話期間第5個傳輸?shù)奈募?#xff0c;"to-check=169/396"表示此次傳輸?shù)奈募斜碇泄惨獧z查396個文件,其中有169個文件待檢查以確定它們是否需要傳輸。(譯者注:可以認(rèn)為396是某些文件被排除后待考慮是否傳輸?shù)目偽募?shù),196則是還剩下196個文件還未檢查)-P 該選項等價于"--partial --progess"選項。指定這兩個選項的目的是為了讓某一次可能會中斷的較長傳輸過程變得更簡單。--password-file該選項讓rsync在連接rsync daemon時從密碼文件中獲取密碼。密碼文件必須可讀。該文件中只有第一行是rsync將讀取的密碼,其他所有行都自動忽略。該選項無法為遠(yuǎn)程shell(如ssh)提供密碼,至于如何為遠(yuǎn)程shell提供密碼,參考對應(yīng)遠(yuǎn)程shell的文檔(譯者注:對于ssh而言,使用公鑰認(rèn)證機(jī)制即可)。當(dāng)使用遠(yuǎn)程shell訪問rsync daemon時,該選項只有完成了遠(yuǎn)程shell的身份驗證過程才生效。--list-only該選項強(qiáng)制rsync僅列出源路徑的文件列表而不是進(jìn)行文件傳輸。如果rsync命令行中只給出了一個地址,將隱含該選項。注意通配符會被shell解析并擴(kuò)展為rsync的參數(shù)。例如:rsync -av --list-only foo* dest/--bwlimit=KBPS該選項對rsync的傳輸最大速度進(jìn)行限速。該限制值是一個平均值,所以在實際傳輸過程中可能會短暫的超出該限制值。設(shè)置為0則表示不限速。--write-batch=FILE記錄一個稍后被"--read-batch"讀取的文件,該文件可被用于另一個完全一致的目標(biāo)路徑。詳細(xì)信息見"批處理模式"段落信息。(譯者注:通俗地說,就是將源和目標(biāo)的不同點記錄下來保存在FILE中,然后通過"--read-batch"讀取這些不同點并更新目標(biāo)文件,如果有多臺目標(biāo)主機(jī)上的文件情況是完全一致的,則可以通過此FILE一次性應(yīng)用于所有這些主機(jī),因此稱之為"批處理模式"。注意,FILE中不僅記錄了不同之處,還記錄了將要應(yīng)用于目標(biāo)主機(jī)的數(shù)據(jù)部分,因此它是一個"信息+數(shù)據(jù)"文件而不僅僅只是小小的信息文件)--only-write-batch=FILE和"--write-batch"工作方式類似,區(qū)別是當(dāng)生成batch file的時候不會對目標(biāo)路徑做任何操作。這使得你可以通過某些方法將所發(fā)生改變的信息傳輸?shù)侥繕?biāo)系統(tǒng)上,然后通過"--read-batch"應(yīng)用這些改變。可以直接將批處理文件FILE保存到任意的移動存儲設(shè)備中。注意,只有向遠(yuǎn)程主機(jī)推送這些改變時才能節(jié)省帶寬,因為這樣可以讓sender端的數(shù)據(jù)分流記錄到FILE中,而無需通過連接傳輸給receiver端。(如果是拉取數(shù)據(jù),則sender端為remote,因此無法寫批處理文件FILE)--read-batch=FILE讀取所有通過"--write-batch"生成的批處理文件FILE并通過其中的"信息+數(shù)據(jù)"應(yīng)用于目標(biāo)主機(jī)。如果FILE未"-",則批處理數(shù)據(jù)將從標(biāo)準(zhǔn)輸入中讀取。 --protocol=NUM強(qiáng)制指定要使用的協(xié)議版本。一般只在創(chuàng)建批處理文件以兼容老版本的rsync時可能會用上,因此不做翻譯。--iconv=CONVERT_SPECrsync可以在不同字符集間轉(zhuǎn)換文件名。基本用不會上,因此不做翻譯。-4, --ipv4 or -6, --ipv6限制rsync使用ipv4還是ipv6創(chuàng)建套接字。該選項由于明確表示了要用網(wǎng)絡(luò)套接字,也就限制了只有連接rsync daemon時才生效。如果編譯rsync時沒有將ipv6的功能編譯進(jìn)去,則"--ipv6"無效。通過"--version"的輸出結(jié)果可以知道是否編譯了ipv6功能。--checksum-seed=NUM指定checksum的種子長度。默認(rèn)種子長度為4字節(jié),應(yīng)用于每個數(shù)據(jù)塊級和文件級checksum的計算。默認(rèn)checksum的種子由server和其默認(rèn)的當(dāng)前系統(tǒng)時間time()計算生成。該選項顯示指定特定的checksum種子,對應(yīng)想要重復(fù)計算塊級或文件級checksum時或者用戶想要一個更具隨機(jī)性的checksum種子時比較有用。設(shè)置NUM為0將導(dǎo)致rsync使用默認(rèn)的time()來計算種子。DAEMON OPTIONS當(dāng)啟動rsync daemon時,可以指定以下幾個選項:--daemon該選項告訴rsync以daemon方式運行。可以在client端使用host::module or rsync://host/module/格式的命令來訪問daemon。如果標(biāo)準(zhǔn)輸入是一個套接字,則rsync被認(rèn)為是通過inetd方式運行的,否則它將從當(dāng)前終端上分離出來并成為后臺守護(hù)進(jìn)程。每次和daemon進(jìn)行連接時,daemon都會讀取配置文件(rsyncd.conf)并給出對應(yīng)的相應(yīng)。更詳細(xì)信息見rsyncd.conf的man文檔。--addressrsync daemon的綁定地址,默認(rèn)會綁定在通配地址上(默認(rèn)為0.0.0.0)。使用"--address"選項可以顯式指定要綁定的IP地址或主機(jī)。可以配合"--config"一起使用來實現(xiàn)rsync虛擬主機(jī)的功能。更多信息見rsyncd.conf的man文檔中"address"段落說明。--bwlimit=KBPS該選項對rsync的傳輸最大速度進(jìn)行限速。該限制值是一個平均值,所以在實際傳輸過程中可能會短暫的超出該限制值。設(shè)置為0則表示不限速。--config=FILE該選項用于指定額外的配置文件來代替默認(rèn)的配置文件,只有和"--daemon"選項同時使用時才有效。默認(rèn)daemon的配置文件為/etc/rsyncd.conf,除非是通過遠(yuǎn)程shell啟動的臨時daemon,使用遠(yuǎn)程shell連接的daemon的默認(rèn)配置文件是當(dāng)前目錄(一般是$HOME)下的rsyncd.conf。--no-detach當(dāng)以daemon形式運行時,該選項表示rsync不從終端中將自己分離出來,所以工作在前臺。在各種daemon管理工具如daemontools、systemd上需要使用。如果rsync是由sshd或inetd派生出來的話,則該選項無效。--port=PORT指定daemon的監(jiān)聽端口,默認(rèn)為873。--log-file=FILE該選項告訴rsync daemon使用此處指定的日志文件替代配置文件中"log file"指定的日志文件。--log-file-format=FORMAT該選項告訴rsync daemon使用此處指定的日志格式而不是配置文件中"log format"指定的日志格式。該選項會自動開啟"transfer logging",除非它的值為空,因為這樣表示關(guān)閉transfer logging功能。--sockopts指定套接字選項,將覆蓋配置文件配置的套接字選項。-v, --verbose該選項輸出rsync daemon啟動時的詳細(xì)信息。它不控制客戶端和daemon連接時的信息詳細(xì)程度,因為這些信息詳細(xì)程度是由client和模塊配置段中的"max verbosity"控制的。-4, --ipv4 or -6, --ipv6告訴rsync使用IPV4還是IPV6創(chuàng)建套接字,然后rsync daemon將監(jiān)聽在對應(yīng)的地址類型上。如果編譯rsync時沒有將ipv6的功能編譯進(jìn)去,則"--ipv6"無效。通過"--version"的輸出結(jié)果可以知道是否編譯了ipv6功能。-h, --help如果該選項指定在"--daemon"選項之后,則輸出rsync daemon可用選項的簡短幫助信息。FILTER RULES
(譯者注:下面篩選規(guī)則的內(nèi)容很多地方都提到了"傳輸中根目錄"(transfer-root)的概念,所以提前在此做個解釋。
假設(shè)執(zhí)行rsync -r /www/lvm /www/audit remote_host:/path命令,則待傳輸?shù)哪夸沴vm和audit稱為傳輸過程中的根目錄,即頂級目錄)
篩選規(guī)則可以彈性定義哪些文件需要傳輸(include)(譯者注:前文中出現(xiàn)的傳輸規(guī)則指的就是include規(guī)則),以及哪些文件需要跳過(exclude)。這些規(guī)則要么直接指定include/exclude匹配模式,要么指定一種方式從中獲取include/exclude匹配模式(例如從文件中讀取規(guī)則)。對于已經(jīng)創(chuàng)建好的file list中的文件或目錄,rsync會按先后順序?qū)ζ渲械拿恳粋€名稱檢查是否能匹配incluee/exclude規(guī),且先匹配上的規(guī)則生效:如果能匹配上exclude規(guī)則,則該文件被跳過,如果該文件能匹配include或不能匹配任何規(guī)則,則不挑過該文件。rsync會按照命令行中指定的篩選規(guī)則建立一個有序的規(guī)則列表。篩選規(guī)則語法如下:RULE [PATTERN_OR_FILENAME]RULE,MODIFIERS [PATTERN_OR_FILENAME]你可以選擇使用下面所描述的長格式或短格式的RULE名稱。如果使用短格式命名的的rule,則分隔RULE和MODIFIERS中間的","是可選的。其后的PATTERN或FILENAME必須跟在單個空格或下劃線(_)之后。以下是規(guī)則前綴:exclude, - 指定排除規(guī)則。include, + 指定包含規(guī)則。merge, . 指定一個從中讀取更多規(guī)則的merge-file。dir-merge, : 指定一個每目錄的merge-file。hide, H 指定傳輸過程中需要隱藏的文件。(譯者注:exclude的本質(zhì)就是hide,該類型的規(guī)則顯然只作用于sender端,下面的"S"同樣如此)show, S 指定不被隱藏的文件。 (譯者注:include的本質(zhì)就是show)protect, P 指定保護(hù)文件不被刪除的規(guī)則。(譯者注:--delete和--exclude同時使用時,會對被排除的文件加上保護(hù)規(guī)則。該類型的規(guī)則顯然只作用于receiver端,下面的"R"同樣如此)risk, R 指定不被保護(hù)的文件,即能被刪除的文件。(譯者注:"--delete-excluded"就是將被保護(hù)的文件強(qiáng)制取消保護(hù))clear, ! 清空當(dāng)前include/exclude規(guī)則列表。 (不帶任何參數(shù))如果是從一個文件中讀取規(guī)則,將忽略空行以及使用"#"開頭的注釋行。注意,使用了"--include"或"--exclude"選項后,將不再解析上述所說的規(guī)則序列,只允許使用"!"表示清空include/exclude規(guī)則。如果匹配模式不是使用"- "(減號加一個空格)或"+ "(加號加一個空格)開頭,則規(guī)則將被認(rèn)為是在字符串的前面加了"+ "(即包含規(guī)則)或"- "(即排除規(guī)則)前綴。實際上"--filter"選項的規(guī)則字符串中必須在字符串開頭包含短名稱或長名稱的規(guī)則。 同時需要注意的是,每個"--filter"、"--include"以及"--exclude"選項都只表示一條規(guī)則,如果要使用多條規(guī)則,你可以重復(fù)使用這些選項,或者使用"--filter"選項的merge-file語法,又或者是"--include-from"、"--exclude-from"選項。INCLUDE/EXCLUDE PATTERN RULES你可以使用"+"、"-"等規(guī)則名稱來指定包含和排除文件的規(guī)則,以及其他的規(guī)則。每個include/exclude規(guī)則都會對應(yīng)一個匹配模式用于匹配將要傳輸?shù)奈募Fヅ淠J接幸韵聨追N格式:o 如果匹配模式以斜線(/)開頭,它表示錨定層次結(jié)構(gòu)中某個特定位置的文件,否則將表示匹配路徑名的結(jié)尾。這有點類似于正則表達(dá)式中的行首"^"。因此"/foo"匹配的是"傳輸中根目錄"(transfer-root)下的"foo"文件,或者是merge-file目錄中的"foo"文件。對于不做限制的"foo"匹配模式,由于算法會從頂部開始向下逐層遞歸,所以它能匹配任意位置名為"foo"的文件。但是對于非錨定的"sub/foo"模式,將匹配層次結(jié)構(gòu)中位于sub目錄下的foo。對于如何指定匹配根"/"的模式見"ANCHORING INCLUDE/EXCLUDE PATTERNS"的段落說明。o 如果匹配模式以斜線(/)結(jié)尾,將只匹配目錄,而不匹配普通文件、字符鏈接以及設(shè)備文件。o rsync通過檢查匹配模式中是否包含"*"、"?"以及"["符號來決定是做簡單的字符串匹配還是通配符匹配。o 單個"*"匹配任意路徑元素,但在遇到斜線時終止匹配。o "**"匹配任意路徑元素,與"*"不同的是,它能匹配斜線。o "?"匹配任意非斜線的單個字符。o "["表示字符類匹配,例如"[a-z]",[[:alpha:]]。o 在通配匹配模式中,反斜線(\)可以對通配符號進(jìn)行轉(zhuǎn)義,但如果不是對通配符號使用反斜線,則它僅僅只是一個普通的反斜線字符。o 如果匹配模式中包含了一個"/"(不包括以斜線結(jié)尾的情況)或"**",則表示對包括前導(dǎo)目錄的全路徑進(jìn)行匹配。如果匹配模式中不包括"/"或"**",則表示只對全路徑尾部的路徑元素進(jìn)行匹配。(注意:使用了遞歸功能時,"全路徑"可能是從最頂端開始向下遞歸的某中間一段路徑)。o 對于"dir_name/***"來說,它將匹配dir_name下的所有層次的文件。注意,當(dāng)使用"--recursive"(-r)選項(-a隱含該選項)時,每個子路徑元素會自頂向下逐層被訪問,因此include/exclude匹配模式會對每個子路徑元素的全路徑名進(jìn)行遞歸(例如,要包含"/foo/bar/baz",則"/foo"和"/foo/bar"必須不能被排除)。實際上,排除匹配模式在發(fā)現(xiàn)有文件要傳輸時,此文件所在目錄層次的排除遍歷會被短路。如果排除了某個父目錄,則更深層次的include模式匹配將無效,因為rsync從排除的那個父目錄位置開始不會再向下遍歷。這在使用尾隨"*"時尤為重要。例如,下面的例子不會正常工作:+ /some/path/this-file-will-not-be-found+ /file-is-included- *由于父目錄"some"被規(guī)則"*"所排除,所以會失敗,rsync絕不會訪問"some"或"some/path"中的任何文件。一種解決方式是請求包含層次結(jié)構(gòu)中的所有目錄,只需使用一個規(guī)則"+ */"(需放在"- *"規(guī)則的前面)即可,可能還需要使用"--prune-empty-dirs"選項。另一解決方式是為所有需要被訪問的父目錄增加特定包含規(guī)則。例如,下面的規(guī)則可以正常工作:+ /some/+ /some/path/+ /some/path/this-file-is-found+ /file-also-included- *以下是一些exclude/include規(guī)則匹配模式:o "- *.o"將排除所有文件名能匹配"*.o"的文件。o "- /foo"將排除"傳輸中根目錄"(transfer-root)下名為"foo"的文件或目錄。o "- foo/"將排除所有名為"foo"的目錄。 o "- /foo/*/bar"將排除"傳輸中根目錄"(transfer-root)下"foo"目錄再向下兩層的"bar"文件。o "- /foo/**/bar"將排除transfer-root下"foo"目錄再向下遞歸任意層次后名為"bar"的文件。(譯者注:"**"匹配任意多個層次的目錄) o 同時使用"+ */"、"+ *.c"和"- *",將只包含所有目錄和C源碼文件,除此之外的所有文件和目錄都被排除。(參見選項"--prune-empty-dirs")o 同時使用"+ foo/"、"+ foo/bar.c"和"- *"將只包含"foo"目錄和"foo/bar.c"。("foo"目錄必須顯式包含,否則將被排除規(guī)則"- *"排除掉)以下是"+"或"-"后可接的修飾符:o "/"指定include/exclude規(guī)則需要與當(dāng)前條目的絕對路徑進(jìn)行匹配。例如,"-/ /etc/passwd"將在任意傳輸/etc目錄中文件時刻都排除passwd文件。而對于"-/ subdir/foo"規(guī)則,當(dāng)傳輸"subdir"目錄中文件時,將總是排除"foo"文件,即使"foo"文件可能是在transfer-root中的。o "!"指定如果模式匹配失敗,則include/exclude規(guī)則生效。例如,"-! */"將排除所有非目錄文件。(譯者注:反向匹配的意思,"- */"規(guī)則是排除所有目錄,那些非目錄文件就匹配不上,加上"!",即"-! */",則表示匹配不上的這些非目錄文件被匹配上)o "C"表示將所有的全局CVS排除規(guī)則插入到普通排除規(guī)則中,而不再使用"-C"選項來插入。其后不能再接其他參數(shù)。o "s"表示規(guī)則只應(yīng)用于sender端。當(dāng)某規(guī)則作用于sender端時,它可以防止文件被傳輸。默認(rèn)情況下,所有規(guī)則都會作用于兩端,除非使用了"--delete-exclude"選項,這樣規(guī)則將只作用于sender端。請參見"hide"(H)和"show"(S)規(guī)則,這是指定sender端include/exclude規(guī)則的另一種方式。o "r"表示規(guī)則只應(yīng)用于receiver端。當(dāng)規(guī)則作用于receiver端,它可以防止文件被刪除。更多信息見上面的"s"修飾符。另請參見"P"和"R"規(guī)則,它們是指定receiver端include/exclude規(guī)則的另一種方式。o "p"表示此規(guī)則是易過期的,這意味著將忽略正在被刪除的目錄。例如,"-C"選項的默認(rèn)規(guī)則是以CVS風(fēng)格進(jìn)行排除,且"*.o"文件會被標(biāo)記為易過期,這將不會阻止在源端移除的目錄在目標(biāo)端上被刪除(譯者注:也就是說在源端刪除的目錄在目標(biāo)端上也會被刪除。以下是原文,翻譯也許有誤)。A p indicates that a rule is perishable, meaning that it is ignored in directories that are being deleted. For instance, the -Coption’s default rules that exclude things like "CVS" and "*.o" are marked as perishable, and will not prevent a directory thatwas removed on the source from being deleted on the destination.MERGE-FILE FILTER RULES你可以通過指定"."將某文件中的規(guī)則合并在規(guī)則集合中,或指定":"(dir-merge)將目錄下文件中的規(guī)則合并在規(guī)則集合中。有兩種合并文件的方式:單實例合并"."和每目錄合并":"。單實例合并文件僅讀取一次,其中的規(guī)則被合并到篩選列表中替代"."所代表的規(guī)則。對于每目錄合并文件,rsync將掃描每個目錄以遍歷指定名稱的規(guī)則文件,并合并規(guī)則文件中的內(nèi)容到當(dāng)前規(guī)則列表中。每目錄合并的規(guī)則文件必須創(chuàng)建在sender端,因為會掃描sender端來決定哪些文件要被傳輸。如果想讓規(guī)則文件作用于receiver端不想被刪除的文件,則需要將規(guī)則文件傳輸?shù)絩eceiver端(見下面的"PER-DIRECTORY RULES AND DELETE")。一些示例:merge /etc/rsync/default.rules. /etc/rsync/default.rulesdir-merge .per-dir-filterdir-merge,n- .non-inherited-per-dir-excludes:n- .non-inherited-per-dir-excludes以下是單實例合并"."和每目錄合并":"后可接的修飾符:o "-"表示規(guī)則文件中只有exclude規(guī)則,可以在文件中使用注釋行。 o "+"表示規(guī)則文件中只有include規(guī)則,可以在文件中使用注釋行。o "C"指定的是CVS分格的規(guī)則。它將會開啟"n"、"w"和"-",也允許指定規(guī)則列表清空修飾符"!"。若不提供任何文件名,則默認(rèn)為".cvsignore"。o "e"表示排除合并文件使其不被傳輸。例如"dir-merge,e .rules"等價于"dir-merge .rules"+"- .rules"。o "n"表示規(guī)則不被子目錄繼承。o "w"表示規(guī)則是使用空白符號分隔的而不是默認(rèn)的換行符。顯然,這種方式下合并文件中不能使用注釋行。注意:分隔規(guī)則前綴的空格是有特殊意義的,例如"- foo + bar"會被解析為兩條規(guī)則。o 此外,你可能還需要指定上文所述的"+"、"-"規(guī)則的修飾符,以便對這些從文件中讀取的規(guī)則具有修飾符集(除了"!"修飾符)。例如"merge,-/ .excl"將把".excl"文件中的內(nèi)容視為絕對路徑排除,而"dir-merge,s .filt"和":sC"都將使得所有每目錄規(guī)則僅作用于sender端。Per-directory rules are inherited in all subdirectories of the directory where the merge-file was found unless the 'n' modifier was used.Each subdirectory's rules are prefixed to the inherited per-directory rules from its parents, which gives the newest rules a higher prioritythan the inherited rules. The entire set of dir-merge rules are grouped together in the spot where the merge-file was specified, so it ispossible to override dir-merge rules via a rule that got specified earlier in the list of global rules. When the list-clearing rule ("!") isread from a per-directory file, it only clears the inherited rules for the current merge file.Another way to prevent a single rule from a dir-merge file from being inherited is to anchor it with a leading slash. Anchored rulesin a per-directory merge-file are relative to the merge-file's directory, so a pattern "/foo" would only match the file "foo" in the directorywhere the dir-merge filter file was found.Here's an example filter file which you'd specify via --filter=". file":merge /home/user/.global-filter- *.gzdir-merge .rules+ *.[ch]- *.oThis will merge the contents of the /home/user/.global-filter file at the start of the list and also turns the ".rules" filename into aper-directory filter file. All rules read in prior to the start of the directory scan follow the global anchoring rules (i.e. a leading slashmatches at the root of the transfer). If a per-directory merge-file is specified with a path that is a parent directory of the first transfer directory, rsync will scan allthe parent dirs from that starting point to the transfer directory for the indicated per-directory file. For instance, here is a commonfilter (see -F):--filter=': /.rsync-filter'That rule tells rsync to scan for the file .rsync-filter in all directories from the root down through the parent directory of the trans‐fer prior to the start of the normal directory scan of the file in the directories that are sent as a part of the transfer. (Note: foran rsync daemon, the root is always the same as the module’s "path".)Some examples of this pre-scanning for per-directory files:rsync -avF /src/path/ /dest/dirrsync -av --filter=': ../../.rsync-filter' /src/path/ /dest/dirrsync -av --filter=': .rsync-filter' /src/path/ /dest/dirThe first two commands above will look for ".rsync-filter" in "/" and "/src" before the normal scan begins looking for the file in"/src/path" and its subdirectories. The last command avoids the parent-dir scan and only looks for the ".rsync-filter" files in eachdirectory that is a part of the transfer.If you want to include the contents of a ".cvsignore" in your patterns, you should use the rule ":C", which creates a dir-merge of the.cvsignore file, but parsed in a CVS-compatible manner. You can use this to affect where the --cvs-exclude (-C) option’s inclusion ofthe per-directory .cvsignore file gets placed into your rules by putting the ":C" wherever you like in your filter rules. Without this,rsync would add the dir-merge rule for the .cvsignore file at the end of all your other rules (giving it a lower priority than your com‐mand-line rules). For example:cat <<EOT | rsync -avC --filter='. -' a/ b+ foo.o:C- *.oldEOTrsync -avC --include=foo.o -f :C --exclude='*.old' a/ bBoth of the above rsync commands are identical. Each one will merge all the per-directory .cvsignore rules in the middle of the listrather than at the end. This allows their dir-specific rules to supersede the rules that follow the :C instead of being subservient toall your rules. To affect the other CVS exclude rules (i.e. the default list of exclusions, the contents of $HOME/.cvsignore, and thevalue of $CVSIGNORE) you should omit the -C command-line option and instead insert a "-C" rule into your filter rules; e.g. "--fil‐ter=-C".LIST-CLEARING FILTER RULE(清空篩選規(guī)則列表)You can clear the current include/exclude list by using the "!" filter rule (as introduced in the FILTER RULES section above). The "cur‐rent" list is either the global list of rules (if the rule is encountered while parsing the filter options) or a set of per-directoryrules (which are inherited in their own sub-list, so a subdirectory can use this to clear out the parent’s rules).ANCHORING INCLUDE/EXCLUDE PATTERNS(INCLUDE/EXCULDE匹配模式的錨定行為)As mentioned earlier, global include/exclude patterns are anchored at the "root of the transfer" (as opposed to per-directory patterns,which are anchored at the merge-file’s directory). If you think of the transfer as a subtree of names that are being sent from sender toreceiver, the transfer-root is where the tree starts to be duplicated in the destination directory. This root governs where patternsthat start with a / match.Because the matching is relative to the transfer-root, changing the trailing slash on a source path or changing your use of the --rela‐tive option affects the path you need to use in your matching (in addition to changing how much of the file tree is duplicated on thedestination host). The following examples demonstrate this.Let’s say that we want to match two source files, one with an absolute path of "/home/me/foo/bar", and one with a path of"/home/you/bar/baz". Here is how the various command choices differ for a 2-source transfer:Example cmd: rsync -a /home/me /home/you /dest+/- pattern: /me/foo/bar+/- pattern: /you/bar/bazTarget file: /dest/me/foo/barTarget file: /dest/you/bar/bazExample cmd: rsync -a /home/me/ /home/you/ /dest+/- pattern: /foo/bar (note missing "me")+/- pattern: /bar/baz (note missing "you")Target file: /dest/foo/barTarget file: /dest/bar/bazExample cmd: rsync -a --relative /home/me/ /home/you /dest+/- pattern: /home/me/foo/bar (note full path)+/- pattern: /home/you/bar/baz (ditto)Target file: /dest/home/me/foo/barTarget file: /dest/home/you/bar/bazExample cmd: cd /home; rsync -a --relative me/foo you/ /dest+/- pattern: /me/foo/bar (starts at specified path)+/- pattern: /you/bar/baz (ditto)Target file: /dest/me/foo/barTarget file: /dest/you/bar/bazThe easiest way to see what name you should filter is to just look at the output when using --verbose and put a / in front of the name(use the --dry-run option if you’re not yet ready to copy any files).PER-DIRECTORY RULES AND DELETEWithout a delete option, per-directory rules are only relevant on the sending side, so you can feel free to exclude the merge files them‐selves without affecting the transfer. To make this easy, the ’e’ modifier adds this exclude for you, as seen in these two equivalentcommands:rsync -av --filter=': .excl' --exclude=.excl host:src/dir /destrsync -av --filter=':e .excl' host:src/dir /destHowever, if you want to do a delete on the receiving side AND you want some files to be excluded from being deleted, you’ll need to besure that the receiving side knows what files to exclude. The easiest way is to include the per-directory merge files in the transferand use --delete-after, because this ensures that the receiving side gets all the same exclude rules as the sending side before it triesto delete anything:rsync -avF --delete-after host:src/dir /destHowever, if the merge files are not a part of the transfer, you’ll need to either specify some global exclude rules (i.e. specified onthe command line), or you’ll need to maintain your own per-directory merge files on the receiving side. An example of the first is this(assume that the remote .rules files exclude themselves):rsync -av --filter=’: .rules’ --filter=’. /my/extra.rules’--delete host:src/dir /destIn the above example the extra.rules file can affect both sides of the transfer, but (on the sending side) the rules are subservient tothe rules merged from the .rules files because they were specified after the per-directory merge rule.In one final example, the remote side is excluding the .rsync-filter files from the transfer, but we want to use our own .rsync-filterfiles to control what gets deleted on the receiving side. To do this we must specifically exclude the per-directory merge files (so thatthey don’t get deleted) and then put rules into the local files to control what else should not get deleted. Like one of these commands:rsync -av --filter=':e /.rsync-filter' --delete \host:src/dir /destrsync -avFF --delete host:src/dir /destBATCH MODEBatch mode can be used to apply the same set of updates to many identical systems. Suppose one has a tree which is replicated on a numberof hosts. Now suppose some changes have been made to this source tree and those changes need to be propagated to the other hosts. Inorder to do this using batch mode, rsync is run with the write-batch option to apply the changes made to the source tree to one of thedestination trees. The write-batch option causes the rsync client to store in a "batch file" all the information needed to repeat thisoperation against other, identical destination trees.Generating the batch file once saves having to perform the file status, checksum, and data block generation more than once when updatingmultiple destination trees. Multicast transport protocols can be used to transfer the batch update files in parallel to many hosts atonce, instead of sending the same data to every host individually.To apply the recorded changes to another destination tree, run rsync with the read-batch option, specifying the name of the same batchfile, and the destination tree. Rsync updates the destination tree using the information stored in the batch file.For your convenience, a script file is also created when the write-batch option is used: it will be named the same as the batch filewith ".sh" appended. This script file contains a command-line suitable for updating a destination tree using the associated batch file.It can be executed using a Bourne (or Bourne-like) shell, optionally passing in an alternate destination tree pathname which is then usedinstead of the original destination path. This is useful when the destination tree path on the current host differs from the one used tocreate the batch file.Examples:$ rsync --write-batch=foo -a host:/source/dir/ /adest/dir/$ scp foo* remote:$ ssh remote ./foo.sh /bdest/dir/$ rsync --write-batch=foo -a /source/dir/ /adest/dir/$ ssh remote rsync --read-batch=- -a /bdest/dir/ <fooIn these examples, rsync is used to update /adest/dir/ from /source/dir/ and the information to repeat this operation is stored in "foo"and "foo.sh". The host "remote" is then updated with the batched data going into the directory /bdest/dir. The differences between thetwo examples reveals some of the flexibility you have in how you deal with batches:o The first example shows that the initial copy doesn’t have to be local -- you can push or pull data to/from a remote host usingeither the remote-shell syntax or rsync daemon syntax, as desired.o The first example uses the created "foo.sh" file to get the right rsync options when running the read-batch command on the remotehost.o The second example reads the batch data via standard input so that the batch file doesn’t need to be copied to the remote machinefirst. This example avoids the foo.sh script because it needed to use a modified --read-batch option, but you could edit thescript file if you wished to make use of it (just be sure that no other option is trying to use standard input, such as the"--exclude-from=-" option).Caveats:The read-batch option expects the destination tree that it is updating to be identical to the destination tree that was used to createthe batch update fileset. When a difference between the destination trees is encountered the update might be discarded with a warning(if the file appears to be up-to-date already) or the file-update may be attempted and then, if the file fails to verify, the update dis‐carded with an error. This means that it should be safe to re-run a read-batch operation if the command got interrupted. If you wish toforce the batched-update to always be attempted regardless of the file’s size and date, use the -I option (when reading the batch). Ifan error occurs, the destination tree will probably be in a partially updated state. In that case, rsync can be used in its regular(non-batch) mode of operation to fix up the destination tree.The rsync version used on all destinations must be at least as new as the one used to generate the batch file. Rsync will die with anerror if the protocol version in the batch file is too new for the batch-reading rsync to handle. See also the --protocol option for away to have the creating rsync generate a batch file that an older rsync can understand. (Note that batch files changed format in ver‐sion 2.6.3, so mixing versions older than that with newer versions will not work.)When reading a batch file, rsync will force the value of certain options to match the data in the batch file if you didn’t set them tothe same as the batch-writing command. Other options can (and should) be changed. For instance --write-batch changes to --read-batch,--files-from is dropped, and the --filter/--include/--exclude options are not needed unless one of the --delete options is specified.The code that creates the BATCH.sh file transforms any filter/include/exclude options into a single list that is appended as a "here"document to the shell script file. An advanced user can use this to modify the exclude list if a change in what gets deleted by --deleteis desired. A normal user can ignore this detail and just use the shell script as an easy way to run the appropriate --read-batch com‐mand for the batched data.The original batch mode in rsync was based on "rsync+", but the latest version uses a new implementation.符號鏈接當(dāng)rsync在源目錄中遇到符號鏈接有3種基本行為:默認(rèn)情況下,符號鏈接不會被傳輸。且會提示"skipping non-regular file is emmitted"。如果指定了"--links"選項,則在目標(biāo)路徑下創(chuàng)建指向相同對象的符號鏈接。注意,"--archive"選項隱含了"--links"選項。(譯者注:即傳輸符號鏈接本身,如果目標(biāo)主機(jī)上沒有該鏈接指向的對象,則目標(biāo)主機(jī)上此符號鏈接是一個損壞的軟鏈接)如果指定了"--copy-links"選項,符號鏈接將"折疊"(collapsed)其所指向文件的內(nèi)容并傳輸,而不是傳輸鏈接本身。(譯者注:舉個例子,例如源主機(jī)符號鏈接a指向b,如果指定該選項,則在目標(biāo)主機(jī)上會創(chuàng)建文件a,但a不是符號鏈接,而是普通文件或目錄,其內(nèi)容和b中的內(nèi)容完全一致,也就是將b中的內(nèi)容疊進(jìn)符號鏈接中。)rsync同樣可以識別"安全"(safe)和"不安全"(unsafe)鏈接。可能會在web鏡像站點中使用它們,例如希望保證被拷貝的rsync模塊不包含指向/etc/passwd的符號鏈接。使用"--copy-unsafe-links"將導(dǎo)致任何軟鏈接以其指向的文件進(jìn)行拷貝,使用"--safe-links"則使得unsafe軟鏈接完全被忽略。(注意:必須指定"--links","--safe-links"選項才會生效。)以下是被視為不安全的符號鏈接的情況:路徑是絕對鏈接(以斜線/開頭)、空鏈接、路徑中包含".."。以下是符號鏈接相關(guān)選項的解釋:優(yōu)先級從高到低排序--copy-links將所有符號鏈接變?yōu)槠胀ㄎ募?所有符號鏈接相關(guān)的其他選項都不會對此選項產(chǎn)生影響)。--links --copy-unsafe-links將所有不安全符號鏈接編程文件,并復(fù)制所有安全符號鏈接。--copy-unsafe-links將所有不安全符號鏈接變?yōu)槲募?#xff0c;但跳過所有安全符號鏈接。--links --safe-links復(fù)制所有安全符號鏈接并跳過不安全符號鏈接。--links復(fù)制所有符號鏈接本身。DIAGNOSTICSrsync occasionally produces error messages that may seem a little cryptic. The one that seems to cause the most confusion is "protocolversion mismatch -- is your shell clean?".This message is usually caused by your startup scripts or remote shell facility producing unwanted garbage on the stream that rsync isusing for its transport. The way to diagnose this problem is to run your remote shell like this:ssh remotehost /bin/true > out.datthen look at out.dat. If everything is working correctly then out.dat should be a zero length file. If you are getting the above errorfrom rsync then you will probably find that out.dat contains some text or data. Look at the contents and try to work out what is produc‐ing it. The most common cause is incorrectly configured shell startup scripts (such as .cshrc or .profile) that contain output statementsfor non-interactive logins.If you are having trouble debugging filter patterns, then try specifying the -vv option. At this level of verbosity rsync will show whyeach individual file is included or excluded.ENVIRONMENT VARIABLESCVSIGNOREThe CVSIGNORE environment variable supplements any ignore patterns in .cvsignore files. See the --cvs-exclude option for moredetails.RSYNC_ICONVSpecify a default --iconv setting using this environment variable. (First supported in 3.0.0.)RSYNC_RSHThe RSYNC_RSH environment variable allows you to override the default shell used as the transport for rsync. Command line optionsare permitted after the command name, just as in the -e option.RSYNC_PROXYThe RSYNC_PROXY environment variable allows you to redirect your rsync client to use a web proxy when connecting to a rsync dae‐mon. You should set RSYNC_PROXY to a hostname:port pair.RSYNC_PASSWORDSetting RSYNC_PASSWORD to the required password allows you to run authenticated rsync connections to an rsync daemon without userintervention. Note that this does not supply a password to a remote shell transport such as ssh; to learn how to do that, consultthe remote shell’s documentation.USER or LOGNAMEThe USER or LOGNAME environment variables are used to determine the default username sent to an rsync daemon. If neither is set,the username defaults to "nobody".HOME The HOME environment variable is used to find the user’s default .cvsignore file.FILES/etc/rsyncd.conf or rsyncd.confSEE ALSOrsyncd.conf(5)VERSIONThis man page is current for version 3.0.9 of rsync.INTERNAL OPTIONSThe options --server and --sender are used internally by rsync, and should never be typed by a user under normal circumstances. Someawareness of these options may be needed in certain scenarios, such as when setting up a login that can only run an rsync command. Forinstance, the support directory of the rsync distribution has an example script named rrsync (for restricted rsync) that can be used witha restricted ssh login.
?
轉(zhuǎn)載于:https://www.cnblogs.com/jiangzhaowei/p/8191003.html
總結(jié)
以上是生活随笔為你收集整理的rsync(六)命令中文手册的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 三十四 Python分布式爬虫打造搜索
- 下一篇: 敏捷管理之绩效考核方案