Linux中rsync命令使用方式
一、rsync簡(jiǎn)介
rsync 是一種高效的文件復(fù)制和同步工具,常用于在本地或遠(yuǎn)程計(jì)算機(jī)之間同步文件和目錄
主要特性:
增量同步:rsync 會(huì)檢測(cè)源和目標(biāo)文件之間的差異,只傳輸發(fā)生變化的部分,而不是重新傳輸整個(gè)文件。這樣就能有效減少數(shù)據(jù)傳輸量。
支持遠(yuǎn)程同步:rsync 可以通過(guò) SSH、RSH 或者 rsync 自身的協(xié)議在遠(yuǎn)程服務(wù)器之間傳輸文件。
文件壓縮:可以在傳輸過(guò)程中啟用壓縮選項(xiàng),減少網(wǎng)絡(luò)帶寬的使用。
文件權(quán)限、時(shí)間戳和符號(hào)鏈接的保留:rsync 支持保留文件的權(quán)限、時(shí)間戳、符號(hào)鏈接等文件屬性。
支持排除規(guī)則:可以通過(guò)排除規(guī)則,指定哪些文件或目錄不被同步。
支持?jǐn)帱c(diǎn)續(xù)傳:在傳輸過(guò)程中斷開(kāi)連接后,rsync 可以從斷點(diǎn)繼續(xù)傳輸數(shù)據(jù),而不需要重新開(kāi)始。
二、rsync本地模式和遠(yuǎn)程模式
1、命令說(shuō)明
通過(guò)rsync的命令,來(lái)實(shí)現(xiàn),數(shù)據(jù)目錄A 拷貝到數(shù)據(jù)目錄B
語(yǔ)法:rsync [選項(xiàng)] 源數(shù)據(jù) 目的數(shù)據(jù)
2、安裝
centos: yum install rsync -y ubuntu: apt-get install rsync
3、命令語(yǔ)法,分幾個(gè)模式
- 本地模式
rsync 參數(shù) 源路徑 目標(biāo)路徑
rsync -xxxxx /var/log /tmp
- 遠(yuǎn)程模式,推送方式,把自己的數(shù)據(jù)推送到另一臺(tái)機(jī)器上(上傳)
語(yǔ)法1 ,rsync默認(rèn)走ssh協(xié)議
rsync 參數(shù) 源路徑 user@ip:目標(biāo)路徑
例如:
rsync -avzP /var/log/ root@10.0.0.31:/tmp/
語(yǔ)法2
rsync 參數(shù) 源路徑 user@ip::目標(biāo)路徑
- 遠(yuǎn)程模式,拉取方式,拉取別人機(jī)器的數(shù)據(jù)到自己的機(jī)器上(下載)
- rsync 參數(shù) user@ip:源路徑 目標(biāo)路徑
- rsync 參數(shù) user@ip::源路徑目標(biāo)路徑
例如:
rsync -avzP root@10.0.0.31:/var/log/ /tmp/
參數(shù)解釋?zhuān)?/strong>
-v
詳細(xì)模式輸出-a
歸檔模式,遞歸的方式傳輸文件,并保持文件的屬性,等同于 -rlptgoD-r
遞歸拷貝目錄-l
保留軟鏈接-p
保留原有權(quán)限-t
保留原有時(shí)間(修改)-g
保留屬組權(quán)限-o
保留屬主權(quán)限-D
等于--devices --specials 表示支持b,c,s,p類(lèi)型的文件-R
保留相對(duì)路徑-H
保留硬鏈接-A
保留ACL策略-e
指定要執(zhí)行的遠(yuǎn)程shell命令-E
保留可執(zhí)行權(quán)限-X
保留擴(kuò)展屬性信息 a屬性
比較常用的組合參數(shù)
rsync -avzP
-a
保持文件原有屬性-v
顯示傳輸細(xì)節(jié)情況-z
對(duì)傳輸數(shù)據(jù)壓縮傳輸-P
顯示文件傳輸?shù)倪M(jìn)度信息
你在命令行里,執(zhí)行命令,如果喜歡看到命令的執(zhí)行過(guò)程 ,則使用
-avzP
腳本里面?則使用
bash xxx.sh rsync -az
4、本地模式
linux機(jī)器本身,數(shù)據(jù)來(lái)回發(fā)送
# 后面cp命令可以不用了,用rsync當(dāng)作cp使用
# /var/log/50G cp /var/log/ /tmp/ touch /var/log/new1.file cp /var/log/ /tmp/
# 用rsync,支持增量備份 # /var/log/50G
rsync -avzP /var/log/ /tmp/ touch /var/log/new1.file rsync -avzP /var/log/ /tmp/
4.1 對(duì)文件同步
把本地的的/var/log/messages 文件 拷貝到/opt下 拷貝單個(gè)文件 [rsync-41 root ~] # rsync -avzP /var/log/messages /opt sending incremental file list messages 247,040 100% 51.09MB/s 0:00:00 (xfr#1, to-chk=0/1) sent 28,823 bytes received 35 bytes 57,716.00 bytes/sec total size is 247,040 speedup is 8.56 拷貝單個(gè)大文件,拷貝大文件時(shí),要注意限速,否則占用磁盤(pán)IO太多 --bwlimit=10 先生成一個(gè)5G文件 dd bs=100M count=50 if=/dev/zero of=/var/log/my_self.log [rsync-41 root ~] # [rsync-41 root ~] # dd bs=100M count=50 if=/dev/zero of=/var/log/my_self.log 50+0 records in 50+0 records out 5242880000 bytes (5.2 GB) copied, 47.1259 s, 111 MB/s rsync -avzP /var/log/my_self.log /opt iotop查看磁盤(pán)的讀寫(xiě)IO情況 限制單個(gè)大文件的傳輸,速度只給他20M每秒 [rsync-41 root ~] # rsync -avzP --bwlimit=20 /var/log/my_self.log /opt sending incremental file list my_self.log 3,957,981,184 75% 20.12MB/s 0:01:02
4.2 對(duì)同步目錄(注意語(yǔ)法的區(qū)別)
拷貝后的數(shù)據(jù),是否攜帶該目錄本身 [rsync-41 root ~] # rsync -avzP /var/log /opt sending incremental file list log/ log/boot.log 8,382 100% 0.00kB/s 0:00:00 (xfr#1, to-chk=53/55) log/boot.log-20241203 8,973 100% 8.56MB/s 0:00:00 (xfr#2, to-chk=52/55) log/boot.log-20250104 16,793 100% 5.34MB/s 0:00:00 (xfr#3, to-chk=51/55) ...... [rsync-41 root ~] # [rsync-41 root ~] # ls -lh /opt/ total 4.9G drwxr-xr-x 7 root root 4.0K Jan 6 11:04 log -rw------- 1 root root 242K Jan 6 10:54 messages -rw-r--r-- 1 root root 4.9G Jan 6 10:55 my_self.log 不拷貝該目錄本身,拷貝目錄下的數(shù)據(jù) [rsync-41 root ~] # rsync -avzP /var/log/ /opt sending incremental file list ./ boot.log 8,382 100% 0.00kB/s 0:00:00 (xfr#1, to-chk=53/55) boot.log-20241203 8,973 100% 8.56MB/s 0:00:00 (xfr#2, to-chk=52/55) boot.log-20250104 ...... [rsync-41 root ~] # ls -lh /opt/ total 4.9G drwxr-xr-x 2 root root 232 Dec 2 16:13 anaconda drwx------ 2 root root 23 Dec 2 16:37 audit -rw------- 1 root root 11K Jan 6 11:04 cron -rw------- 1 root root 21K Jan 4 18:38 cron-20250104 -rw-r--r-- 1 root root 286K Jan 6 10:55 lastlog drwxr-xr-x 7 root root 4.0K Jan 6 11:04 log -rw------- 1 root root 184 Jan 6 10:28 maillog -rw------- 1 root root 564 Jan 4 17:09 maillog-20250104 -rw------- 1 root root 254K Jan 6 11:04 messages -rw------- 1 root root 833K Jan 4 18:37 messages-20250104 -rw-r--r-- 1 root root 4.9G Jan 6 10:55 my_self.log .... 測(cè)試文件夾的增量拷貝 [rsync-41 root ~] # mkdir /test1 [rsync-41 root ~] # rsync -avzP /test1/ /test2 sending incremental file list ./ sent 43 bytes received 19 bytes 124.00 bytes/sec total size is 0 speedup is 0.00 [rsync-41 root ~] # echo "123" >/test1/1.png [rsync-41 root ~] # rsync -avzP /test1/ /test2 sending incremental file list ./ 1.png 4 100% 0.00kB/s 0:00:00 (xfr#1, to-chk=0/2) sent 111 bytes received 38 bytes 298.00 bytes/sec total size is 4 speedup is 0.03 [rsync-41 root ~] # ls -lh /test2/ total 4.0K -rw-r--r-- 1 root root 4 Jan 6 11:10 1.png [rsync-41 root ~] #
4.3 無(wú)差異化拷貝
使用--delete參數(shù) 將目標(biāo)目錄的數(shù)據(jù)清空,保證完全和源目錄的數(shù)據(jù)一致
[rsync-41 root ~] # ls /test1/ 1.png 2.png 3.png 4.png 5.png [rsync-41 root ~] # [rsync-41 root ~] # ls /test2/ 1.png [rsync-41 root ~] # [rsync-41 root ~] # rsync -azvP --delete /test1/ /test2/ sending incremental file list ./ 1.png 4 100% 0.00kB/s 0:00:00 (xfr#1, to-chk=4/6) 2.png 0 100% 0.00kB/s 0:00:00 (xfr#2, to-chk=3/6) 3.png 0 100% 0.00kB/s 0:00:00 (xfr#3, to-chk=2/6) 4.png 0 100% 0.00kB/s 0:00:00 (xfr#4, to-chk=1/6) 5.png 0 100% 0.00kB/s 0:00:00 (xfr#5, to-chk=0/6) sent 319 bytes received 114 bytes 866.00 bytes/sec total size is 4 speedup is 0.01 [rsync-41 root ~] # ls /test1/ 1.png 2.png 3.png 4.png 5.png [rsync-41 root ~] # ls /test2/ 1.png 2.png 3.png 4.png 5.png # rsync拷貝文件夾,攜帶目錄本身 # 把test1目錄本身,連帶著數(shù)據(jù),都拷貝到test2下 rsync -avzP /test1 /test2/ 最終會(huì)生成 /test2/test1/ 該文件夾的數(shù)據(jù),和源數(shù)據(jù)目錄 /test1是一樣的
注:對(duì)rsync限速,因?yàn)閞sync在傳輸數(shù)據(jù)時(shí),會(huì)占用大量的磁盤(pán)IO,以及如果是網(wǎng)絡(luò)傳輸?shù)脑?huà),占用網(wǎng)絡(luò)帶寬,會(huì)導(dǎo)致其他程序受影響
所以rsync這樣的備份服務(wù),都是在夜里,凌晨操作,被影響其他程序
--bwlimit
5、遠(yuǎn)程模式
將/root下的數(shù)據(jù),拷貝到/tmp下面
- 把rsync-41 /root下的數(shù)據(jù)
- 拷貝到 nfs-31 /tmp下
使用rsync命令實(shí)現(xiàn)如scp的作用
# PUSH 推送模式,上傳模式 把rsync-41 /root下的數(shù)據(jù),拷貝到 nfs-31 /tmp下 登錄rsync41 用ip形式、再用主機(jī)名形式 添加無(wú)差異化參數(shù),該參數(shù),慎用!搞清楚了自己在做什么! rsync -avzP --delete /root/ root@172.16.1.31:/tmp/
rsync同步后,nfs-31機(jī)器/tmp目錄下面文件就變成rsync-41 /root下的數(shù)據(jù)了
# PULL 拉取模式(需要確定,數(shù)據(jù)最終放在了哪) # 把rsync-41 /root下的數(shù)據(jù),拷貝到 nfs-31 /tmp下 rsync -avzP root@172.16.1.41:/root/ /tmp/
注意:
# 不同主機(jī)之間同步數(shù)據(jù) --delete rsync -avzP --delete root@172.16.1.41:/root /tmp/ #坑:如果/和一個(gè)空目錄進(jìn)行完全同步,那么效果和刪根一樣 # 坑:傳輸過(guò)程不限速導(dǎo)致帶寬被占滿(mǎn) ,--bwlimit=50 遠(yuǎn)程傳輸 nfs-31下的 /tmp/2G.log 備份到 rsync-41的/opt下 rsync -avzP /tmp/2G.log root@172.16.1.41:/opt
-a
保持文件原有屬性-v
顯示傳輸過(guò)程-z
壓縮傳輸數(shù)據(jù)-P
顯示傳輸進(jìn)度
遠(yuǎn)程備份文件,并重命名
遠(yuǎn)程傳輸 nfs-31下的 /tmp/2G.log 備份到 rsync-41的/opt下,且是無(wú)差異化備份 等于清空原有/opt下的數(shù)據(jù) [nfs-31 root ~] # rsync -avzP /tmp/2G.log root@172.16.1.41:/opt/2G.log root@172.16.1.41's password: sending incremental file list 2G.log 0 100% 0.00kB/s 0:00:00 (xfr#1, to-chk=0/1) sent 84 bytes received 35 bytes 47.60 bytes/sec total size is 0 speedup is 0.00 [nfs-31 root ~] # [rsync-41 root ~] # ls /opt/ vmware-network.3.log vmware-network.3.log2 [rsync-41 root ~] # [rsync-41 root ~] # [rsync-41 root ~] # ls anaconda-ks.cfg network.sh
三、rsync服務(wù)模式-服務(wù)端配置
1、為什么需要服務(wù)模式
Rsync 借助 SSH 協(xié)議同步數(shù)據(jù)存在的缺陷:
(1).使用系統(tǒng)用戶(hù)(不安全) /etc/passwd
(2).使用普通用戶(hù)(會(huì)導(dǎo)致權(quán)限不足情況) 3.守護(hù)進(jìn)程傳輸方式: rsync 自身非常重要的功能(不使用系統(tǒng)用戶(hù),更加安全)
2、修改rsync配置文件
[rsync-41 root ~] # vim /etc/rsyncd.conf uid = www gid = www port = 873 fake super = yes use chroot = no max connections = 200 timeout = 600 ignore errors read only = false list = false auth users = rsync_backup secrets file = /etc/rsync.passwd log file = /var/log/rsyncd.log ##################################### [backup] comment = niumait.cn about rsync path = /backup [data] comment = this is secord backup dir,to website data.. path = /data
3、創(chuàng)建用戶(hù)和數(shù)據(jù)目錄
根據(jù)配置文件中定義的信息,創(chuàng)建對(duì)應(yīng)的用戶(hù),備份的目錄 該無(wú)法登錄的用戶(hù),只是用于運(yùn)行進(jìn)程的賬戶(hù) useradd -u 1000 -M -s /sbin/nologin www 創(chuàng)建配置文件中定義的2個(gè)備份目錄 mkdir -p /data/ /backup [rsync-41 root ~] # useradd -u 1000 -M -s /sbin/nologin www [rsync-41 root ~] # [rsync-41 root ~] # mkdir -p /data /backup [rsync-41 root ~] # [rsync-41 root ~] # chown -R www:www /data/ [rsync-41 root ~] # chown -R www:www /backup/ [rsync-41 root ~] # ll -d /data/ /backup/ drwxr-xr-x 2 www www 6 Jan 6 14:01 /backup/ drwxr-xr-x 2 www www 6 Jan 6 14:01 /data/ [rsync-41 root ~] #
4、創(chuàng)建rsync專(zhuān)用的賬號(hào)密碼
(這一步很重要,如果后面有錯(cuò)基本也是來(lái)這排查)
1.創(chuàng)建密碼文件,寫(xiě)入賬戶(hù)和密碼,用于和客戶(hù)端連接時(shí)候的認(rèn)證 vim /etc/rsync.passwd 2.寫(xiě)入賬戶(hù)密碼 [rsync-41 root ~] # cat /etc/rsync.passwd rsync_backup:niuma666 3.待會(huì)客戶(hù)端向rsync服務(wù)器推送數(shù)據(jù),就得用這個(gè)賬號(hào)密碼?。。?! 4.這一步,非常重要,rsync要求降低密碼文件的權(quán)限,且必須是600 [rsync-41 root ~] # chmod 600 /etc/rsync.passwd [rsync-41 root ~] # ll /etc/rsync.passwd -rw------- 1 root root 22 Jan 6 14:05 /etc/rsync.passwd
5、設(shè)置開(kāi)機(jī)自啟動(dòng)
設(shè)置rsyncd服務(wù),運(yùn)行,且開(kāi)機(jī)自啟 [rsync-41 root ~] # systemctl start rsyncd [rsync-41 root ~] # systemctl status rsyncd ● rsyncd.service - fast remote file copy program daemon Loaded: loaded (/usr/lib/systemd/system/rsyncd.service; disabled; vendor preset: disabled) Active: active (running) since Mon 2025-01-06 14:11:28 CST; 12s ago Main PID: 3686 (rsync) CGroup: /system.slice/rsyncd.service └─3686 /usr/bin/rsync --daemon --no-detach Jan 06 14:11:28 rsync-41 systemd[1]: Started fast remote file copy program daemon. Jan 06 14:11:28 rsync-41 rsyncd[3686]: params.c:Parameter() - Ignoring badly formed line in conf...rors Jan 06 14:11:28 rsync-41 rsyncd[3686]: rsyncd version 3.1.2 starting, listening on port 873 Hint: Some lines were ellipsized, use -l to show in full. [rsync-41 root ~] # [rsync-41 root ~] # systemctl enable rsyncd Created symlink from /etc/systemd/system/multi-user.target.wants/rsyncd.service to /usr/lib/systemd/system/rsyncd.service. 檢查服務(wù)進(jìn)程是否運(yùn)行 [rsync-41 root ~] # ps -ef|grep 'rsync' | grep -v 'grep' root 3686 1 0 14:11 ? 00:00:00 /usr/bin/rsync --daemon --no-detach [rsync-41 root ~] # [rsync-41 root ~] # netstat -tunlp|grep rsync tcp 0 0 0.0.0.0:873 0.0.0.0:* LISTEN 3686/rsync tcp6 0 0 :::873 :::* LISTEN 3686/rsync
四、rsync服務(wù)模式-客戶(hù)端配置
1、安裝rsync
2、配置密碼文件及授權(quán)
非交互式密碼的操作,如下2個(gè)方法 1. 生成密碼文件,每次連接都指定這個(gè)密碼文件(在客戶(hù)端生成) [nfs-31 root ~] # cat /etc/rsync.passwd niuma666 還必須降低密碼文件的權(quán)限才行,必須是600 [nfs-31 root ~] # chmod 600 /etc/my_rsync.pwd [rsync-41 root ~] # ll /etc/rsync.passwd -rw------- 1 root root 22 Jan 6 14:05 /etc/rsync.passwd [nfs-31 root ~] # rsync -avzP --password-file=/etc/rsync.passwd test.tar.gz rsync_backup@rsync-41::bac p sending incremental file list test.tar.gz 10,240 100% 0.00kB/s 0:00:00 (xfr#1, to-chk=0/1) sent 123 bytes received 43 bytes 332.00 bytes/sec total size is 10,240 speedup is 61.69 2. 生成密碼變量,讓當(dāng)前系統(tǒng)中存在叫做 RSYNC_PASSWORD 這個(gè)變量,以及變量的值,是配置文件中的密碼即可 [nfs-31 root ~] # tail -1 .bashrc export RSYNC_PASSWORD="niuma666" [nfs-31 root ~] # rsync -avzP test.tar.gz rsync_backup@rsync-41::backup sending incremental file list test.tar.gz 10,240 100% 0.00kB/s 0:00:00 (xfr#1, to-chk=0/1) sent 123 bytes received 43 bytes 332.00 bytes/sec total size is 10,240 speedup is 61.69 [nfs-31 root ~] # rsync -avzP test.tar.gz rsync_backup@rsync-41::data sending incremental file list test.tar.gz 10,240 100% 0.00kB/s 0:00:00 (xfr#1, to-chk=0/1) sent 123 bytes received 43 bytes 332.00 bytes/sec total size is 10,240 speedup is 61.69
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
阿里云云服務(wù)器Linux系統(tǒng)掛載數(shù)據(jù)盤(pán)圖文教程
這篇文章主要介紹了阿里云云服務(wù)器Linux系統(tǒng)掛載數(shù)據(jù)盤(pán)圖文教程,阿里云服務(wù)器一般需要購(gòu)買(mǎi)額外的數(shù)據(jù)盤(pán),本文就講解如何掛載使用額外的數(shù)據(jù)盤(pán),需要的朋友可以參考下2014-09-09詳解CentOS 6.5搭建Redis3.2.8單機(jī)分布式集群
這篇文章主要介紹了詳解CentOS 6.5搭建Redis3.2.8單機(jī)分布式集群,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-05-05解讀Linux下ip命令展示的網(wǎng)絡(luò)連接信息
這篇文章主要給大家介紹了關(guān)于Linux下解讀ip命令展示的網(wǎng)絡(luò)連接信息的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起看看吧。2018-03-03linux Jenkins配置salve節(jié)點(diǎn)實(shí)現(xiàn)過(guò)程圖解
這篇文章主要介紹了linux Jenkins配置salve節(jié)點(diǎn)實(shí)現(xiàn)過(guò)程圖解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-08-08Linux 初始化MySQL 數(shù)據(jù)庫(kù)報(bào)錯(cuò)解決辦法
這篇文章主要介紹了Linux 初始化MySQL 數(shù)據(jù)庫(kù)報(bào)錯(cuò)解決辦法的相關(guān)資料,需要的朋友可以參考下2017-05-05linux Ubuntu下SSH無(wú)密碼驗(yàn)證配置的方法步驟
這篇文章主要介紹了linux Ubuntu下實(shí)現(xiàn)SSH無(wú)密碼驗(yàn)證配置的方法步驟,文中給出了詳細(xì)的步驟介紹,有需要的朋友可以參考借鑒,下面來(lái)一起看看吧。2017-02-02