使用unison实现文件夹同步
✨文章摘要(AI生成)
Unison 是一款跨平台双向文件同步工具,通过 SSH 加密传输实现本地与远程主机间的安全同步。文章详解其安装配置、实时监控脚本编写及常见使用场景,重点阐述如何通过配置文件定制同步策略、结合 inotify-tools 实现文件变动实时同步,并给出版本一致性维护与 screen 会话管理等实用技巧,为开发环境同步、日志备份等场景提供高效解决方案。
一、Unison简介
Unison是一款跨平台的文件同步工具,支持Windows、Linux、macOS等系统,能够实现本地或远程文件夹的双向同步。其核心特点包括:
- 双向同步:自动处理无冲突的更新,冲突部分提示用户选择策略;
- SSH安全传输:通过SSH协议加密传输数据,支持压缩传输优化带宽;
- 灵活配置:支持忽略特定文件/目录、保留文件属性(权限、属主等)。
二、环境准备
1. 安装Unison
在Linux系统(以CentOS 7为例)中安装:
# 添加EPEL源并安装
yum -y install epel-release
yum makecache
yum -y install unison
ubuntu 系统中使用 apt
进行安装即可
sudo apt install unison -y
2. 配置SSH免密登录
# 生成密钥对(默认路径:~/.ssh/)
ssh-keygen -t rsa
# 将公钥复制到远程主机(需替换目标IP)
ssh-copy-id root@目标主机IP
三、基本使用
1. 本地同步
# 同步本地两个目录(-batch启用全自动模式)
unison -batch /root/Files /root/Backup
2. 远程同步
# 格式:unison <本地目录> ssh://用户@远程主机IP//远程目录
unison -batch /root/Files ssh://root@192.168.43.166//root/Files
3. 测试连通性
unison -testServer /本地目录 ssh://用户@远程主机//远程目录
四、高级配置
1. 配置文件(default.prf)
在~/.unison/
下创建配置文件:
root = /root/test
root = ssh://root@192.168.3.34//root/test
batch = true # 自动模式
ignore = Path node_modules # 忽略node_modules目录
owner = true # 保留文件属主
group = true # 保留文件组
perms = -1 # 保留权限
sshargs = -C # SSH压缩传输
2. 常用参数
参数 | 功能说明 |
---|---|
-ignore "Name .git" | 忽略.git目录 |
-repeat 60 | 每60秒自动同步一次 |
-logfile /path/to/log | 记录同步日志 |
-force | 强制覆盖目标文件 |
五、实时同步方案
结合inotify-tools
实现文件变动监控:
#!/bin/bash
LOCAL_DIR="/root/test"
REMOTE_HOST="root@192.168.3.34"
REMOTE_DIR="/root/test"
# 监控文件变动事件(修改、创建、删除等)
inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f' \
-e modify,create,delete,attrib $LOCAL_DIR | while read file; do
unison -batch $LOCAL_DIR ssh://$REMOTE_HOST//$REMOTE_DIR
done
运行方式:使用nohup
或screen
保持后台运行。
六、注意事项
- 版本一致性:本地与远程主机需安装相同Unison版本;
- 防火墙配置:确保SSH端口(默认22)开放;
- 路径规范:远程目录需使用绝对路径(如
//root/test
); - 冲突处理:首次同步建议添加
-force
参数强制统一基线。
七、总结
Unison凭借其双向同步、SSH安全传输和灵活配置特性,成为跨平台文件同步的理想工具。通过结合inotify
监控脚本,可轻松实现实时同步,适用于日志备份、开发环境同步等场景。
扩展阅读:
- Unison官方文档
- 高级技巧:使用
screen -S unison
管理持久化同步会话
扩展
screen会话保持
使用screen建立一个独立的会话保持。
screen-S rsync #-S建立新的screen会话
unison default.prf #执行unison会话。
使用快捷键ctrl+a d(即按住ctrl,依次再按a,d)来保存这个会话窗口
screen -ls #查看screen会话
screen-r rsync #-r选项可以恢复会话
快捷键ctrl+a d(即按住ctrl,依次再按a,d)来保存这个会话窗口,当然程序还在自动进行不会关闭。
需要恢复会话的时候就需要执行
screen-r lnmp # lnmp就是刚开始设置的会话名称
如果在恢复会话的时候忘记了或者没有设定会话名称我们就要执行:
screen-ls
他会列出你所有的会话列表,然后使用:
screen-r # 会话名称来恢复会话窗口。
关闭screen的会话
exit
会提示:[screen is terminating],表示已经成功退出screen会话。
screen命令常用的一些快捷键:
ctrl+ac :在当前screen会话中创建窗口 ctrl+a w :窗口列表 ctrl+a n :下一个窗口 ctrl+a p :上一个窗口 ctrl+a 0-9 :在第0个窗口和第9个窗口之间切换