linux下传输文件命令

  • Post author:
  • Post category:linux




linux下传输文件命令



lrzsz

介绍: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

在这里插入图片描述



scp

  • 主机之间互相上传文件
[root@server1 ~]# scp test1 root@192.168.174.20:/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.
root@192.168.174.20's password: 
test1                                                    100%   49    26.6KB/s   00:00 



rsync

rsync是类unix下的一款数据镜像备份工具——remote sync。

Rsync 的基本特点如下:

  • 可以镜像保存整个目录树和文件系统;
  • 可以很容易做到保持原来文件的权限、时间、软硬链接等;
  • 无须特殊权限即可安装; 优化的流程,文件传输效率高;
  • 可以使用 rcp、ssh 等方式来传输文件,当然也可以通过直接的 socket 连接;
  • 支持匿名传输;
  • rsync的主要特点就是增量传输,只对变更的部分进行传送。



rsync原理


rsync



linux

下同步文件的一个高效算法,用于同步更新两处计算机的文件和目录,并适当利用查找文件中的不同块以减少数据传输。

rsync

的主要特点就是增量传输,只对变更的部分进行传送。



增量同步算法

假如我们现在需要同步两个文件保持一致,并且只想传送不同的部分,那么我们就需要对两边的文件做

diff

,但是这两个问题在两台不同的机器上,无法做

diff

。如果我们做

diff

,就要把一个文件传到另一台机器上做

diff

,但这样一来,我们就传了整个文件,这与我们只想传输不同部的初衷相背。于是我们就要想一个办法,让这两边的文件见不到面,但还能知道它们间有什么不同。这就是

rsync

的算法。



安装部署服务端

  • 安装xineted服务
[root@server1 ~]# yum install rsync.x86_64 -y
[root@server1 ~]# yum install xinetd -y		# 用来部署rsync
  • 修改xineted配置文件
[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
}
  • 修改rsync配置文件
[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



rsync六种工作模式

  • 在server2上安装rsync
[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 root@192.168.174.10::		# 注意主机防火墙
test  
  • 模式二,本地文件拷贝到本地,当src和dest都不包含有冒号时就启动从本地进行拷贝(cp命令)
[root@server2 ~]# mkdir /backup
[root@server2 ~]# ls
anaconda-ks.cfg  test1
[root@server2 ~]# rsync test1 /backup/
[root@server2 ~]# ls /backup/
test1
  • 模式三,本地文件拷贝到远程,当dest包含冒号时就启动拷贝到远程(scp 命令)
[root@server2 ~]# rsync test1 root@192.168.174.10:/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.
root@192.168.174.10's password: 
[root@server2 ~]# 

[root@server1 test]# ll /test/test1 
-rw-r--r-- 1 root root 49 9月   9 23:42 /test/test1
  • 模式四,将远程文件拷贝到本地,当src包含冒号的时候就启动远程拷贝到本地(scp 命令)
[root@server2 ~]# rsync root@192.168.174.10:/test/123 /backup/
root@192.168.80.128's password:
[root@server2 ~]# ll /backup/123
-rw-r--r-- 1 root root 0 3月 24 11:07 /backup/123
  • 模式五,从远程服务器拷贝到本地,当src使用两个冒号的时候启用这种方式,冒号后面跟的是服 务端设置的模块
[root@server2 ~]# rsync -r root@192.168.174.10::test /backup
Password: 			# 密码存在server1 /etc/rsync.passwd 中
[root@server2 ~]# ls /backup/
test1
  • 模式六,从本地拷贝到远程服务器
[root@server2 ~]# touch test2
[root@server2 ~]# rsync -r test2 root@192.168.174.10::test
Password: 
[root@server1 test]# ls /test
test1  test2



案例:定时备份

客户端需求

  1. 客户端提前准备存放的备份的目录,目录规则如下:/backup/主机IP时间
  2. 客户端在本地打包备份(系统配置文件、应用配置等)拷贝至/backup/主机IP时间
  3. 客户端最后将备份的数据进行推送至备份服务器
  4. 客户端每天凌晨1点定时执行该脚本
  5. 客户端服务器本地保留最近7天的数据,避免浪费磁盘空间

服务端需求

  1. 服务端部署rsync,用于接收客户端推送过来的备份数据
  2. 服务端需要每天校验客户端推送过来的数据是否完整
  3. 服务端需要每天校验的结果通知给管理员
  4. 服务端仅保留6个月的备份数据,其余的全部删除



客户端准备

  • 创建目录
[root@server2 ~]# mkdir /backup
  • 安装expect工具
[root@server2 ~]# yum install expect* -y
  • 准备expect脚本
[root@server2 ~]# vim rsync.exp
#!/usr/bin/expect
set mulu [lindex $argv 0]
set timeout 10
spawn rsync -avzr /backup/$mulu root@192.168.80.10::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 root@192.168.80.10::backup_server
expect rsync.exp $mulu

# 保留七天以内的数据
find /backup -mtime +7 -delete



服务端准备

  • 安装rsync
[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
  • 启动rsync
[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 root@192.168.174.10::
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



版权声明:本文为m0_51691302原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。