介绍:lrzsz是一款在linux里可代替ftp上传和下载的程序。
安装:yum -y install lrzsz
使用:
上传:rz
下载:sz filename
示例:
[root@server1 ~]# yum install -y lrzsz.x86_64
.................
[root@server1 ~]# echo "二零二一年九月九号晚十点四十三分" > test1
[root@server1 ~]# rz # 上传到linux
# 选择windows下需要上传的文件
[root@server1 ~]# sz test1 #下载文件到windows
[root@server1 ~]# scp test1 [email protected]:/root/
The authenticity of host '192.168.174.20 (192.168.174.20)' can't be established.
ECDSA key fingerprint is SHA256:l5y8+0D0KcBmCK2edW3ZSY7RyIDgBdlLOE10JAlVtKk.
ECDSA key fingerprint is MD5:60:21:02:4d:b8:ce:cd:bc:19:33:0d:58:d6:4c:bd:fe.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.174.20' (ECDSA) to the list of known hosts.
[email protected]'s password:
test1 100% 49 26.6KB/s 00:00
rsync是类unix下的一款数据镜像备份工具——remote sync。
Rsync 的基本特点如下:
rsync
是linux
下同步文件的一个高效算法,用于同步更新两处计算机的文件和目录,并适当利用查找文件中的不同块以减少数据传输。rsync
的主要特点就是增量传输,只对变更的部分进行传送。
假如我们现在需要同步两个文件保持一致,并且只想传送不同的部分,那么我们就需要对两边的文件做diff
,但是这两个问题在两台不同的机器上,无法做diff
。如果我们做diff
,就要把一个文件传到另一台机器上做diff
,但这样一来,我们就传了整个文件,这与我们只想传输不同部的初衷相背。于是我们就要想一个办法,让这两边的文件见不到面,但还能知道它们间有什么不同。这就是rsync
的算法。
[root@server1 ~]# yum install rsync.x86_64 -y
[root@server1 ~]# yum install xinetd -y # 用来部署rsync
[root@server1 ~]# vim /etc/xinetd.d/rsync
service rsync
{
disable = no
socket_type = stream
wait = no
user = root
server = /usr/bin/rsync
server_args = --daemon
port = 873
log_on_failure = USERID
}
[root@server1 ~]# vim /etc/rsyncd.conf
[test]
path = /test
uid = root
gid = root
max connections = 2
timeout = 300
read only = false
auth users = root
secrets file = /etc/rsync.passwd
strict modes = yes
use chroot = yes
[root@server1 ~]# vim /etc/rsync.passwd
root:200988
[root@server1 ~]# chmod 600 /etc/rsync.passwd
[root@server1 ~]# systemctl start xinetd.service
[root@server1 ~]# ss -tanl | grep 873
LISTEN 0 64 :::873 :::*
[root@server1 ~]# mkdir /test
[root@server1 ~]# touch /test/123
[root@server2 ~]# yum install rsync.x86_64 -y
rysnc工具的参数
rsync 相关参数
-v:显示rsync过程中详细信息。可以使用"-vvvv"获取更详细信息。
-P:显示文件传输的进度信息。(实际上"-P"="--partial --progress",其中的"--progress"才是显示进度信息的)。
-n --dry-run :仅测试传输,而不实际传输。常和"-vvvv"配合使用来查看rsync是如何工作的。
-a --archive :归档模式,表示递归传输并保持文件属性。等同于"-rtopgDl"。
-r --recursive:递归到目录中去。
-t --times:保持mtime属性。强烈建议任何时候都加上"-t",否则目标文件mtime会设置为系统时间,导致下次更新
:检查出mtime不同从而导致增量传输无效。
-o --owner:保持owner属性(属主)。
-g --group:保持group属性(属组)。
-p --perms:保持perms属性(权限,不包括特殊权限)。
-D :是"--device --specials"选项的组合,即也拷贝设备文件和特殊文件。
-l --links:如果文件是软链接文件,则拷贝软链接本身而非软链接所指向的对象。
-z :传输时进行压缩提高效率。
-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:要求删除源端已经成功传输的文件。
-h, --help 显示帮助信息
[root@server2 ~]# rsync --list-only [email protected]:: # 注意主机防火墙
test
[root@server2 ~]# mkdir /backup
[root@server2 ~]# ls
anaconda-ks.cfg test1
[root@server2 ~]# rsync test1 /backup/
[root@server2 ~]# ls /backup/
test1
[root@server2 ~]# rsync test1 [email protected]:/test
The authenticity of host '192.168.174.10 (192.168.174.10)' can't be established.
ECDSA key fingerprint is SHA256:l5y8+0D0KcBmCK2edW3ZSY7RyIDgBdlLOE10JAlVtKk.
ECDSA key fingerprint is MD5:60:21:02:4d:b8:ce:cd:bc:19:33:0d:58:d6:4c:bd:fe.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.174.10' (ECDSA) to the list of known hosts.
[email protected]'s password:
[root@server2 ~]#
[root@server1 test]# ll /test/test1
-rw-r--r-- 1 root root 49 9月 9 23:42 /test/test1
[root@server2 ~]# rsync [email protected]:/test/123 /backup/
[email protected]'s password:
[root@server2 ~]# ll /backup/123
-rw-r--r-- 1 root root 0 3月 24 11:07 /backup/123
[root@server2 ~]# rsync -r [email protected]::test /backup
Password: # 密码存在server1 /etc/rsync.passwd 中
[root@server2 ~]# ls /backup/
test1
[root@server2 ~]# touch test2
[root@server2 ~]# rsync -r test2 [email protected]::test
Password:
[root@server1 test]# ls /test
test1 test2
客户端需求
服务端需求
[root@server2 ~]# mkdir /backup
[root@server2 ~]# yum install expect* -y
[root@server2 ~]# vim rsync.exp
#!/usr/bin/expect
set mulu [lindex $argv 0]
set timeout 10
spawn rsync -avzr /backup/$mulu [email protected]::backup_server
expect Password
send "123456\r"
expect eof
[root@server2 ~]# vim beifen.sh
#!/bin/bash
# 准备压缩文件的目录
mulu=`ip a | grep global|awk -F'[ /]+' '{print $3}'`_`date +%F`
echo $mulu
mkdir -pv /backup/$mulu &> /dev/null
# 打包待发送的数据
tar zcf /backup/$mulu/conf.tar.gz /etc/passwd /etc/vimrc &> /dev/null
touch /backup/$mulu
# 发送数据
#rsync -avzr /backup/$mulu [email protected]::backup_server
expect rsync.exp $mulu
# 保留七天以内的数据
find /backup -mtime +7 -delete
[root@server1 ~]# yum install rsync.x86_64 -y
[root@server1 ~]# cat /etc/rsyncd.conf
[backup_server]
path = /backup
uid = root
gid = root
max connections = 2
timeout = 300
read only = false
auth users = root
secrets file = /etc/rsync.passwd
strict modes = yes
use chroot = yes
[root@server1 ~]# mkdir /backup -pv
[root@server1 ~]# cat /etc/rsync.passwd
root:123456
[root@server1 ~]# chmod 600 /etc/rsync.passwd
[root@server1 ~]# systemctl start rsyncd.service
[root@server1 ~]# ss -tanl
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 5 *:873 *:*
LISTEN 0 128 *:22 *:*
LISTEN 0 100 127.0.0.1:25 *:*
LISTEN 0 5 :::873 :::*
LISTEN 0 128 :::22 :::*
LISTEN 0 100 ::1:25 :::*
[root@server2 ~]# rsync --list-only [email protected]::
backup_server
[root@server2 ~]# for i in {1..30};do date -s 2021/08/$i; /root/beifen.sh ;
done
[root@server2 backup]# ll
总用量 0
drwxr-xr-x 2 root root 25 8月 23 00:00 192.168.80.20_2021-08-23
drwxr-xr-x 2 root root 25 8月 24 00:00 192.168.80.20_2021-08-24
drwxr-xr-x 2 root root 25 8月 25 00:00 192.168.80.20_2021-08-25
drwxr-xr-x 2 root root 25 8月 26 00:00 192.168.80.20_2021-08-26
drwxr-xr-x 2 root root 25 8月 27 00:00 192.168.80.20_2021-08-27
drwxr-xr-x 2 root root 25 8月 28 00:00 192.168.80.20_2021-08-28
drwxr-xr-x 2 root root 25 8月 29 00:00 192.168.80.20_2021-08-29
drwxr-xr-x 2 root root 25 8月 30 00:00 192.168.80.20_2021-08-30
[root@server1 backup]# ll
总用量 0
drwxr-xr-x 2 root root 25 8月 1 00:00 192.168.80.20_2021-08-01
drwxr-xr-x 2 root root 25 8月 2 00:00 192.168.80.20_2021-08-02
drwxr-xr-x 2 root root 25 8月 3 2021 192.168.80.20_2021-08-03
drwxr-xr-x 2 root root 25 8月 4 2021 192.168.80.20_2021-08-04
drwxr-xr-x 2 root root 25 8月 5 2021 192.168.80.20_2021-08-05
drwxr-xr-x 2 root root 25 8月 6 2021 192.168.80.20_2021-08-06
drwxr-xr-x 2 root root 25 8月 7 2021 192.168.80.20_2021-08-07
.................................
drwxr-xr-x 2 root root 25 8月 29 2021 192.168.80.20_2021-08-29
drwxr-xr-x 2 root root 25 8月 30 2021 192.168.80.20_2021-08-30