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

回到顶部