1、rsync 工具介绍
数据备份,毫无疑问很重要,从字面上的意思可以理解为remote sync (远程同步)。Rsync不仅可以远程同步数据(类似于scp),当然还可以本地同步数据(类似于cp),但不同于cp或scp的一点是,rsync不像cp/scp一样会覆盖以前的数据(如果数据已经存在),它会先判断已经存在的数据和新数据有什么不同,只有不同时才会把不同的部分覆盖掉。
如果linux没有rsync命令,使用 yum install -y rsync 安装,见下图,
上图中,举了个例子,使用命令 rsync -av /etc/passwd /tmp/1.txt,将 /etc/passwd 文件拷贝到 /tmp/ 目录下并且更改文件名称为 1.txt 。a 这个选项,包含了好几个选项,等会再细讲。v 这个选项是可视化的意思,可以看到拷贝的过程。
rsync 同时还支持远程拷贝,输入命令 rsync -av /etc/passwd [email protected]:/tmp/1.txt,回车,见下图,
远程的拷贝,用户名@IP地址,首次连接会提示是否要继续连接,我们输入yes继续,当建立连接后,再输入密码。这条命令的结果没有列出 passwd 这个文件名,是因为刚刚已经拷贝过了,并且192.168.218.128 是本机的IP地址。用这个命令,仅仅是说明这个拷贝的方法和格式。
rsync的命令格式:
rsync [OPTION]... SRC DEST
rsync [OPTION]... SRC [USER@]IP:DEST
rsync [OPTION]... [USER@]IP:SRC DEST
rsync [OPTION]... [USER@]IP::SRC DEST
rsync [OPTION]... SRC [USER@]IP::DEST
OPTION 表示选项,例如 -av,SRC 表示原目录或文件,DEST 表示目标目录或文件,中括号[]里的user@是可以省略的。
刚才的例子当中,第一个例子即为第一种格式,第二个例子即为第二种格式,但不同的是,我并没有加user@host ,如果不加默认指的是当前终端的用户.。第三种格式是从远程目录同步数据到本地。第四种以及第五种格式使用了两个冒号“:”,这种方式和前面的方式的不同在于验证方式不同,稍后详细介绍。
省略 user@,见下图,
2、rsync 常用选项
-a 归档模式,表示以递归方式传输文件,并保持所有属性,等同于-rlptgoD, -a选项后面可以跟一个 --no-OPTION 这个表示关闭,-rlptgoD中的某一个例如 -a--no-l 等同于-rptgoD
-r 对子目录以递归模式处理,主要是针对目录来说的,如果单独传一个文件不需要加-r,但是传输的是目录必须加-r选项,类似cp时的-r选项
-v 打印一些信息出来,比如速率,文件数量等,知道同步的过程
-l 保留软链结
-L 向对待常规文件一样处理软链结,如果是原目录或文件中有软连接文件,则加上该选项后将会把软连接指向的目标文件拷贝到目标目录或文件下
-p (小写)保持文件的权限属性
-o 保持文件的属主信息
-g 保持文件的属组信息
-D 保持设备文件信息
-t 保持文件时间属性
--delete 删除目标文件中原文件没有的文件
--exclude 过滤指定文件,如 --exclude "logs"会把文件名包含logs的文件或者目录过滤掉,不同步。文件名可以是万用字符模式(如*.txt)
-P (大写)显示同步过程,比如速率,比 -v 更加详细
--progress 在同步的过程中可以看到同步的过程状态,比如统计要同步的文件数量、同步的文件传输速度等等
-u 加上这个选项后,如果目标目录的文件比原目录的文件新,则不同步
-z 传输时压缩
先来做一下准备工作,同步一个测试目录,见下图,
命令 rsync -av /root/111/ /tmp/111_dest/ ,将原目录/root/ 下的目录 /111/ 同步到 /tmp/ 目录下并且更改名称为 /111_dest/ 目录。-av 在这边的作用就是包含拷贝目录、软链接、属主、属组、文件权限等选项,可视化拷贝过程。
lys3这边是软链接文件,指向了原文件 /tmp/lys2,见下图,
上图就是a选项里面的l起的作用,保留了软链接文件。与 l 相对应的就是 L,接着来操作一下 L 选项,输入命令 rsync -avL /root/111/ /tmp/111_dest/,这边输入L就相当于把 a 选项里面的 l 覆盖掉,见下图,
上图中,直接输入命令 rsync -avL /root/111/ /tmp/111_dest/ ,出现报错,显示软链接失效。为了保证软链接可以正常,要创建一个文件 /tmp/lys2,使用命令 ls -l 111/ 查看的时候,就能看到软链接指向的文件显示正常。接着使用同步命令加 L 选项就可以执行了,结果第二行显示 lys3 ,说明同步了 lys3 文件,那么 lys3 真正指向的文件是 /tmp/lys2 ,接着详细查看一下原目录和目标目录,见下图,
目录 /tmp/111_dest/ 下的文件 lys3,原本应该是软链接文件的,现在变成了一个正常的文件,而目录 /root/111/ 下的文件 lys3 还是一个软链接文件,指向的是 /tmp/lys2 。接着往 lys2 里面写一些东西,来验证一下,见下图,
在文件 /tmp/lys2 上面输入内容,再同步一下目录,接着查看目录 /tmp/111_dest/lys3 的内容,会发现就是文件 lys2 上的内容。这个就是 L 选项的作用,可以把软链接指向的原文件拷贝到目标文件。
接着往下操作,见下图,
在目录 /tmp/111_dest/ 目录下,新建一个文件 new.txt,然后使用同步命令 --delete 选项,命令执行的过程中出现了 deleting new.txt ,删除了这个文件,然后就看到新建的 new.txt 文件没有了。这就是 --delete 的作用。
现在来看一下过滤 --excluede 的作用,见下图,
命令 rsync -avL --exclude "*.txt" /root/111/ /tmp/111_dest/ ,执行的过程中看不到后缀 .txt 的文件,结果也确实没有出现 .txt 的文件。
上面是单个 --exclude 的命令,还有多个的情况,输入命令 rsync -avL --exclude "*.txt" --exclude "lys*" /root/111/ /tmp/111_dest/,见下图,
同时去掉了 .txt 结尾和 lys 开头的文件。
来看一下 P(大写)的选项,见下图,
看一下 u 选项,准备工作见下图,
回车,进入下图,
按下字母 e ,进入下图,
随机输入上图红色框框的内容,保存并退出。接着输入命令 rsync -avP /root/111/ /tmp/111_dest/,回车,见下图,
可以看到,文件 12.txt 的内容并没有改变。说明这些操作都是以原文件为主,目标文件做了什么改变都只能和原文件保持同步。
现在先编辑一下 12.txt 文件的内容,输入命令 vim 12.txt,回车,见下图,
随机输入上图红色框框的内容,保存并退出。接着输入命令 rsync -avPu /root/111/ /tmp/111_dest/,回车,见下图,
可以看到,12.txt 文件的内容还在,并没有和原文件保持同步 ,而原文件 /root/111/12.txt 里面的内容还是原来的内容,没有受目标文件的影响。这就是 u 选项的作用。