Linux和Windows同步文件

标签: Linux 分类: 操作系统 创建时间:2019-10-12 12:53:17 更新时间:2025-01-17 10:39:22

我有两台电脑,一台是linux,一台是windows,想要同步文件,我找到了rsync软件。

1.windows安装cwRsyncServer

下载地址:http://backupassist.com/rsync/,安装方式就不解释了,双击就好了,这里有个输入用户名密码的地方,cwRsyncServer会新建一个你输入的用户名的新用户,这个要记住,以后可能需要用到。

2.在windows服务中启动RsyncServer服务

打开windows服务,启动RsyncServer服务。

3.修改配置文件

在开始菜单中,找到rsync.config配置打开(右键以管理员身份打开)。

添加如下两行

1
2
3
uid = 0
gid = 0

这里的 [ test ] 是模块名称,path的格式要注意,修改配置后,要重启Rsync服务(不重启也行,反正我没重启也执行成功了)。

4.在linux上执行rsync命令

1
2
## 说明 ./ 将当前目录的文件,传递到远程服务器命名为test目录下,其中zlc-pc为安装服务端时键入的用户名,后面加上ip地址和::两个冒号
rsync -av ./ zlc-pc@192.168.1.5::test

这是简单的传递文件的方式,还有其他复杂的参数,可以自行查阅参考文章。执行成功:

参考文章:
1.一个局域网内Windows和linux系统如何共享文件:https://blog.csdn.net/u011531010/article/details/52984041/
2.日常运维–rsync同步工具:https://my.oschina.net/ccLlinux/blog/1859116
3.记linux与Windows之间实现文件实时同步的方案:https://blog.51cto.com/jianglipan/1911676
4.window下安装rsyncServer:https://www.cnblogs.com/zhaojonjon/p/7630613.html
5.Linux下rsync命令使用总结:https://www.cnblogs.com/pengyunjing/p/10416405.html
6.Windows下cwRsync搭建步骤:https://www.cnblogs.com/stragon/p/3831438.html?utm_source=tuicool&utm_medium=referral (这个比较详细)

5.rsync格式

rsync [OPTION]... SRC DEST
rsync [OPTION]... SRC [USER@]HOST:DEST
rsync [OPTION]... [USER@]HOST:SRC DEST
rsync [OPTION]... [USER@]HOST::SRC DEST
rsync [OPTION]... SRC [USER@]HOST::DEST
rsync [OPTION]... rsync://[USER@]HOST[:PORT]/SRC [DEST]

对应于以上六种命令格式,rsync有六种不同的工作模式:

1)拷贝本地文件。当SRC和DES路径信息都不包含有单个冒号”:”分隔符时就启动这种工作模式。如:rsync -a /data /backup
2)使用一个远程shell程序(如rsh、ssh)来实现将本地机器的内容拷贝到远程机器。当DST路径地址包含单个冒号”:”分隔符时启动该模式。如:rsync -avz *.c foo:src
3)使用一个远程shell程序(如rsh、ssh)来实现将远程机器的内容拷贝到本地机器。当SRC地址路径包含单个冒号”:”分隔符时启动该模式。如:rsync -avz foo:src/bar /data
4)从远程rsync服务器中拷贝文件到本地机。当SRC路径信息包含”::”分隔符时启动该模式。如:rsync -av root@172.16.78.192::www /databack
5)从本地机器拷贝文件到远程rsync服务器中。当DST路径信息包含”::”分隔符时启动该模式。如:rsync -av /databack root@172.16.78.192::www
6)列远程机的文件列表。这类似于rsync传输,不过只要在命令中省略掉本地机信息即可。如:rsync -v rsync://172.16.78.192/www

6.rsync参数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
rsync 参数信息
-a, --archive 归档模式,表示以递归方式传输文件,并保持所有文件属性,等于-rlptgoD
-v, --verbose 详细模式输出
-z, --compress 对备份的文件在传输时进行压缩处理
-t, --times 保持文件时间信息
-o, --owner 保持文件属主信息
-p, --perms 保持文件权限
-g, --group 保持文件属组信息
-P:显示文件传输的进度信息。(实际上"-P"="–partial --progress",其中的"–progress"才是显示进度信息的)。
-n --dry-run :仅测试传输,而不实际传输。常和"-vvvv"配合使用来查看rsync是如何工作的。
-r --recursive:递归到目录中去。
:检查出mtime不同从而导致增量传输无效。
-D :是"–device --specials"选项的组合,即也拷贝设备文件和特殊文件。
-l --links:如果文件是软链接文件,则拷贝软链接本身而非软链接所指向的对象。
-R --relative:使用相对路径。意味着将命令行中指定的全路径而非路径最尾部的文件名发送给服务端,包括它们的属性。用法见下文示例。
–size-only :默认算法是检查文件大小和mtime不同的文件,使用此选项将只检查文件大小。
-u --update :仅在源mtime比目标已存在文件的mtime新时才拷贝。注意,该选项是接收端判断的,不会影响删除行为。
-d --dirs :以不递归的方式拷贝目录本身。默认递归时,如果源为"dir1/file1",则不会拷贝dir1目录,使用该选项将拷贝dir1但不拷贝file1。
–max-size :限制rsync传输的最大文件大小。可以使用单位后缀,还可以是一个小数值(例如:"–max-size=1.5m")
–min-size :限制rsync传输的最小文件大小。这可以用于禁止传输小文件或那些垃圾文件。
–exclude :指定排除规则来排除不需要传输的文件。
–delete :以SRC为主,对DEST进行同步。多则删之,少则补之。注意"–delete"是在接收端执行的,所以它是在
:exclude/include规则生效之后才执行的。
-b --backup :对目标上已存在的文件做一个备份,备份的文件名后默认使用"~“做后缀。
–backup-dir:指定备份文件的保存路径。不指定时默认和待备份文件保存在同一目录下。
-e :指定所要使用的远程shell程序,默认为ssh。
–port :连接daemon时使用的端口号,默认为873端口。
–password-file:daemon模式时的密码文件,可以从中读取密码实现非交互式。注意,这不是远程shell认证的密码,而是rsync模块认证的密码。
-W --whole-file:rsync将不再使用增量传输,而是全量传输。在网络带宽高于磁盘带宽时,该选项比增量传输更高效。
–existing :要求只更新目标端已存在的文件,目标端还不存在的文件不传输。注意,使用相对路径时如果上层目录不存在也不会传输。
–ignore-existing:要求只更新目标端不存在的文件。和”–existing"结合使用有特殊功能,见下文示例。
–remove-source-files:要求删除源端已经成功传输的文件。斜体样式

7.rsync拉取远程文件

使用rsync也可以拉去远程文件到本地,输入用户名,ip地址、模块名就可以了。

1
2
3
4
rsync -avz --progress --partial  用户名@192.168.1.5::模块名/test.txt ./

## 带权限的(这个在我试验中没有遇到)
rsync -avz --progress --partial --password-file=/etc/rsyncd.sectrts zlc-pc@192.168.1.5::zhf/test.txt ./
参考文章:
1.rsync拉取远程文件:https://www.cnblogs.com/nerrissa/p/4795811.html (说了很多,但是好像不满足我的要求,使用的是ssh登录)
2.rsync 拉取文件:https://blog.csdn.net/luoganttcc/article/details/99097384 (这里也用到了ssh登录)
3.rsync 通过密码文件实现远程同步:https://blog.csdn.net/huanghanqian/article/details/53612571?utm_source=blogxgwz0
4.linux安装 rsync 客户端和相关权限认证:https://www.cnblogs.com/fanweisheng/p/11327153.html

8.排除某些文件

1
2
# 将/home/mysql/backup目录拷贝到/home/mysql/backup2目录下,/root/exclude.list中指定文件不拷贝。
rsync -av --exclude-from=/root/exclude.list /home/mysql/backup /home/mysql/backup2/

exclude.list文件中编写相对于/home/mysql/backup目录的文件或目录,一行一个目录或文件,而不是全路径。比如:排除backup目录下的a文件夹,exclude.list写一行:a,而不是:/home/mysql/backup/a

1
2
3
4
.git
node_modules
.deploy_git
Folder2/**.tar
参考文章:
1.rsync通过exclude排除多文件/目录实例:https://www.centos.bz/2017/08/rsync-exclude-multiple-file-dir/
2.rsync:仅在一个目录中排除特定文件类型: http://cn.voidcc.com/question/p-yyoigemy-uu.html

常见问题

(1) cwrsync invalid uid nobody
在服务器端的rsyncd.conf文件中添加下面两行:

1
2
uid = 0
gid = 0
参考文章:
1.cwrsync invalid uid nobody 解决方法:https://blog.csdn.net/enlaihe/article/details/52797794

(2) chdir failed

打开windows端的C:\Program Files (x86)\ICW 安装目录,查看rsyncd.log日志文件,出现了:No such file or directory,表示没有这个文件夹。

打开windows端的rsync.conf配置文件,其中的path, /cygdrive为固定,/c表示c盘,/work表示c盘的work文件夹,在c盘新建一个work文件夹即可,同理,在其他磁盘中的文件夹,只需要填写相应的盘符就好。

如果日志文件中提示的是权限问题,可以根据需要查看参考文章,进行权限的配置。

参考文章:
1.rsync @ERROR: chdir failed 的解决方法:https://www.jb51.net/article/60194.htm

(3) 关于密码的问题
很多参考文章中,写了要生成一个密码文件,但是我用windos做服务端,用linux做客户端,并不需要这么一个文件,也没用生成这么一个文件,等用到的时候再说吧。

小额赞助
本人提供免费与付费咨询服务,感谢您的支持!赞助请发邮件通知,方便公布您的善意!
**光 3.01 元
Sun 3.00 元
bibichuan 3.00 元
微信公众号
广告位
诚心邀请广大金主爸爸洽谈合作
每日一省
isNaN 和 Number.isNaN 函数的区别?

1.函数 isNaN 接收参数后,会尝试将这个参数转换为数值,任何不能被转换为数值的的值都会返回 true,因此非数字值传入也会返回 true ,会影响 NaN 的判断。

2.函数 Number.isNaN 会首先判断传入参数是否为数字,如果是数字再继续判断是否为 NaN ,不会进行数据类型的转换,这种方法对于 NaN 的判断更为准确。

每日二省
为什么0.1+0.2 ! == 0.3,如何让其相等?

一个直接的解决方法就是设置一个误差范围,通常称为“机器精度”。对JavaScript来说,这个值通常为2-52,在ES6中,提供了Number.EPSILON属性,而它的值就是2-52,只要判断0.1+0.2-0.3是否小于Number.EPSILON,如果小于,就可以判断为0.1+0.2 ===0.3。

每日三省
== 操作符的强制类型转换规则?

1.首先会判断两者类型是否**相同,**相同的话就比较两者的大小。

2.类型不相同的话,就会进行类型转换。

3.会先判断是否在对比 null 和 undefined,是的话就会返回 true。

4.判断两者类型是否为 string 和 number,是的话就会将字符串转换为 number。

5.判断其中一方是否为 boolean,是的话就会把 boolean 转为 number 再进行判断。

6.判断其中一方是否为 object 且另一方为 string、number 或者 symbol,是的话就会把 object 转为原始类型再进行判断。

每日英语
Happiness is time precipitation, smile is the lonely sad.
幸福是年华的沉淀,微笑是寂寞的悲伤。