Linux中rsync命令使用方式
一、rsync簡介
rsync 是一種高效的文件復(fù)制和同步工具,常用于在本地或遠(yuǎn)程計算機之間同步文件和目錄
主要特性:
增量同步:rsync 會檢測源和目標(biāo)文件之間的差異,只傳輸發(fā)生變化的部分,而不是重新傳輸整個文件。這樣就能有效減少數(shù)據(jù)傳輸量。
支持遠(yuǎn)程同步:rsync 可以通過 SSH、RSH 或者 rsync 自身的協(xié)議在遠(yuǎn)程服務(wù)器之間傳輸文件。
文件壓縮:可以在傳輸過程中啟用壓縮選項,減少網(wǎng)絡(luò)帶寬的使用。
文件權(quán)限、時間戳和符號鏈接的保留:rsync 支持保留文件的權(quán)限、時間戳、符號鏈接等文件屬性。
支持排除規(guī)則:可以通過排除規(guī)則,指定哪些文件或目錄不被同步。
支持?jǐn)帱c續(xù)傳:在傳輸過程中斷開連接后,rsync 可以從斷點繼續(xù)傳輸數(shù)據(jù),而不需要重新開始。
二、rsync本地模式和遠(yuǎn)程模式
1、命令說明
通過rsync的命令,來實現(xiàn),數(shù)據(jù)目錄A 拷貝到數(shù)據(jù)目錄B
語法:rsync [選項] 源數(shù)據(jù) 目的數(shù)據(jù)
2、安裝
centos: yum install rsync -y ubuntu: apt-get install rsync
3、命令語法,分幾個模式
- 本地模式
rsync 參數(shù) 源路徑 目標(biāo)路徑
rsync -xxxxx /var/log /tmp
- 遠(yuǎn)程模式,推送方式,把自己的數(shù)據(jù)推送到另一臺機器上(上傳)
語法1 ,rsync默認(rèn)走ssh協(xié)議
rsync 參數(shù) 源路徑 user@ip:目標(biāo)路徑
例如:
rsync -avzP /var/log/ root@10.0.0.31:/tmp/
語法2
rsync 參數(shù) 源路徑 user@ip::目標(biāo)路徑
- 遠(yuǎn)程模式,拉取方式,拉取別人機器的數(shù)據(jù)到自己的機器上(下載)
- rsync 參數(shù) user@ip:源路徑 目標(biāo)路徑
- rsync 參數(shù) user@ip::源路徑目標(biāo)路徑
例如:
rsync -avzP root@10.0.0.31:/var/log/ /tmp/
參數(shù)解釋:
-v詳細(xì)模式輸出-a歸檔模式,遞歸的方式傳輸文件,并保持文件的屬性,等同于 -rlptgoD-r遞歸拷貝目錄-l保留軟鏈接-p保留原有權(quán)限-t保留原有時間(修改)-g保留屬組權(quán)限-o保留屬主權(quán)限-D等于--devices --specials 表示支持b,c,s,p類型的文件-R保留相對路徑-H保留硬鏈接-A保留ACL策略-e指定要執(zhí)行的遠(yuǎn)程shell命令-E保留可執(zhí)行權(quán)限-X保留擴展屬性信息 a屬性
比較常用的組合參數(shù)
rsync -avzP
-a保持文件原有屬性-v顯示傳輸細(xì)節(jié)情況-z對傳輸數(shù)據(jù)壓縮傳輸-P顯示文件傳輸?shù)倪M度信息
你在命令行里,執(zhí)行命令,如果喜歡看到命令的執(zhí)行過程 ,則使用
-avzP
腳本里面?則使用
bash xxx.sh rsync -az
4、本地模式
linux機器本身,數(shù)據(jù)來回發(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 對文件同步
把本地的的/var/log/messages 文件 拷貝到/opt下
拷貝單個文件
[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
拷貝單個大文件,拷貝大文件時,要注意限速,否則占用磁盤IO太多
--bwlimit=10
先生成一個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查看磁盤的讀寫IO情況
限制單個大文件的傳輸,速度只給他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 對同步目錄(注意語法的區(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
....
測試文件夾的增量拷貝
[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 無差異化拷貝
使用--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/
最終會生成
/test2/test1/ 該文件夾的數(shù)據(jù),和源數(shù)據(jù)目錄 /test1是一樣的注:對rsync限速,因為rsync在傳輸數(shù)據(jù)時,會占用大量的磁盤IO,以及如果是網(wǎng)絡(luò)傳輸?shù)脑?,占用網(wǎng)絡(luò)帶寬,會導(dǎo)致其他程序受影響
所以rsync這樣的備份服務(wù),都是在夜里,凌晨操作,被影響其他程序
--bwlimit
5、遠(yuǎn)程模式
將/root下的數(shù)據(jù),拷貝到/tmp下面
- 把rsync-41 /root下的數(shù)據(jù)
- 拷貝到 nfs-31 /tmp下
使用rsync命令實現(xiàn)如scp的作用
# PUSH 推送模式,上傳模式 把rsync-41 /root下的數(shù)據(jù),拷貝到 nfs-31 /tmp下 登錄rsync41 用ip形式、再用主機名形式 添加無差異化參數(shù),該參數(shù),慎用!搞清楚了自己在做什么! rsync -avzP --delete /root/ root@172.16.1.31:/tmp/

rsync同步后,nfs-31機器/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/


注意:
# 不同主機之間同步數(shù)據(jù) --delete rsync -avzP --delete root@172.16.1.41:/root /tmp/ #坑:如果/和一個空目錄進行完全同步,那么效果和刪根一樣 # 坑:傳輸過程不限速導(dǎo)致帶寬被占滿 ,--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顯示傳輸過程-z壓縮傳輸數(shù)據(jù)-P顯示傳輸進度
遠(yuǎn)程備份文件,并重命名
遠(yuǎn)程傳輸 nfs-31下的 /tmp/2G.log 備份到 rsync-41的/opt下,且是無差異化備份
等于清空原有/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)用戶(不安全) /etc/passwd
(2).使用普通用戶(會導(dǎo)致權(quán)限不足情況) 3.守護進程傳輸方式: rsync 自身非常重要的功能(不使用系統(tǒng)用戶,更加安全)
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)建用戶和數(shù)據(jù)目錄
根據(jù)配置文件中定義的信息,創(chuàng)建對應(yīng)的用戶,備份的目錄 該無法登錄的用戶,只是用于運行進程的賬戶 useradd -u 1000 -M -s /sbin/nologin www 創(chuàng)建配置文件中定義的2個備份目錄 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專用的賬號密碼
(這一步很重要,如果后面有錯基本也是來這排查)
1.創(chuàng)建密碼文件,寫入賬戶和密碼,用于和客戶端連接時候的認(rèn)證 vim /etc/rsync.passwd 2.寫入賬戶密碼 [rsync-41 root ~] # cat /etc/rsync.passwd rsync_backup:niuma666 3.待會客戶端向rsync服務(wù)器推送數(shù)據(jù),就得用這個賬號密碼?。。。? 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è)置開機自啟動
設(shè)置rsyncd服務(wù),運行,且開機自啟
[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ù)進程是否運行
[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ù)模式-客戶端配置
1、安裝rsync
2、配置密碼文件及授權(quán)
非交互式密碼的操作,如下2個方法
1. 生成密碼文件,每次連接都指定這個密碼文件(在客戶端生成)
[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 這個變量,以及變量的值,是配置文件中的密碼即可
[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é)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Linux使用pt-slave-restart監(jiān)控多個從庫的Shell腳本案例
本文介紹了如何編寫并使用一個基于pt-slave-restart的Shell腳本,實現(xiàn)對多個MySQL從庫復(fù)制狀態(tài)的靈活監(jiān)控,支持多種配置方式、參數(shù)覆蓋、錯誤處理及守護進程等功能,便于高效管理數(shù)據(jù)庫復(fù)制,需要的朋友可以參考下2025-10-10
Linux配置FTP服務(wù)器實現(xiàn)文件上傳下載功能
FTP作為最古老、最成熟的文件傳輸協(xié)議之一,至今仍在企業(yè)級應(yīng)用中扮演重要角色,本文將帶你從零開始,在 Linux 系統(tǒng)上搭建完整的 FTP 服務(wù)器,并通過 Java 編寫客戶端程序?qū)崿F(xiàn)自動化上傳與下載功能,需要的朋友可以參考下2026-04-04
Linux環(huán)境下監(jiān)控和檢查內(nèi)存使用的幾種方法
內(nèi)存管理是保持 Linux 系統(tǒng)平穩(wěn)運行的重要組成部分,無論您是系統(tǒng)管理員、開發(fā)者,學(xué)會檢查 Linux 內(nèi)存使用情況是確保系統(tǒng)穩(wěn)定性和性能的關(guān)鍵步驟,本文將介紹在 Linux 環(huán)境下監(jiān)控和檢查內(nèi)存使用的幾種方法,需要的朋友可以參考下2025-12-12

