Linux 使用 rsync 同步文件
导读
rsync是Unix下的一款应用软件,它能同步更新两处计算机的文件与目录,并适当利用差分编码以减少数据传输量。rsync中的一项同类软件不常见的重要特性是每个目标的镜像只需发送一次。rsync可以拷贝/显示目录内容,以及拷贝文件,并可选压缩以及递归拷贝。
安装
有的版本的 Linux 可能已经预装了 rsync,可以输入 rsync
测试,如果出现 rsync 相关的使用说明就可以不用再安装。如果出现 -bash: /usr/bin/rsync: No such file or directory
之类的提示,说明没有安装 rsync。
CentOS/Fedora 安装 rsync:
yum install -y rsync
Ubuntu/Debian 安装 rsync:
apt install -y rsync
安装完成后输入 rsync
可以查看选项说明。
使用
rsync 可以用于多台服务器之间同步文件,也可以在本机的不同目录之间同步文件。
下面把本机的一个文件拷贝到本机的另一个目录中:
rsync /home/hello.txt /root/hello.txt
上面把 home
目录中的 hello.txt
拷贝到了 root
目录中。rsync 的使用和 cp
命令差不多。
下面把本机 home
目录中的 hello.txt
拷贝到另一台服务器的 home
目录中:
rsync /home/hello.txt 172.93.47.76:/home/hello.txt
不同设备之间同步文件 文件路径前需要加 IP,IP 和路径之间用 :
分隔。不同设备之间同步文件需要输入密码才能同步。
下面把另一台服务器中的 home
目录下的 MWordStar.zip
拷贝到当前服务器的 home
目录下:
rsync 172.93.47.76:/home/MWordStar.zip /home/MWordStar.zip
选项说明
下面是 rsync 的一些常用选项:
选项 | 说明 |
---|---|
-v |
显示详细信息 |
-r |
:递归目录 |
-l |
同步软链接 |
-p |
保持文件权限 |
-t |
同步文件的修改时间 |
-g |
保持文件的所属组 |
-o |
保持文件的所属用户 |
-D |
保持设备文件的信息 |
-a |
多个选项集,包含了上面的 -rlptgoD |
-z |
传输之前对文件进行压缩处理 |
--partial |
允许断点续传 |
--progress |
显示传输进度 |
-P |
允许断点续传和显示传输进度,相当于同时包含了上面的 -partial 和 -progress |
--delete |
在同步文件的时候删除多余的文件 |
--delete-after |
同步完成后删除多余的文件 |
--bwlimit |
限制传输速度 |
--include |
在同步多个文件或目录时可以指定需要同步的文件 |
--exclude |
在同步多个文件或目录时可以指定不需要同步的文件 |
下面是一些选项的详细说明:
-v
-v
选项主要就是显示详细的统计信息,如下:
rsync -v MWordStar.zip 172.93.47.76:/home/MWordStar.zip
信息统计如下:
MWordStar.zip
sent 1,198 bytes received 1,703 bytes 341.29 bytes/sec
total size is 194,160 speedup is 66.93
-r
-r
的功能就是拷贝整个目录,包括目录下的所有文件和目录。如果不加 -r
在拷贝目录的时候会提示 skipping directory dir
,也无法拷贝成功。
-l
在拷贝软链接的时候需要加 -l
选项,否则就会跳过软链接,还会提示:
skipping non-regular file xxx
其中的 xxx
就是跳过的文件名。
-P
-P
的功能就是显示传输进度和允许断点续传。下面是一个包含 -P
选项被强制中断传输的文件:
BaiduNetdisk_6.8.9.1.exe
3,440,640 9% 1.23MB/s 0:00:25 ^CKilled by signal 2.
rsync error: unexplained error (code 255) at rsync.c(638) [sender=3.1.2]
rsync: [sender] write error: Broken pipe (32)
中断前的进度是 9%
,如果接收方未完成的文件没有删除的话,下次再传这个文件还能从 9%
的地方开始传输。
--delete
--delete
的功能是在同步的时候删除多余文件,需要和 -r
选项一起使用。
下面让 home
目录和 downloads
目录同步,home
包含的文件如下:
.
|-- BaiduNetdisk_6.8.9.1.exe
`-- hello.txt
downloads
目录包含的文件如下:
.
└── GoogleDriveLogo.jpeg
使用 --delete
选项同步:
rsync -r --delete --progress /home/ 172.93.47.76:/downloads/
同步后 downloads
目录包含的文件如下:
.
├── BaiduNetdisk_6.8.9.1.exe
└── hello.txt
downloads
中包含的文件已经和 home
一样,多余的 GoogleDriveLogo.jpeg
已经被删除。
--delete-after
--delete-after
选项有点类似于 --delete
,都是删除多余的文件,不过 --delete-after
是在传输完成后才会删除多余文件,--delete
在传输之前就会删除多余文件。
使用 --delete-after
选项 如果中途传输中断了文件也不会被删除。
--bwlimit
--bwlimit
选项的功能是限制传输速度。对于服务器来说,限制传输速度可以降低传输文件时对网络的影响。
用法如下:
rsync --bwlimit=100 --progress /home/video.mp4 172.93.47.76:/downloads/video.mp4
上面的传输速度会被限制到 100k 每秒。
--include 和 --exclude
--include
的功能是指定需要同步的文件,--exclude
的功能是指定不需要同步的文件。这两个选项可以一起使用。
用法如下:
rsync -r --include 'h*' --exclude '*' /home/ 172.93.47.76:/downloads/
上面只会同步以 h
开头的文件。