·rsync全稱remote sync,是Unix/Linux一款優秀的複製工具,能夠實現cp和scp的功能,可是rsync在實現跨主機複製時,並無加密功能,因此在遠程複製時,須要ssh來承載rsync,可是rsync比起cp和scp來,有一個很顯著個特性,那就是快,這個快並非說在複製過程當中的傳輸速率高,而是rsync在複製的過程當中,會比較源文件和目標文件的特徵碼,若是特徵碼一致,就不復制.
mysql
·rsync有4中工做模式:linux
第一種:shell模式,也稱做本地模式,在本地複製文件的.web
第二種:遠程shell模式,使用ssh(rsh)協議進行鏈接.sql
第三種:列表模式,其工做模式相似ls,僅列出源內容shell
第四種:服務器模式,esync能夠工做爲守護進程,可以接受客戶端的數據傳輸請求,直接使用tcp協議進行鏈接,並監聽在873端口vim
·遠程shell模式和服務器模式的區別:bash
遠程shell模式 | 服務器模式 |
rsync使用遠程shell模式傳輸時:服務器 1.源路徑或目的路徑的主機名後面包含一個冒號分隔符.網絡 2.鏈接遠程主機時,不須要啓動服務,不須要配置文件.ssh 3.鏈接遠程主機時使用ssh做爲傳輸工具 |
rsync使用服務器模式傳輸時: 1.源路徑或目的路徑的主機名後面包含兩個冒號分,或使用rsync://URL 2.鏈接遠程主機時,需驗證身份,需rsync的配置文件,以及目標文件和源文件的讀寫權限,而後啓動一個服務進程, 3.鏈接遠程主機時使用tcp協議並監聽在873端口 |
不要把服務器和服務器模式混淆了,服務器模式必定有服務器,有服務器的不必定就的服務器模式,遠程shell也有服務器,但不是服務器模式. |
·rsync命令選項:
-n,--dry-run : 僅僅測試,並不真正的執行 -v,--verbose : 詳細輸出模式 -q,--quiet : 靜默模式 -c,--checksum : 開啓校驗功能,強制對文件傳輸進行校驗 -r,--recursive : 遞歸複製,通常只有複製目錄時纔有用 -a,--archives : 歸檔,保留文件的原有屬性,包括擴展屬性,訪問控制列表等 -p,--perms : 保留文件的權限 -t,--times : 保留文件的時間戳 -l,--links :保留文件的符號連接 -g,--group : 保留文件的屬組 -o,--owner : 保留文件的屬主 -D,--devices :保留設備文件 -rptlgo : 組合起來至關於-a -e ssh(rsh) : 表示使用ssh協議做承載 -z : 基於網絡傳輸,使用對文件壓縮後傳輸 --progress :顯示進度條 --stats : 顯示如何執行壓縮和傳輸
·注意:
rsync命令使用中,若是源參數的末尾有斜線,就會複製指定目錄內的內容,而不復制目錄自己,沒有斜線,則會複製目錄自己,目標參數末尾的斜線沒有做用,以下例子:
[root@www tmp]# rm -rf test/ [root@www tmp]# mkdir test [root@www tmp]# rsync -r etc test/ #這裏的複製是不加斜線的,爲了和下面作對比,會複製目錄自己 [root@www tmp]# cd test/ [root@www test]# ls etc ------------------------------------------------------------------------------------- [root@www tmp]#rm -rf test/ [root@www tmp]# mkdir test [root@www tmp]# rsync -r etc/ test/ #這裏的複製是加斜線的,爲了和上面的對比,僅複製目錄內的內容 [root@www tmp]# cd test/ [root@www test]# ls abrt fonts mke2fs.conf rpc ... fcoe makedev.d request-key.d yum.repos.d ...
# rsync -r /mydata/data /backups/ : 會把目錄data直接同步至/backups目錄中 # rsync -r /mydata/data/ /backups/: 會把目錄data/中的內容的同步至/backups目錄中
示例:
1.本地模式
[root@www ~]# cp -r /etc /tmp/ #準備測試數據 [root@www tmp]# mkdir test #同上 [root@www tmp]# rsync etc/passwd test/ -n #測試可否同步 [root@www tmp]# rsync etc/passwd test/ #執行同步 [root@www tmp]# ls test/ #查看是否同步過去了 passwd [root@www tmp]# rsync etc/passwd test/ -nv #查看顯示的詳細信息 passwd sent 30 bytes received 15 bytes 90.00 bytes/sec total size is 2337 speedup is 51.93 (DRY RUN)
2.shell模式:把 172.16.21.2的文件推送到172.16.21.1服務器上去
[root@www test]# rsync -e ssh -r /tmp/etc root@172.16.21.1:/tmp #注意格式 ####rsync -e ssh -r /tmp/etc root@172.16.21.1:/tmp --progress ##顯示每一個文件的傳輸進度的 The authenticity of host '172.16.21.1 (172.16.21.1)' can't be established. RSA key fingerprint is 15:03:48:51:95:07:ac:2b:1d:c7:0e:e6:e1:43:be:6d. Are you sure you want to continue connecting (yes/no)? yrs Please type 'yes' or 'no': yes Warning: Permanently added '172.16.21.1' (RSA) to the list of known hosts. root@172.16.21.1's password: -------------------------------------------------------------------------- 到172.16.21.1服務器上去查看 [root@www ~]# ls /tmp #推送過來了 etc ks-script-j1sUcU ...
3.shell模式:拉取服務器的內容到本地
[root@www test]# rsync -e ssh -r root@172.16.21.1:/etc/pam.d ./ root@172.16.21.1's password: [root@www test]# ls pam.d/ #同步到本地了 atd gdm-fingerprint remote system-auth-ac ... eject polkit-1 su vsftpd.mysql ...
服務器模式:
服務器端:192.168.112.136
客戶端:192.168.112.134
vim /etc/xinetd.d/rsyn
service rsync { disable = no #這裏改爲no flags = IPv6 socket_type = stream wait = no user = root server = /usr/bin/rsync server_args = --daemon log_on_failure += USERID }
uid=nobody #使用哪一個用戶運行該程序 gid=nobody #使用哪一個組運行該程序 use chroot=no max connections=10 #這裏的複製大可能是IO操做,因此10也算高的了 strict modes =yes pid file=/var/run/rsyncd.pid log file=/var/log/rsyncd.log [test1] path=/tmp/web ignore errors = yes read only =no write only = no host allow = * uid = root gid = root
注意防火牆和SElinux的問題.
能夠把線上的web當成服務器端,要發佈新內容的時候,先把內容寫到客戶端,而後就能夠同步到服務器端了.
rsync -av --progress web/ 192.168.112.136::test1