10.28 rsync工具介绍
10.29/10.30 rsync常用选项
10.31 rsync通过ssh同步
10.32/10.33 rsync通过服务同步
10.34 linux系统日志
10.35 screen工具
10.36 xargs用法详解
10.28 rsync工具介绍(rsync要掌握)
Linux文件同步工具-rsync
Rsync命令是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件。rsync使用所谓的“rsync算法”来使本地和远程两个主机之间的文件达到同步,这个算法只传送两个文件的不同部分,而不是每次都整份传送,同时可以对上传部分先进行压缩,因此rsync效率很高。rsync可以复制显示目录属性及文件,而且可以选择性地压缩及递归复制。但是rsync每次执行rsync命令都会遍历目标目录,如果文件数达到了一定规模,每次遍历就会消耗很多资源。
Rsync 可以搭配 rsh 或 ssh 甚至使用 daemon 模式。 Rsync server 会打开一个 873 的服务通道 (port) ,等待对方 Rsync 连接。连接时, Rsync server 会检查口令是否相符,若通过口令查核,则可以开始进行文件传输。第一次连通完成时,会把整份文件传输一次,下一次就只传送二个文件之间不同的部份。
Rsync 支持大多数的类 Unix 系统,无论是 Linux 、 Solaris 还是 BSD 上都经过了良好的测试。此外,它在 windows 平台下也有相应的版本,比较知名的有 cwRsync 和 Sync2NAS 。
Rsync 的基本特点如下:
1.可以镜像保存整个目录树和文件系统;
2.可以很容易做到保持原来文件的权限、时间、软硬链接等;
3.无须特殊权限即可安装;
4.优化的流程,文件传输效率高;
5.可以使用 rcp 、 ssh 等方式来传输文件,当然也可以通过直接的 socket 连接;
6.支持匿名传输。
核心算法介绍:
假定在名为α和β的两台计算机之间同步相似的文件 A 与 B ,其中α对文件 A 拥有访问权,β对文件 B 拥有访问权。并且假定主机α与β之间的网络带宽很小。那么 rsync 算法将通过下面的五个步骤来完成:
1.β将文件 B 分割成一组不重叠的固定大小为 S 字节的数据块。最后一块可能会比 S 小。
2.β对每一个分割好的数据块执行两种校验:一种是 32 位的滚动弱校验,另一种是 128 位的 MD4 强校验。
3.β将这些校验结果发给α。
4.α通过搜索文件 A 的所有大小为 S 的数据块 ( 偏移量可以任选,不一定非要是 S 的倍数 ) ,来寻找与文件 B 的某一块有着相同的弱校验码和强校验码的数据块。这项工作可以借助滚动校验的特性很快完成。
5.α发给β一串指令来生成文件 A 在β上的备份。这里的每一条指令要么是对文件 B 经拥有某一个数据块而不须重传的证明,要么是一个数据块,这个数据块肯定是没有与文件 B 的任何一个数据块匹配上的。
#rsync能传输文件,备份数据;实现本机到本机的传输,也能本机到远程的传输;
#rsync是增量备份
yum install -y rsync #安装rsync命令
##假设现在有两个目录A、B,A目录内的数据是实时更新的;需求是每隔一小时将A目录数据拷贝到B目录
可以使用rsync,因为rsync是增量备份,会备份A新增加或变更的数据到B,也能远程使用rsync
例:将/etc/passwd 拷贝到/tmp/1.txt文件
rsync -av /etc/passwd /tmp/1.txt
[root@xinlinux-02 tmp]# rsync -av /etc/passwd ./1.txt
sending incremental file list
passwd
sent 1,329 bytes received 35 bytes 2,728.00 bytes/sec
total size is 1,237 speedup is 0.91
远程拷贝/etc/passwd到192.168.233.129的/tmp/1.txt
rsync -av /etc/passwd root@192.168.233.129:/tmp/1.txt
然后会提示输入192.168.188.128的密码
[root@xinlinux-02 tmp]# rsync -av /etc/passwd root@192.168.233.129:/tmp/1.txt
bash: rsync: 未找到命令
rsync: connection unexpectedly closed (0 bytes received so far) [sender]
rsync error: remote command not found (code 127) at io.c(226) [sender=3.1.2]
##原因是192.168.233.129没有安装rsync
[root@xinlinux-02 tmp]# rsync -av /etc/passwd root@192.168.233.129:/tmp/1.txt
sending incremental file list
passwd
sent 1,329 bytes received 35 bytes 909.33 bytes/sec
total size is 1,237 speedup is 0.91
rsync格式
rsync [OPTION] … SRC DEST
#本机拷贝
rsync [OPTION] … SRC [user@]host:DEST
##通过ssh的方式同步本机拷贝到远程机器
rsync [OPTION] … [user@]host:SRC DEST
#通过ssh的方式将远程机器的文件拷贝到本机
rsync [OPTION] … SRC [user@]host::DEST
#通过服务的方式同步本机拷贝到远程机器
rsync [OPTION] … [user@]host::SRC DEST
#通过服务的方式同步将远程机器的文件拷贝到本机
#SRC是源目录/文件
#DEST是目标目录/文件
#user@可以不写,如果不写的话表示当前用户
10.29/10.30 rsync常用选项
rsync常用选项
-
-a 包含-rtplgoD选项
-
-r 同步目录时要加上,类似cp时的-r选项
-
-v 同步时显示一些信息,让我们知道同步的过程
-
-l 保留软连接
-
-L 加上该选项后,同步软链接时会把源文件给同步
-
-p 保持文件的权限属性
-
-o 保持文件的属主
-
-g 保持文件的属组
-
-D 保持设备文件信息
-
-t 保持文件的时间属性
-
--delete 删除DEST中SRC没有的文件
-
--exclude 过滤指定文件,如--exclude “logs”会把文件名包含logs的文件或者目录过滤掉,不同步
-
-P 显示同步过程,比如速率,比-v更加详细
-
-u 加上该选项后,如果DEST中的文件比SRC新,则不同步(文件的新旧指的是mtime的时间)
-
-z 传输时压缩(传输前压缩,传输完后解压,节省传输过程带宽)
-
--port 指定端口号
本地同步例子:
#-L,将root目录下111目录同步到tmp目录下的111_dest目录
rsync -av /root/111/ /tmp/111_dest/
[root@xinlinux-02 ~]# rsync -av /root/111/ /tmp/111_dest/
sending incremental file list
./
1.txt
test.txt -> /root/2.txt
sent 151 bytes received 41 bytes 384.00 bytes/sec
total size is 11 speedup is 0.06
[root@xinlinux-02 ~]# rsync -avL /root/111/ /tmp/111_dest/
sending incremental file list
test.txt
sent 129 bytes received 35 bytes 328.00 bytes/sec
total size is 0 speedup is 0.00
因为111目录里面有一个软链接,-a选项里面的小l只会同步软链接,并不会同步软链接的源文件,所以同步后的软链接指向的还是原来的源文件
[root@xinlinux-02 ~]# rsync -av /root/111/ /tmp/111_dest/
sending incremental file list
./
1.txt
test.txt -> /root/2.txt
sent 151 bytes received 41 bytes 384.00 bytes/sec
total size is 11 speedup is 0.06
[root@xinlinux-02 ~]# ll /tmp/111_dest
总用量 0
-rw-r--r--. 1 root root 0 9月 2 09:12 1.txt
lrwxrwxrwx. 1 root root 11 9月 2 09:24 test.txt -> /root/2.txt
如果用了L,那a选项里面的小l的含义会被覆盖掉,同步软链接时会把源文件给同步,软链接文件被替换成了源文件
rsync -avL /root/111/ /tmp/111_dest/
[root@xinlinux-02 ~]# rsync -avL /root/111/ /tmp/111_dest/
sending incremental file list
test.txt
sent 129 bytes received 35 bytes 328.00 bytes/sec
total size is 0 speedup is 0.00
[root@xinlinux-02 ~]# ll /tmp/111_dest
总用量 0
-rw-r--r--. 1 root root 0 9月 2 09:12 1.txt
-rw-r--r--. 1 root root 0 9月 2 09:24 test.txt
##--delete 将111_dest目录下111目录没有的目录或文件删除掉
[root@xinlinux-02 ~]# ls 111/
1.txt test.txt
[root@xinlinux-02 ~]# ls /tmp/111_dest/
1.txt 5.txt test.txt
[root@xinlinux-02 ~]#