rsync:文件同步工具

xiaohai 2021-05-05 20:55:02 2607人围观 标签: Linux 
简介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