如何使用Linux的rsync
一、簡(jiǎn)介
rsync 是一個(gè)常用的 Linux 應(yīng)用程序,用于文件同步。
它可以在本地計(jì)算機(jī)與遠(yuǎn)程計(jì)算機(jī)之間,或者兩個(gè)本地目錄之間同步文件(但不支持兩臺(tái)遠(yuǎn)程計(jì)算機(jī)之間的同步)。它也可以當(dāng)作文件復(fù)制工具,替代cp
和mv
命令。
它名稱(chēng)里面的r
指的是 remote,rsync 其實(shí)就是"遠(yuǎn)程同步"(remote sync)的意思。與其他文件傳輸工具(如 FTP 或 scp)不同,rsync 的最大特點(diǎn)是會(huì)檢查發(fā)送方和接收方已有的文件,僅傳輸有變動(dòng)的部分(默認(rèn)規(guī)則是文件大小或修改時(shí)間有變動(dòng))。
二、安裝
如果本機(jī)或者遠(yuǎn)程計(jì)算機(jī)沒(méi)有安裝 rsync,可以用下面的命令安裝。
# Debian
$ sudo apt-get install rsync
# Red Hat
$ sudo yum install rsync
# Arch Linux
$ sudo pacman -S rsync
注意,傳輸?shù)碾p方都必須安裝 rsync。
三、基本用法
3.1、-r參數(shù)
本機(jī)使用 rsync 命令時(shí),可以作為cp
和mv
命令的替代方法,將源目錄同步到目標(biāo)目錄。
$ rsync -r source destination
上面命令中,-r
表示遞歸,即包含子目錄。注意,-r
是必須的,否則 rsync 運(yùn)行不會(huì)成功。source
目錄表示源目錄,destination
表示目標(biāo)目錄。
如果有多個(gè)文件或目錄需要同步,可以寫(xiě)成下面這樣。
$ rsync -r source1 source2 destination
上面命令中,source1
、source2
都會(huì)被同步到destination
目錄。
3.2、-a參數(shù)
-a
參數(shù)可以替代-r
,除了可以遞歸同步以外,還可以同步元信息(比如修改時(shí)間、權(quán)限等)。由于 rsync 默認(rèn)使用文件大小和修改時(shí)間決定文件是否需要更新,所以-a
比-r
更有用。下面的用法才是常見(jiàn)的寫(xiě)法。
$ rsync -a source destination
目標(biāo)目錄destination
如果不存在,rsync 會(huì)自動(dòng)創(chuàng)建。執(zhí)行上面的命令后,源目錄source
被完整地復(fù)制到了目標(biāo)目錄destination
下面,即形成了destination/source
的目錄結(jié)構(gòu)。
如果只想同步源目錄source
里面的內(nèi)容到目標(biāo)目錄destination
,則需要在源目錄后面加上斜杠。
$ rsync -a source/ destination
上面命令執(zhí)行后,source
目錄里面的內(nèi)容,就都被復(fù)制到了destination
目錄里面,并不會(huì)在destination
下面創(chuàng)建一個(gè)source
子目錄。
3.3、-n參數(shù)
如果不確定 rsync 執(zhí)行后會(huì)產(chǎn)生什么結(jié)果,可以先用-n
或--dry-run
參數(shù)模擬執(zhí)行的結(jié)果。
$ rsync -anv source/ destination
上面命令中,-n
參數(shù)模擬命令執(zhí)行的結(jié)果,并不真的執(zhí)行命令。-v
參數(shù)則是將結(jié)果輸出到終端,這樣就可以看到哪些內(nèi)容會(huì)被同步。
3.4、--delete 參數(shù)
默認(rèn)情況下,rsync 只確保源目錄的所有內(nèi)容(明確排除的文件除外)都復(fù)制到目標(biāo)目錄。它不會(huì)使兩個(gè)目錄保持相同,并且不會(huì)刪除文件。如果要使得目標(biāo)目錄成為源目錄的鏡像副本,則必須使用--delete
參數(shù),這將刪除只存在于目標(biāo)目錄、不存在于源目錄的文件。
$ rsync -av --delete source/ destination
上面命令中,--delete
參數(shù)會(huì)使得destination
成為source
的一個(gè)鏡像。
四、排除文件
4.1、--exclude 參數(shù)
有時(shí),我們希望同步時(shí)排除某些文件或目錄,這時(shí)可以用--exclude
參數(shù)指定排除模式。
$ rsync -av --exclude='*.txt' source/ destination
# 或者
$ rsync -av --exclude '*.txt' source/ destination
上面命令排除了所有 TXT 文件。
注意,rsync 會(huì)同步以"點(diǎn)"開(kāi)頭的隱藏文件,如果要排除隱藏文件,可以這樣寫(xiě)--exclude=".*"
。
如果要排除某個(gè)目錄里面的所有文件,但不希望排除目錄本身,可以寫(xiě)成下面這樣。
$ rsync -av --exclude 'dir1/*' source/ destination
多個(gè)排除模式,可以用多個(gè)--exclude
參數(shù)。
$ rsync -av --exclude 'file1.txt' --exclude 'dir1/*' source/ destination
多個(gè)排除模式也可以利用 Bash 的大擴(kuò)號(hào)的擴(kuò)展功能,只用一個(gè)--exclude
參數(shù)。
$ rsync -av --exclude={'file1.txt','dir1/*'} source/ destination
如果排除模式很多,可以將它們寫(xiě)入一個(gè)文件,每個(gè)模式一行,然后用--exclude-from
參數(shù)指定這個(gè)文件。
$ rsync -av --include="*.txt" --exclude='*' source/ destination
4.2、--include 參數(shù)
--include
參數(shù)用來(lái)指定必須同步的文件模式,往往與--exclude
結(jié)合使用。
$ rsync -av --include="*.txt" --exclude='*' source/ destination
上面命令指定同步時(shí),排除所有文件,但是會(huì)包括 TXT 文件。
五、遠(yuǎn)程同步
5.1、SSH 協(xié)議
rsync 除了支持本地兩個(gè)目錄之間的同步,也支持遠(yuǎn)程同步。它可以將本地內(nèi)容,同步到遠(yuǎn)程服務(wù)器。
$ rsync -av source/ username@remote_host:destination
也可以將遠(yuǎn)程內(nèi)容同步到本地。
$ rsync -av username@remote_host:source/ destination
rsync 默認(rèn)使用 SSH 進(jìn)行遠(yuǎn)程登錄和數(shù)據(jù)傳輸。
由于早期 rsync 不使用 SSH 協(xié)議,需要用-e
參數(shù)指定協(xié)議,后來(lái)才改的。所以,下面-e ssh
可以省略。
$ rsync -av -e ssh source/ user@remote_host:/destination
但是,如果 ssh 命令有附加的參數(shù),則必須使用-e
參數(shù)指定所要執(zhí)行的 SSH 命令。
$ rsync -av -e 'ssh -p 2234' source/ user@remote_host:/destination
上面命令中,-e
參數(shù)指定 SSH 使用2234端口。
5.2、rsync 協(xié)議
除了使用 SSH,如果另一臺(tái)服務(wù)器安裝并運(yùn)行了 rsync 守護(hù)程序,則也可以用rsync://
協(xié)議(默認(rèn)端口873)進(jìn)行傳輸。具體寫(xiě)法是服務(wù)器與目標(biāo)目錄之間使用雙冒號(hào)分隔::
。
$ rsync -av source/ 192.168.122.32::module/destination
注意,上面地址中的module
并不是實(shí)際路徑名,而是 rsync 守護(hù)程序指定的一個(gè)資源名,由管理員分配。
如果想知道 rsync 守護(hù)程序分配的所有 module 列表,可以執(zhí)行下面命令。
$ rsync rsync://192.168.122.32
rsync 協(xié)議除了使用雙冒號(hào),也可以直接用rsync://
協(xié)議指定地址。
$ rsync -av source/ rsync://192.168.122.32/module/destination
六、增量備份
rsync 的最大特點(diǎn)就是它可以完成增量備份,也就是默認(rèn)只復(fù)制有變動(dòng)的文件。
除了源目錄與目標(biāo)目錄直接比較,rsync 還支持使用基準(zhǔn)目錄,即將源目錄與基準(zhǔn)目錄之間變動(dòng)的部分,同步到目標(biāo)目錄。
具體做法是,第一次同步是全量備份,所有文件在基準(zhǔn)目錄里面同步一份。以后每一次同步都是增量備份,只同步源目錄與基準(zhǔn)目錄之間有變動(dòng)的部分,將這部分保存在一個(gè)新的目標(biāo)目錄。這個(gè)新的目標(biāo)目錄之中,也是包含所有文件,但實(shí)際上,只有那些變動(dòng)過(guò)的文件是存在于該目錄,其他沒(méi)有變動(dòng)的文件都是指向基準(zhǔn)目錄文件的硬鏈接。
--link-dest
參數(shù)用來(lái)指定同步時(shí)的基準(zhǔn)目錄。
$ rsync -a --delete --link-dest /compare/path /source/path /target/path
上面命令中,--link-dest
參數(shù)指定基準(zhǔn)目錄/compare/path
,然后源目錄/source/path
跟基準(zhǔn)目錄進(jìn)行比較,找出變動(dòng)的文件,將它們拷貝到目標(biāo)目錄/target/path
。那些沒(méi)變動(dòng)的文件則會(huì)生成硬鏈接。這個(gè)命令的第一次備份時(shí)是全量備份,后面就都是增量備份了。
下面是一個(gè)腳本示例,備份用戶的主目錄。
#!/bin/bash # A script to perform incremental backups using rsync set -o errexit set -o nounset set -o pipefail readonly SOURCE_DIR="${HOME}" readonly BACKUP_DIR="/mnt/data/backups" readonly DATETIME="$(date '+%Y-%m-%d_%H:%M:%S')" readonly BACKUP_PATH="${BACKUP_DIR}/${DATETIME}" readonly LATEST_LINK="${BACKUP_DIR}/latest" mkdir -p "${BACKUP_DIR}" rsync -av --delete \ "${SOURCE_DIR}/" \ --link-dest "${LATEST_LINK}" \ --exclude=".cache" \ "${BACKUP_PATH}" rm -rf "${LATEST_LINK}" ln -s "${BACKUP_PATH}" "${LATEST_LINK}"
上面腳本中,每一次同步都會(huì)生成一個(gè)新目錄${BACKUP_DIR}/${DATETIME}
,并將軟鏈接${BACKUP_DIR}/latest
指向這個(gè)目錄。下一次備份時(shí),就將${BACKUP_DIR}/latest
作為基準(zhǔn)目錄,生成新的備份目錄。最后,再將軟鏈接${BACKUP_DIR}/latest
指向新的備份目錄。
七、配置項(xiàng)
-a
、--archive
參數(shù)表示存檔模式,保存所有的元數(shù)據(jù),比如修改時(shí)間(modification time)、權(quán)限、所有者等,并且軟鏈接也會(huì)同步過(guò)去。
--append
參數(shù)指定文件接著上次中斷的地方,繼續(xù)傳輸。
--append-verify
參數(shù)跟--append
參數(shù)類(lèi)似,但會(huì)對(duì)傳輸完成后的文件進(jìn)行一次校驗(yàn)。如果校驗(yàn)失敗,將重新發(fā)送整個(gè)文件。
-b
、--backup
參數(shù)指定在刪除或更新目標(biāo)目錄已經(jīng)存在的文件時(shí),將該文件更名后進(jìn)行備份,默認(rèn)行為是刪除。更名規(guī)則是添加由--suffix
參數(shù)指定的文件后綴名,默認(rèn)是~
。
--backup-dir
參數(shù)指定文件備份時(shí)存放的目錄,比如--backup-dir=/path/to/backups
。
--bwlimit
參數(shù)指定帶寬限制,默認(rèn)單位是 KB/s,比如--bwlimit=100
。
-c
、--checksum
參數(shù)改變rsync
的校驗(yàn)方式。默認(rèn)情況下,rsync 只檢查文件的大小和最后修改日期是否發(fā)生變化,如果發(fā)生變化,就重新傳輸;使用這個(gè)參數(shù)以后,則通過(guò)判斷文件內(nèi)容的校驗(yàn)和,決定是否重新傳輸。
--delete
參數(shù)刪除只存在于目標(biāo)目錄、不存在于源目標(biāo)的文件,即保證目標(biāo)目錄是源目標(biāo)的鏡像。
-e
參數(shù)指定使用 SSH 協(xié)議傳輸數(shù)據(jù)。
--exclude
參數(shù)指定排除不進(jìn)行同步的文件,比如--exclude="*.iso"
。
--exclude-from
參數(shù)指定一個(gè)本地文件,里面是需要排除的文件模式,每個(gè)模式一行。
--existing
、--ignore-non-existing
參數(shù)表示不同步目標(biāo)目錄中不存在的文件和目錄。
-h
參數(shù)表示以人類(lèi)可讀的格式輸出。
-h
、--help
參數(shù)返回幫助信息。
-i
參數(shù)表示輸出源目錄與目標(biāo)目錄之間文件差異的詳細(xì)情況。
--ignore-existing
參數(shù)表示只要該文件在目標(biāo)目錄中已經(jīng)存在,就跳過(guò)去,不再同步這些文件。
--include
參數(shù)指定同步時(shí)要包括的文件,一般與--exclude
結(jié)合使用。
--link-dest
參數(shù)指定增量備份的基準(zhǔn)目錄。
-m
參數(shù)指定不同步空目錄。
--max-size
參數(shù)設(shè)置傳輸?shù)淖畲笪募拇笮∠拗?,比如不超過(guò)200KB(--max-size='200k'
)。
--min-size
參數(shù)設(shè)置傳輸?shù)淖钚∥募拇笮∠拗疲热绮恍∮?0KB(--min-size=10k
)。
-n
參數(shù)或--dry-run
參數(shù)模擬將要執(zhí)行的操作,而并不真的執(zhí)行。配合-v
參數(shù)使用,可以看到哪些內(nèi)容會(huì)被同步過(guò)去。
-P
參數(shù)是--progress
和--partial
這兩個(gè)參數(shù)的結(jié)合。
--partial
參數(shù)允許恢復(fù)中斷的傳輸。不使用該參數(shù)時(shí),rsync
會(huì)刪除傳輸?shù)揭话氡淮驍嗟奈募?;使用該參?shù)后,傳輸?shù)揭话氲奈募矔?huì)同步到目標(biāo)目錄,下次同步時(shí)再恢復(fù)中斷的傳輸。一般需要與--append
或--append-verify
配合使用。
--partial-dir
參數(shù)指定將傳輸?shù)揭话氲奈募4娴揭粋€(gè)臨時(shí)目錄,比如--partial-dir=.rsync-partial
。一般需要與--append
或--append-verify
配合使用。
--progress
參數(shù)表示顯示進(jìn)展。
-r
參數(shù)表示遞歸,即包含子目錄。
--remove-source-files
參數(shù)表示傳輸成功后,刪除發(fā)送方的文件。
--size-only
參數(shù)表示只同步大小有變化的文件,不考慮文件修改時(shí)間的差異。
--suffix
參數(shù)指定文件名備份時(shí),對(duì)文件名添加的后綴,默認(rèn)是~
。
-u
、--update
參數(shù)表示同步時(shí)跳過(guò)目標(biāo)目錄中修改時(shí)間更新的文件,即不同步這些有更新的時(shí)間戳的文件。
-v
參數(shù)表示輸出細(xì)節(jié)。-vv
表示輸出更詳細(xì)的信息,-vvv
表示輸出最詳細(xì)的信息。
--version
參數(shù)返回 rsync 的版本。
-z
參數(shù)指定同步時(shí)壓縮數(shù)據(jù)。
以上就是如何使用Linux的rsync的詳細(xì)內(nèi)容,更多關(guān)于Linux rsync的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
- Linux利用inotify和rsync服務(wù)實(shí)現(xiàn)數(shù)據(jù)實(shí)時(shí)同步的原理解析
- Linux 通過(guò)Rsync+Inotify實(shí)現(xiàn)本、異地遠(yuǎn)程數(shù)據(jù)實(shí)時(shí)同步功能
- Linux下使用Rsync完成自動(dòng)化備份
- Linux下sersync數(shù)據(jù)實(shí)時(shí)同步
- linux下通過(guò)xinetd服務(wù)管理 rsync 實(shí)現(xiàn)開(kāi)機(jī)自啟動(dòng)
- Linux下rsync(本地、遠(yuǎn)程)文件同步方式
相關(guān)文章
Linux中使用命令more,less,cat查看文件內(nèi)容
今天小編就為大家分享一篇關(guān)于Linux中使用命令more,less,cat查看文件內(nèi)容,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2019-03-03CentOS7系統(tǒng)增加swap的操作方法實(shí)例
這篇文章主要給大家介紹了關(guān)于CentOS7系統(tǒng)增加swap的操作方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者使用CentOS7系統(tǒng)具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-10-10linux系統(tǒng)報(bào)tcp_mark_head_lost錯(cuò)誤的處理方法
這篇文章主要給大家介紹了關(guān)于linux系統(tǒng)報(bào)tcp_mark_head_lost錯(cuò)誤的處理方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用linux系統(tǒng)具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-07-07SSH端口轉(zhuǎn)發(fā)實(shí)現(xiàn)內(nèi)網(wǎng)穿透的實(shí)現(xiàn)
這篇文章主要介紹了SSH端口轉(zhuǎn)發(fā)實(shí)現(xiàn)內(nèi)網(wǎng)穿透的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-08-08linux中Centos7的LVM磁盤(pán)擴(kuò)容問(wèn)題
本篇文章給大家詳細(xì)介紹了在linux中Centos7的LVM磁盤(pán)擴(kuò)容問(wèn)題,以及注意點(diǎn)做了分享,需要的朋友分享下吧。2018-02-02linux兩臺(tái)服務(wù)器實(shí)現(xiàn)自動(dòng)同步文件
這篇文章主要介紹了linux兩臺(tái)服務(wù)器實(shí)現(xiàn)自動(dòng)同步文件,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-08-08ubuntu 16.04 LTS 安裝mongodb 3.2.8教程
本篇文章主要介紹了ubuntu 16.04 LTS 安裝mongodb 3.2.8教程,具有一定的參考價(jià)值,有需要的可以了解一下。2017-04-04