rsync命令
简介
Rsync 是一款开源的数据同步工具,支持在本地货远程进行全量或增量备份,Rsync 使用"quick check" 算法实现同步的时候仅同步修改时间或者大小发生变化的文件,甚至可以实现同步一个文件中有变化的内容,可以快速的实现数据同步,备份
Rsync 特性
1. 支持拷贝特殊文件,如:链接文件,设备文件2. 可以排除文件或者目录进行同步
3. 可以保持原文件或目录的权限,时间属主等信息不变
4. 可实现增量同步,只同步发生变化的数据,因此数据传输效率很高
5. 可以配合 ssh 进行加密传输
6. 可以通过 socket 的方式传输数据
7. 支持匿名或者验证的方式进行传出数据(socket 模式下)
常用工作方式
1. 单个主机之间传输数据,类似 cp 命令2. 借助ssh等通道进行数据传输,类似scp
3. 以守护进程的方式传输数据
rsync 命令使用方式
Local: rsync [OPTION...] SRC... [DEST] Access via remote shell:
Pull: rsync [OPTION...] [USER@]HOST:SRC... [DEST]
Push: rsync [OPTION...] SRC... [USER@]HOST:DEST
Access via rsync daemon:
Pull: rsync [OPTION...] [USER@]HOST::SRC... [DEST]
rsync [OPTION...] rsync://[USER@]HOST[:PORT]/SRC... [DEST]
Push: rsync [OPTION...] SRC... [USER@]HOST::DEST
rsync [OPTION...] SRC... rsync://[USER@]HOST[:PORT]/DEST
本地文件拷贝
[root@localhost ~]# rsync /etc/hosts /tmp/[root@localhost ~]# ll /tmp/
总用量 4
-rw-r--r--. 1 root root 158 1月 14 08:27 hosts
drwx------. 3 root root 17 1月 7 05:36 systemd-private-5ca2391332274440b3c138c77b3d5253-chronyd.service-GUjo5P
drwx------. 3 root root 17 1月 12 21:18 systemd-private-e247600c5bbc4baa8ba48a6f8dd19373-chronyd.service-xiE40Q
[root@localhost ~]# rsync -avz /etc/hosts /tmp/
sending incremental file list
hosts
sent 124 bytes received 31 bytes 310.00 bytes/sec
total size is 158 speedup is 1.02
[root@localhost ~]# ll /tmp/
总用量 4
-rw-r--r--. 1 root root 158 6月 7 2013 hosts
drwx------. 3 root root 17 1月 7 05:36 systemd-private-5ca2391332274440b3c138c77b3d5253-chronyd.service-GUjo5P
drwx------. 3 root root 17 1月 12 21:18 systemd-private-e247600c5bbc4baa8ba48a6f8dd19373-chronyd.service-xiE40Q
rsync 本地文件删除
[root@localhost ~]# mkdir null[root@localhost ~]# cat /tmp/data/tmpfile
hi
[root@localhost ~]# rsync --delete null/ /tmp/data/
rsync: --delete does not work without --recursive (-r) or --dirs (-d).
rsync error: syntax or usage error (code 1) at main.c(1435) [client=3.0.9]
[root@localhost ~]# rsync -r --delete null/ /tmp/data/
[root@localhost ~]# ll /tmp/data/
总用量 0
rsync 远程拷贝
# 本机[root@localhost ~]# rsync -e "/usr/bin/ssh" /etc/hosts root@192.168.32.21:/tmp/
[root@localhost ~]# ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.32.20 netmask 255.255.255.0 broadcast 192.168.32.255
inet6 fe80::4109:88f8:7bfc:5446 prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:e3:96:99 txqueuelen 1000 (Ethernet)
RX packets 34415 bytes 8866384 (8.4 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 22725 bytes 4680566 (4.4 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1 (Local Loopback)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
# 远程服务器结果
[root@localhost ~]# ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.32.21 netmask 255.255.255.0 broadcast 192.168.32.255
inet6 fe80::b224:e68a:47a:de56 prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:f0:c4:2d txqueuelen 1000 (Ethernet)
RX packets 4719 bytes 6301208 (6.0 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 1944 bytes 180281 (176.0 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1 (Local Loopback)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
[root@localhost ~]# ls /tmp/
hosts
从远程拉取文件操作
[root@localhost ~]# rsync -e "/usr/bin/ssh" root@192.168.32.21:/etc/sysconfig/network-scripts/ifcfg-ens33 ./[root@localhost ~]# ls
cmake-3.10.1 code ifcfg-ens33 libsodium-1.0.16 MakeTest null redis-4.0.6 software
[root@localhost ~]# cat ifcfg-ens33
TYPE=Ethernet
......
ONBOOT=yes
DNS1=192.168.32.2
GATEWAY=192.168.32.2
IPADDR=192.168.32.21
常用参数
-v # 以详细模式输出-z # 传输的时候进行压缩操作 --compress-level=NUM 执行压缩级别
-a # 归档模式,表示以递归模式传输文件,并保持文件属性
-r # 递归模式,用于拷贝目录
-t # 保持文件时间信息
-o # 保持文件属主信息
-p # 保持文件权限信息
-P # 显示传输进度
-g # 保持文件属组信息
-P # 显示文件同步进度
-D # 保持设备信息
-l # 保留软链接
-e # 传输使用的协议,例如: -e ssh
--bwlimit # limit I/O bandwidth; KBytes per second
rsync daemon 配置文件
[root@localhost rsync]# cat /etc/rsyncd.conf uid = rsync
gid = rsync
use chroot = yes
max connections = 4
# 进程id 存放的文件
pid file = /var/run/rsyncd.pid
# 日志文件
log file = /var/log/rsyncd.log
exclude = lost+found/
transfer logging = yes
timeout = 900
ignore nonreadable = yes
dont compress = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2
# 模块名称,可以同时定义多个模块
[ftp]
# 此模块读写文件的目录
path = /rsync
comment = ftp export area
auth users = rsync_backup
# 指定用户名密码存放的文件,格式为: 用户名:密码
secrets file = /etc/rsyncd.password
# 是否为只读模块,为 true 的时候,客户端无法推送数据
read only = false
其他可用配置
motd file # 定义客户端访问时看到的信息port # 进程监听的端口号
address # 进程监听的地址
list # 是否允许客户端查看模块列表
uid # 进程运行使用的用户 id
gid # 进程运行使用的用户组 id
hosts allow # 允许请求的 ip
hosts deny # 禁止请求的 ip
ignore errors # 忽略 io 错误
comment # 当客户端取得可用模块列表的时候,在模块名后展示的注释
path # 此模块使用的目录
write only # 只允许上传
/etc/rsyncd.password 文件配置,注意文件权限
[root@localhost rsync]# ll /etc/rsyncd.password -rw-------. 1 root root 20 1月 14 18:23 /etc/rsyncd.password
[root@localhost rsync]# cat /etc/rsyncd.password
rsync_backup:111111
创建共享目录
[root@localhost ~]# mkdir -p /rsync[root@localhost ~]# chown rsync.rsync /rsync/
[root@localhost ~]# touch /rsync/hh
[root@localhost ~]# tree /rsync/
/rsync/
└── hh
0 directories, 1 file
启动 rsync 进程
[root@localhost rsync]# rsync --daemon
客户端拉取数据
[root@localhost data]# rsync -avz rsync_backup@192.168.32.20::ftp ./Password:
receiving incremental file list
./
hh
sent 83 bytes received 148 bytes 92.40 bytes/sec
total size is 0 speedup is 0.00
客户端推送数据
[root@localhost data]# rsync -avz ./ rsync_backup@192.168.32.20::ftp Password:
sending incremental file list
./
111
sent 92 bytes received 30 bytes 34.86 bytes/sec
total size is 0 speedup is 0.00
客户端使用密码文件认证
[root@localhost data]# echo "111111" > /etc/rsync.password[root@localhost data]# chmod 600 /etc/rsync.password
[root@localhost data]# rsync -avz ./ rsync_backup@192.168.32.20::ftp --password-file=/etc/rsync.password
sending incremental file list
sent 53 bytes received 8 bytes 122.00 bytes/sec
total size is 0 speedup is 0.00
客户端和服务端的密码文件权限必须为 600
使用 exclude 过滤文件
[root@localhost data]# touch exclude[root@localhost data]# rsync -avz ./ rsync_backup@192.168.32.20::ftp --exclude=exclude --password-file=/etc/rsync.password
sending incremental file list
./
sent 56 bytes received 11 bytes 134.00 bytes/sec
total size is 0 speedup is 0.00
通过文件过滤
[root@localhost data]# touch {1..9}[root@localhost data]# ls
1 111 2 3 4 5 6 7 8 9 exclude hh
[root@localhost data]# vim exclude
[root@localhost data]# cat exclude
1
2
3
4
[root@localhost data]# rsync -avz ./ rsync_backup@192.168.32.20::ftp --exclude-from=exclude --password-file=/etc/rsync.password
sending incremental file list
./
5
6
7
8
9
exclude
sent 334 bytes received 125 bytes 918.00 bytes/sec
total size is 8 speedup is 0.02
以上是 rsync命令 的全部内容, 来源链接: utcz.com/z/512006.html