rsync:文件同步工具
简介rsync是一款开源的、快速的、多功能的和跨平台的,可实现全量及增量的本地或远程服务镜像同步备份工具。
说明
rsync是一款开源的、快速的、多功能的和跨平台的,可实现全量及增量的本地或远程服务镜像同步备份工具。
格式
rsync命令的三种常见模式:
1、本地模式:
rsync [option] [源文件] [目标文件]
2、通过shell远程访问模式:
拉取: rsync [option] [USER@]HOST:源文件 [目标文件]
推送: rsync [option] [源文件] [USER@]HOST:目标文件
3、rsync的守护进程模式
拉取:
rsync [option] [USER@]HOST::源文件 [目标文件]
rsync [option] rsycn://[USER@]HOST[:PORT]/源文件 [目标文件]
推送:
rsync [option] [源文件] [USER@]HOST::目标文件
rsync [option] [源文件] rsycn://[USER@]HOST[:PORT]/目标文件
常用参数说明
- -v:详细模式输出,传输时显示进度等信息
- -z:传输时进行压缩以提高传输效率,—compress-level=NUM可按级别压缩
- -a:以递归方式传输文件,并保持所有文件的属性
- -r:对子目录以递归模式
- -t:保持文件的时间信息
- -o:保持文件的属主信息
- -p:保持文件的权限
- -g:保持文件的属组信息
- -P:显示同步的过程及传输时进度信息
- -D:保持设备文件信息
- -l:保留软链接
- -n:测试选项,模拟执行
- —exclude=PATTERN:指定排除不需要传输的文件模式
- —exclude-from=FILE:从文本文件读取需要排除的文件列表
- —bwlimit=KBPS:限制传输速度
- —delete:使目标目录的内容与源文件目录保持一致,删除不同的文件
示例
1、源文件带斜杠(就只会复制目录内的内容,而不是复制目录本身)
[root@localhost ~]# rsync -av test1/ test2
sending incremental file list
data1/
data2/
sent 88 bytes received 20 bytes 216.00 bytes/sec
total size is 0 speedup is 0.00
[root@localhost ~]# tree test1/
test1/
├── data1
└── data2
2 directories, 0 files
[root@localhost ~]# tree test2
test2
├── data1
└── data2
2 directories, 0 files
2、源文件不带斜杠(就会复制目录本身,而不是目录内的内容)
[root@localhost ~]# rsync -av test1 test2
sending incremental file list
test1/
test1/data1/
test1/data2/
sent 105 bytes received 28 bytes 266.00 bytes/sec
total size is 0 speedup is 0.00
[root@localhost ~]# tree test1
test1
├── data1
└── data2
2 directories, 0 files
[root@localhost ~]# tree test2
test2
└── test1 #将test1都复制进来了
├── data1
└── data2
3 directories, 0 files
3、本地复制(类似于cp,但是这个是增量复制)
[root@localhost ~]# touch test1/test.txt #首先创建一个空文件
[root@localhost ~]# ll test1/
total 0
drwxr-xr-x. 2 root root 6 May 24 05:36 data1
drwxr-xr-x. 2 root root 6 May 24 05:36 data2
-rw-r--r--. 1 root root 0 May 24 05:41 test.txt #空文件
[root@localhost ~]# rsync -av test1 test2 #进行同步
sending incremental file list
test1/
test1/test.txt #只有test.txt同步过去,其他两个目录在上一个例子已经同步过去
sent 171 bytes received 41 bytes 424.00 bytes/sec
total size is 0 speedup is 0.00
[root@localhost ~]# rsync -av test1 test2 #在没改变的情况下同步,没有任何文件被同步
sending incremental file list
sent 129 bytes received 19 bytes 296.00 bytes/sec
total size is 0 speedup is 0.00
[root@localhost ~]# echo "abc" >> test1/test.txt #向test.txt文件追加信息
[root@localhost ~]# rsync -av test1 test2 #再次同步
sending incremental file list
test1/test.txt #test.txt被同步过去了,实现了增量同步
sent 175 bytes received 38 bytes 426.00 bytes/sec
total size is 4 speedup is 0.02
4、删除文件(—delete),这个可以解决快速删除目录下有几百万的文件的方法
—delete参数主要是让源目录和目标目录保持一致,也即是源目录里面的内容是什么目标目录下也是什么,如果源目录为空,那么目标目录下的内容也将为空,所以可以采用空目录来删除目标目录里面的内容。
[root@localhost ~]# mkdir test3 #创建目录
[root@localhost ~]# cd test3/ #进入目录
[root@localhost test3]# touch file{1..100000} #生成100000个文件
[root@localhost test3]# ls -l | grep "^-" | wc -l #统计当前目录下的文件总数
100000
[root@localhost test3]# cd ../ #返回上一级目录
[root@localhost ~]# mkdir test4 #创建test4空目录
[root@localhost ~]# rsync -av --delete test4/ test3/ #这里源目录必须加上/
...
deleting file1000
deleting file100
deleting file10
deleting file1
./
sent 43 bytes received 1,288,914 bytes 515,582.80 bytes/sec
total size is 0 speedup is 0.00
5、拉取和推送文件或目录(类似scp)
#推送
[root@localhost ~]# rsync -av /root/test2 192.168.71.107:/tmp
root@192.168.71.107s password:
sending incremental file list
test2/
test2/test1/
test2/test1/test.txt
test2/test1/data1/
test2/test1/data2/
sent 217 bytes received 55 bytes 108.80 bytes/sec
total size is 4 speedup is 0.01
#拉取
[root@localhost ~]# rsync -av 192.168.71.107:/tmp /tmp
root@192.168.71.107s password:
receiving incremental file list
tmp/
tmp/test.zip
tmp/.ICE-unix/
tmp/.Test-unix/
...
sent 399 bytes received 810,286 bytes 180,152.22 bytes/sec
total size is 808,780 speedup is 1.00