在日常运维工作中,我们需要对重要文件做好备份,或将其上传到NAS。利用rsync这款工具可以轻松实现。
rsync是 Linux 常用的文件同步的工具,它可以在本地计算机与远程计算机之间,或者两个本地目录之间同步文件
接下来,我们通过几个场景简单来说说它的使用。
✈️本地同步
在本地磁盘中,有两个目录dir1dir2 想要其内容保持实时同步,可以利用下面命令。
# rsync -a 源目录或文件 目标目录或文件
#dir1下所有文件同步到dir2下
rsync -a /dir1/ /dir2/
参数说明:
-a选项递归地同步文件,并保留文件属性,如文件权限、组和用户所有权、修改时间、符号链接等。


两个目录保持同步
☢️远程同步
将本地机器的文件,如何同步到公网服务器呢?在配置之前,我们需要配置ssh密匙对,方便无密码登录远程服务器。
首先,在本地服务器执行命令
ssh-keygen -t ed25519 -C "914101530@qq.com"

复制公钥到远程服务器
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@remote_host

完成后,免密测试
ssh root@82.157.***.***

免密测试
文件上传测试:
将本地dir1目录下的文件,上传到远程服务器的 /home/data目录。
rsync -avz --progress dir1/ root@82.157.210.200:/home/data/

😘单向同步
适用于本地为主,远程为辅。 创建同步脚本(如 sync.sh):
#!/bin/bash
rsync -avz --delete --progress /path/to/dir1/ root@82.157.***.***:/home/data/
添加权限后,在添加定时任务。
chmod +x sync.sh
#配置定时任务,5分钟执行一次。
crontab -e
*/5 * * * * /path/to/sync.sh >> /var/log/sync.log 2>&1
📧实时同步
使用 inotify-tools 监听本地目录变化后自动触发同步: 首先,我们创建一个同步脚本
#!/bin/bash
DIR="/path/to/dir1"
REMOTE="root@82.157.***.***:/home/data/"
while inotifywait -r -e modify,create,delete,move $DIR; do
rsync -avz --delete --progress $DIR/ $REMOTE
done
然后,后台运行脚本。
nohup ./realtime_sync.sh > sync.log &
利用rsync可以方便高效的做好文件备份和同步工作。此外还有其他优秀的工具,如unison,适合于双向同步。有兴趣的可以试试。