10.28 rsync工具介绍
10.29/10.30 rsync常用选项
10.31 rsync通过ssh同步
Linux文件同步工具 rsync
非常实用和重要的一个工具。在日常的运维工作中每天都要用到。传输文件从A到B,备份到远程的数据等都会使用到这个工具。 不仅仅可以从一台到另一台也可以从本机到本机从一个目录到另一个目录,类似cp但是又不一样。
比如,A目录下数据拷贝到B目录去,而且A目录的数据一直在更新,要求每小时拷贝一次。
但是如果是使用cp命令的话,就会覆盖了。但是覆盖后就完全不知道增加的文件是什么了,每次增加的时候无法体现。同时会浪费IO,读写同时进行。
这个时候就不需要使用cp了,使用rsync,它可实现增量的拷贝,同步的时候仅同步变更的文件。也支持远程。两个不同的ip机器,也可以使用rsync远程的同步。
本地路径的拷贝
rsync -av 原始目录 目标目录
-v 可视化,即可看到拷贝的过程。注意,使用这个命令和选项的时候,目标目录必须都存在,否则的话不行。不会自动生成路径目录。
远程路径的拷贝,目标机器的用户以及ip地址都需要完整
rsync -av /目录 用户名@ip:/目录
rsync -av /etc/passwd root@192.168.133.130:/tmp/1.txt 注意第一次发送的时候目标机器没有安装rsync包,所以没法接收。
以下就是rsync的语法 src源目录/文件 dest目标目录
rsync [option] ...src dest
rsync [option] ...src [user@]host:dest
rsync [option] ...[user@]host:src dest 将远程的目录或文件拷贝到本地的目录下,前面是远程的,后面是本地的
rsync [option] ...src [user@]host::dest 两个冒号和一个冒号是不一样的
rsync [option] ...[user@]host::src dest
rsync的常用选项
-a 包含了-rtplgoD就是说-a all 就包括了后面的那些选项 -r -t -p -l -g -o -D 只要写一个-a 就可以了
-r 同步目录时候要加上,类似cp的时候-r选项
-v 可视化,告诉你同步的过程信息
-l 保留软链接
-L 加上该选项后,同步软链接时候会把源文件给同步,不仅仅是软链接这个文件,同时真正的软链接指向的文件也过去了。这样的话就不会出现只来软的不来硬的了。
-p 保持文件的权限属性 755 644到目标机器后的权限依然不变
-o 保持文件的属主 如果目标那边没有这个属主,就会显示puid
-g 保持文件的属组 这边是root 那边也是root
-D 保持设备文件信息
-t 保持文件的时间属性 各种修改时间 创建时间等等还是保持一样
--delete 删除目标目录中源目录没有的文件 比如A目录到B目录后,如果想保持一摸一样的状态,B中有A没有的文件,就会将这个删掉。这个很有用,如果想保持一摸一样就加这个选项。
--exclude 过滤指定文件,如--exclude “logs”会把文件包含logs的文件或目录过滤掉,不同步,支持通配
-P 显示同步过程,比如速率。比-v更详细
-u update的意思。加上该选项后,如果目标目录中的文件比源文件新就不同步。A有123三个文件 B有124三个文件 但是B中12比A中的新,修改时间更新。所以如果A中的文件虽然拷贝过去了,但是实际更老,所以加上-u就不覆盖了。
-z zip的意思 传输时压缩,这样更快。传之前压缩,传到后解压,节省带宽。
10.30 rsync常用选项(下)
同步目录的时候需要在目录的后面加上一个斜杠,目标目录也要加,同时要有新的目录的名字
-av的作用是 a基本上全部包括那些信息了。
可以从下面看到,修改时间,其他的所有的属性都是按照原来的来的。
-L的作用是将软链接指向的源文件拷贝过去,然后拷贝之后的软链接文件变成了一个文件,而它这个文件的内容就是之前软链接指向的文件,但是此时它已经不是软链接了,而是一个包含值的文件。
--delete 目的是两个目录完全一致,如镜像一般。
--exclude 去掉不想要的文件/文件类型,不支持连写, 但是支持一个一个写,--exclude "*.txt" --exclude "aming*" 过滤掉txt文件以及aming开头的文件
-P 对于传输很大的文件的时候,监控文件传输过程非常有帮助。
如果有特殊需求希望目标目录下的某个文件不被覆盖,因为它有某种原因在目标目录下保持比源目录文件新。这个时候就加上u选项,可以保护目标目录下更新的文件不被源目录替换。
rsync通过ssh同步
rsync通过ssh方式同步
rsync -av test1/ 192.168.133.132:/tmp/test2/
既可以将本机传到其他机器,也可以其他机器传到本机。(推文件和拉文件)
假如对方端口不是22,就需要加一个选项指定端口 -e "ssh -p 22"
rsync -av -e "ssh -p 22" test1/192.168.166.132:/tmp/test2