1. 前言
本文主要讲解如何在Linux系统中使用rsync
同步文件和目录。本文介绍了rsync
命令的10种基本和高级的用法,用于在基于Linux服务器上进行远程和本地传输文件。运行rsync
命令不需要使用root
用户。
Rsync (Remote Sync)是Linux/Unix系统中用于远程和本地复制和同步文件和目录的最常用工具。
在rsync
命令的帮助下,您可以跨目录、磁盘和网络从远程和本地复制和同步数据,执行数据备份,并在两台Linux机器之间制作镜像。
2. Rsync命令的优点和特点
- 它有效地将文件复制和同步到远程系统或从远程系统同步文件到本地。
- 支持复制链接、设备、所有者、组和权限。
- 它比scp (Secure Copy)更快,因为rsync使用远程更新协议,该协议只允许传输两组文件之间的差异。第一次,它将一个文件或目录的全部内容从源文件复制到目标文件,但从下一次开始,它只将更改的块和字节复制到目标文件。
- Rsync在两端发送和接收数据时采用压缩和解压缩方式,因此占用的带宽较少。
3. rsync命令的基本语法
rsync options source destination
rsync命令的一些常用选项:
-v
:详细-r
:递归复制数据(但在传输数据时不保留时间戳和权限)。-a
:存档模式,它允许递归地复制文件,还保留符号链接、文件权限、用户和组所有权以及时间戳。-z
:压缩文件数据。-h
:人类可读的,以人类可读的格式输出数字。
4. 在Linux系统中安装Rsync
在Linux发行版中,我们可以使用以下命令安装rsync
软件包。
Debian/Ubuntu & Mint
sudo apt-get install rsync
Arch Linux
pacman -S rsync
Gentoo
emerge sys-apps/rsync
Fedora/CentOS/RHEL/ Rocky Linux/AlmaLinux
sudo dnf install rsync
sudo zypper install rsync
5. Linux系统上使用Rsync同步文件
5.1 在本地同步文件
下面的命令将本地机器上的单个文件从一个位置同步到另一个位置。在本例中,需要将当前目录中的文件backup.tar同步(复制)到/home/zcwyou/backups/目录里。
rsync -zvh backup.tar.gz /home/zcwyou/backups/
在上面的示例中,您可以看到,如果目标还不存在,rsync
将自动为目标创建一个目录。这是与cp
命令不同点之一。
5.2 在本地同步目录
下面的命令是将把本地一个目录中的所有文件同步到同一台机器中的另一个目录。在本例中,/root/rpmpkgs
包含一些rpm
包文件,您希望将该目录复制到/home/zcwyou/backups/
目录中。
rsync -avzh /root/rpmpkgs /home/zcwyou/backups/
5.3 将目录从本地服务器复制到远程服务器
以下的命令是将一个目录从本地计算机同步到远程计算机。例如,在您的本地计算机中有一个文件夹rpmpkgs
,里面保存了一些RPM软件包,并且您希望将该本地目录的内容同步到远程服务器上,您可以使用以下命令:
rsync -avzh /root/rpmpkgs root@192.168.0.141:/root/
5.4 同步远程目录到本地机器
使用以下命令将远程目录同步到本地目录。在本例中,远程服务器上的目录/root/rpmpkgs
,通过rsync
工具把它同步到本地计算机的/home/zcwyou/myrpms
中。
rsync -avzh root@192.168.0.141:/root/rpmpkgs /home/zcwyou/myrpms
6. Rsync利用SSH加密通道传输文件
rsync
可以使用SSH (Secure Shell)加密通道传输数据。SSH协议并不仅仅用来远程管理服务器的,它本质上是一个加密通道。
此外,当我们使用rsync时,我们需要提供ssh的账号和密码来完成特定的任务,因此使用SSH选项将以加密的方式发送登录信息,以便您的密码是安全的。
6.1 利用SSH加密通道同步远程服务器上的文件到本地
要指定使用rsync
的协议,您需要使用-e
选项和您想要使用的协议名称。在本例中,我们将使用带有-e ssh
选项来进行数据传输。
sync -avzhe ssh root@192.168.0.141:/root/anaconda-ks.cfg /home/zcwyou
6.2 利用SSH加密通道同步本地文件到远程服务器
rsync -avzhe ssh backup.tar.gz root@192.168.0.141:/backups/
7. rsync同步文件期间显示进度
为了在将数据从一台机器传输到另一台机器时显示进度,我们可以使用–progress
选项。它显示文件和完成传输的剩余时间。
rsync -avzhe ssh --progress /root/rpmpkgs root@192.168.0.141:/root/rpmpkgs
8. 使用–include
和–exclude
来指定文件范围
这两个选项允许我们通过指定参数来包括和排除文件,这些选项帮助我们指定文件或目录在同步时应该包含或被排除。
在本例中,rsync
命令将只包括以R
开头的文件和目录,并排除所有其他文件和目录。
rsync -avze ssh --include 'R*' --exclude '*' root@192.168.0.141:/var/lib/rpm/ /root/rpm
9. 使用–delete
选项
如果源文件或目录不存在,但目标文件或目录存在,则可能需要在同步时删除目标文件或目录。
我们可以使用–delete
选项来删除源目录中不存在的文件。
源和目标同步。现在在目标创建一个新文件test.txt。
cd /root/rpm/
touch test.txt
rsync -avz --delete root@192.168.0.151:/var/lib/rpm/ /root/rpm/
目标服务器中有一个名为test.txt的新文件,当使用–delete
选项与源同步时,它删除了文件test.txt。
7. 限制传输时最大的文件大小
您可以指定要传输或同步的最大文件大小。你可以使用–max-size
选项。在本例中,最大文件大小为200k,因此该命令将只传输那些等于或小于200k的文件。
rsync -avzhe ssh --max-size='200k' /var/lib/rpm/ root@192.168.0.151:/root/tmprpm
8. 传输成功后删除源文件
假设你有一个主web服务器和一个数据备份服务器,你创建了一个每日备份并与备份服务器同步,现在你不想在你的web服务器上保留备份的本地副本。
那么,您会等待传输完成,然后手动删除本地备份文件吗?这样做肯定有点麻烦,这种自动删除可以使用–remove-source-files
选项来完成。
rsync --remove-source-files -zvh backup.tar.gz root@192.168.0.151:/home/zcwyou/backups/
检查:
ls -l backup.tar.gz
9. 测试rsync
命令的作用
如果您是使用rsync
的新手,并且不知道某条命令的作用。rsync
可能会把目标文件夹中的东西弄得一团糟,然后找回丢失或整理凌乱的文件可能是件非常麻烦的工作。
使用–dry-run
选项将不会对文件进行任何更改,并显示命令的输出,如果输出显示与您想要的完全相同,那么您可以从命令中删除–dry-run
选项并在终端上再次运行。
rsync --dry-run --remove-source-files -zvh backup.tar.gz root@192.168.0.151:/home/zcwyou/backups/
10. 限制Rsync传输时的带宽
在将数据从一台机器传输到另一台机器时,可以使用–bwlimit
选项设置带宽限制。这个选项可以帮助我们限制Rsync占用的网络带宽。
rsync --bwlimit=100 -avzhe ssh /var/lib/rpm/ root@192.168.0.151:/root/tmprpm/
另外,默认情况下rsync
只同步更改的块和字节,如果你想完整同步整个文件或目录,那么你可以使用-W
选项。
rsync -zvhW backup.tar /home/zcwyou/backups/backup.tar
11. 总结
通过本文,您应该可以了解,如何在Linux系统中使用rsync
同步文件了吧,这是最常用的操作和软件哦。如果您觉得本文有用,快快收藏和转发吧。
评论前必须登录!
注册