用 rsync 工具实现本地和远程服务器文件同步 | 安装和基本操作指南

Linux系统
226
0
0
2024-02-10

日常工作和学习中我们经常需要将本地的文件同步到远程 Linu 服务器中,或者要实现本地和服务器的文件同步。FTP 文件传输协议是大家都熟知的实现方案,今天给大家介绍一个很好用的工具 rsync

rsync

rsyncremote sync 的含义,表示远程同步,当时我们也可以同步两个本地的文件夹,此时命令的效果类型 cp 命令。

不过与其他文件传输工具(如 FTPscp)不同,rsync 的最大特点是会检查发送方和接收方已有的文件,仅传输有变动的部分(默认规则是文件大小或修改时间有变动)。

这个特性对于我们经常写博客的朋友也很有帮助,因为我们经常会需要将博客进行备份。

安装

根据系统类型的不同,安装的命令也不相同

# Debian
$ sudo apt-get install rsync

# Red Hat
$ sudo yum install rsync

# Arch Linux
$ sudo pacman -S rsync

# macOS
brew install rsync

了不起这边是 macOS 系统,就直接选择最后一种方式进行安装了,当然远程的服务器也需要进行安装。

基操

本地同步

本地使用 rsync 的命令为 rsync -r source destination,表示将 source 位置的文件夹里面的内容全部同步到 destination 文件夹里面,同时也支持多个 source 位置,命令是这样的 rsync -r source1 source2 destination

其中需要注意的是 -r表示递归,即包含子目录,而且是必须的,否则 rsync 运行不会成功。

执行命令 rsync -r source1 source2 ./destination 效果如下,会将 source1source2 两个文件夹都同步到 destination 文件夹下面,如果只同步文件则可以使用 rsync -r source1/ source2/ ./destination 则只会同步文件到目标文件夹。

虽然说上面的命令可以正常的使用,但是在真正使用命令的时候,我们会将上面命令中的 -r 参数替换成 -a 参数,因为 -a 参数不但可以递归同步同时也可以同步文件的元数据,比如创建时间,修改时间这些,所以 -a-r 参数更加实用。

同时为了让我们知道哪些文件被真正的同步了,我们还会实用 -v 参数,-v 参数会将真正同步了的文件在终端中输出出来,方便我们知晓,所以往往本地最终执行的命令是这样的。

rsync -av source destination

远程同步

上面的命令是在本地执行,如果想要将本地的文件同步到远程服务器,那我们就需要结合 SSH 协议来实现了,整体的命令是这样的

rsync -av source root@xxx.xxx.xxx.xxx:/destination

输入命令过后,在输入一下对应的 root 账号密码即可。

如果我们的 SSH 的端口不是默认的22 端口,则需要使用 -e 参数来设置端口,命令如下

rsync -av  -e 'ssh -p 22222' source root@xxx.xxx.xxx.xxx:/destination

可以看到服务器上面已经同步了对应的文件了

免密登录

正常在使用上面远程同步命令的时候,都需要我们再次手动输入服务器账号对应的密码,我们都知道 SSH 是可以免密登录的,我们只需要生成一个公钥和私钥,然后将公钥发送到服务器上面,发送的时候输入一次密码,以后在执行远程同步命令的时候就可以免密登录不用输入密码了。

先生成公钥和秘钥

ssh-keygen

根据提示一步一步回车就行,最终会在 .ssh 目录中生成id_rsaid_rsa.hub 两个文件,然后我们在通过下面的命令将公钥发送到远程服务器上面。

ssh-copy-id -i ./id_rsa.pub -p 22 root@xxx.xxx.xxx.xxx

发送的时候会要求输入一次密码,成功以后我们再执行同步命令,就不会再需要密码了。

扩展思考

至此我们已经实现了本地和远程服务器的文件同步功能,那么我们完全可以再更进一步,在本地搞个定时器,定期的自动执行同步功能,而不是每次我们都手动同步,这个就交给大家自己去实践了,感兴趣的可以去研究一下。

总结

参考文章:https://www.ruanyifeng.com/blog/2020/08/rsync.html