rsync命令的工作模式:
第一種:shell模式,也稱作本地模式
第二種:遠程shell模式,此時可以利用ssh協議承載其數據傳輸過程
第三種:列表模式,其工作方式與ls相似,僅列出源的內容: -nv
第四種:服務器模式,此時,rsync可以工作爲守護進程,能夠接受客服端的數據傳輸請求:在使用時,可以使用rsync命令把文件發送給守護進程,也可以向服務器端請求獲取文件
rsync有許多選項:
-n: 在不確定命令是否能按意願執行時,務必要事先測試,
-v: --verbose,詳細輸出模式
-q: --quite,靜默模式
-c: --checksum,開啓校驗功能,強制對文件傳輸進行校驗
-r: --recursive,遞歸複製:
-a: --archives,歸檔,保留文件的原有屬性
-p: --perms,保留文件的權限
-t: --time,保留文件的時間戳
-l: --links, 保留文件的符號鏈接
-g: --group, 保留文件的屬組
-o: --owner, 保留文件的屬主
-D: --devices 保留設備文件
-e SSH: 表示使用ssh協議作承載
-z: 對文件壓縮後傳輸
--progress: 顯示進度條
--stats:顯示統計結果
遞歸複製示例:
rsync -r /etc abc#把/etc下的所有文件遞歸複製到abc目錄裏
rsync -r /mydata/data /backups/ : #會把目錄data直接同步至/backups目錄中
rsync -r /mydata/data/ /backups/ : 會把目錄data/中的內容同步至/backups目錄中
rsync -e ssh -r redis-4.0.2 [email protected]:/tmp#把本地的redis-4.0.2目錄推送到遠程主機192.168.1.51下的目錄/tmp下
配置rsync以daemon的方式運行:
1、設定rsync服務器端:
1)安裝並啓動xinetd
# yum -y install xinetd
2) 爲rsync服務提供配置文件
配置文件爲/etc/rsyncd.conf
定義一個全局配置和多個rsync共享配置
#Global Settings
uid = nobody
gid = nobody
use chroot = no
max connections = 10
strict modes = yes
pid file = /var/run/rsyncd.pid
log file = /var/log/rsyncd.log
#Directory to be synced
[synced_name]
path = /path/to/some_dir
ignore erros = yes
read only = no
write only = no
hosts allow = white_list_ip/net
hosts deny = black_list_ip/net
說明:
1、二者都不出現時,默認允許訪問:
2、只出現hosts allow: 定義白名單,但沒有被匹配的主機由默認規則處理,即爲允許:
3、只出現hosts deny: 定義黑麪單,出現在名單中的都被拒絕
4、二者同時出現,先檢查hosts allow,如果匹配就allow,否則,檢查hosts
deny,如果匹配則拒絕:如二者均無匹配,則由默認規則處理,即爲允許:
list = false
uid = root
gid = root
auth users = username
secrets file = /etc/rsync.passwd
3)配置密碼文件/etc/rsyncd.passwd
文件格式(明文):
username:password
文件權限要設置爲600;
4)配置服務能夠啓動
# chkconfig rsync on
# service xinetd start
監聽於873/tcp
2、在服務器上做測試
如果需要做週期性操作,則需要將命令寫入crontab中:
實際演示:
服務器端:192.168.1.49
客戶端:192.168.1.51
CentOS自帶rsync
服務器端:
1、建立數據目錄
[root@localhost ~]# mkdir -pv /mydata/data
mkdir: 已創建目錄 "/mydata"
mkdir: 已創建目錄 "/mydata/data"
2、創建配置文件
[root@localhost ~]# vim /etc/rsyncd.conf
uid = nobody #設置運行rsync進程的用戶
gid = nobody
use chroot = no
max connections = 10
strict modes = yes
pid file = /var/run/rsyncd.pid #CentOS7中yum安裝不需要指定pid file 否則報錯
log file = /var/log/rsyncd.log #日誌文件
[mydata]
path = /mydata/data #實際需要同步的路徑
ignore errors = yes
read only = no #可以pull
write only = no #可以push
hosts allow = 192.168.1.0/24 #允許訪問的主機或網段
hosts deny = *
list = false
uid = root
gid = root
auth users = myuser #客戶端獲取文件的身份此用戶並不是本機確實存在的用戶
secrets file = /etc/rsync.passwd #用來認證客戶端的密鑰文件
3、創建密碼文件
[root@localhost ~]# vim /etc/rsync.passwd
myuser:mypass
4、修改密碼文件權限
[root@localhost ~]# chmod 600 /etc/rsync.passwd
5、把rsync服務設置爲開機啓動並啓動服務
[root@localhost ~]# systemctl enable rsyncd.service
ln -s '/usr/lib/systemd/system/rsyncd.service' '/etc/systemd/system/multi-user.target.wants/rsyncd.service'
[root@localhost ~]# systemctl start rsyncd.service
6、查看rsync監聽的端口
[root@localhost ~]# ss -tnlp|grep 873
LISTEN 0 5 *:873 *:* users:(("rsync",28684,4))
LISTEN 0 5 :::873 :::* users:(("rsync",28684,5))
測試把客戶端的jenkis文件push到服務器的mydata目錄下
客戶端:
[root@localhost src]# rsync jenkins-cli.jar [email protected]::mydata
Password:
服務器端:
可以正常的看到該文件
[root@localhost mydata]# cd data/
[root@localhost data]# ls
jenkins-cli.jar
測試把服務器端/mydata/data/目錄下的jenkis文件再pull到本地的/root目錄下
[root@localhost src]# rsync [email protected]::mydata/* /root
Password:
[root@localhost src]# cd /root/
[root@localhost ~]# ls
anaconda-ks.cfg install.log install.log.syslog jenkins-cli.jar