Linux中的各类上传下载的传输命令总结

前言

在Linux中我们通常会发现要用Linux做一些事的时候,通常不会仅仅只有一种方法,不仅仅只有一种命令,你会发现它有很多作用相同的命令。实际上,Linux的内核有很多的版本,经过了多次的升级,每次升级都会将一些用Linux系统的人员开源出来的优秀的代码写入内核。而为了方便老用户的使用Linux中的一些经典的命令,并没有被丢弃。但是,有的时候你的系统没有这些命令的话,可以从外部下载。有一些命令,你可能不太会用到,但是存在就是有价值的。
下面介绍的是关于Linux中的一些上传及下载传输命令的总结。(长期更新中)


由于每个命令的详细的参数有很多,这里就不一一介绍了,只讲几个常用的参数。




一、rz 与 sz 命令


(可用于Linux与Windows的传输)

以前常用xshell的人,会发现这一款软件自带的xftp挺好用的,只需要点击就可以使Linux或Windows中的之间相互传输。后来xshell收费了,对一些功能进行了限制,如果要使用xftp就得找**版了。实际上,Linux中有xz和sz命令,也可以做到Linux与Windows间文件的传输。

对于一些Linux系统中如果没有此命令,可进行安装
yum -y install lrzsz



1.上传
将windows端的文件上传入Linux的服务器

rz

直接输入此命令,会弹出窗口,选择要上传的文件,点击后等待完成。(注意此命令上传时,文件会上传到当前位置)

Linux中的各类上传下载的传输命令总结



2.下载

只能传输文件,不能直接传输文件夹,要传输文件夹时要先打包或压缩,再传压缩的包,下载到本地后再解压,可得到文件夹。

sz pythonbiji.txt 或 sz python/*

在sz命令后输入要下载到Windows的单个文件,或多个文件;然后通过界面选择下载到的位置。

Linux中的各类上传下载的传输命令总结




二、scp 命令



scp 命令用于Linux服务器之间文件的传输

传输一个大文件时,如果目标服务器上存在该文件,再次传输是将所有的数据都再传输一次,因此传输相对慢,低于rsync

-r 为指定目录,加上可传输目录 -v 可显示文件传输过程



1.给别人传输文件

<1>
将自己的/root/python目录的所有文件包括目录都传输到服务器IP为123.121.123.123,用户为root的服务器的/root目录下

scp -r /root/python [email protected]:/root/


<2>
格式:
scp + 参数(可选) +要传输的本地文件(可用相对路径) +目标服务器的用户+目标服务器ip+文件要传输到的位置(用绝对路径)


<3>
如果未推公钥到目标服务器则,传输要输入目标服务器的目标用户的登陆密码


<4>
当传输时文件时,如果源文件要传输到的位置处为一个文件时,就会将目标服务器的那个文件覆盖
例如:
scp -r /etc/hosts node2:/root/1.txt

Linux中的各类上传下载的传输命令总结


<5>
当传输目录时,如果源目录要传输到的位置处为同名目录时,就会将目标服务器的那个目录中的所有文件覆盖


<6>
当传输目录时,如果源目录要传输到的位置处为文件时,就会将目标服务器的那个文件变为目录,并将源目录中的文件放入
(不论目标服务器是否有此文件)

Linux中的各类上传下载的传输命令总结

Linux中的各类上传下载的传输命令总结



2.从别人那里取文件

<1>
将服务器IP为123.121.123.123,用户为root的服务器的/root/python/python2.txt文件拉到我的/root/myps的目录下

scp [email protected]:/root/python/python2.txt /root/myps


<2>
格式:
scp + 参数(可选) + 目标服务器的用户 +目标服务器ip + 目标服务器上的目标文件(用绝对路径)+传输的文件要存放的本地位置(可用相对路径)


<3>
如果未推公钥到目标服务器则,传输要输入目标服务器的目标用户的登陆密码


<4>当从别人那里获取文件时,如果目标服务器的位置没有此目标文件,就会报错

Linux中的各类上传下载的传输命令总结


<5>
当从别人那里获取文件时,如果传输的文件要存放的本地位置为目录就会放入此目录;如果传输的文件要存放的本地位置是文件,就会对本地的那个文件覆盖


<6>
当从别人那里获取目录时,如果传输的文件要存放的本地位置处是文件,就会将那个文件变为目录,并将目标目录中的文件放入
(不论本地服务器是否有此文件)




三、rsync 命令

全称为差异化传输(支持断点续传,数据同步)

操作类似于scp,可限速,可支持本地复制。

可使本地和远程两个主机之间的文件达到同步,每次只传送两个文件的不同部分,而不是每次都整份传送,因此速度相当快。

-a 会以递归方式传输文件,并保持所有文件属性 -P会显示备份过程 -p 会保持文件权限

注意同步目录时末尾有无“/”,差别较大(有“/”代表传输目录下的文件;无“/”代表传输目录)


1.同步文件给远程的主机


<1>
将自己的/root/python目录的所有文件(不包括目录)都同步传输到服务器IP为123.121.123.123,用户为root的服务器的/root/python目录(有此目录时)下
rsync -aP /root/python/ [email protected]:/root/python

远程主机的python目录结构为 /root/python


<2>
将自己的/root/python目录都同步传输到服务器IP为123.121.123.123,用户为root的服务器的/root/python目录下
rsync -aP /root/python [email protected]:/root/python

远程主机的python目录结构为 /root/python/python


<3>
格式
rsync + 参数(可选) +要传输的本地文件(可用相对路径) +目标服务器的用户+目标服务器ip+文件要传输到的位置(用绝对路径)


<4>
(目录的末尾无论有无“/”时)当同步传输目录时,如果源目录要传输到的位置处为文件(有此文件)时,就会报错sending incremental file list
rsync -aP [email protected]/ node2:/root/1.txt

Linux中的各类上传下载的传输命令总结


<5>
(目录的末尾有“/”时)当同步传输目录时,如果源目录要传输到的位置处为文件(无此文件)时,就会在远程的主机上生成此名的目录,并将目录下的文件同步到该目录下


<6>
(目录的末尾无“/”时)当同步传输目录时,如果源目录要传输到的位置处为文件(无此文件)时,就会在远程的主机上生成此名的目录,并将源目录同步到该目录下


<7>
当同步传输文件,源文件要传输到的位置处为文件时,如果远程的主机上无此文件就会生成此文件,远程主机有此文件就会同步内容到此文件



2.将远程主机的文件同步到本地

<1>
将服务器IP为123.121.123.123,用户为root的服务器的/root/python目录同步到/root/python目录下
rsync -aP [email protected]:/root/python /root/python


<2>
将服务器IP为123.121.123.123,用户为root的服务器的/root/python目录下的文件同步到/root/python目录下
rsync -aP [email protected]:/root/python/ /root/python


<3>
格式:
rsync + 参数(可选) + 目标服务器的用户 +目标服务器ip + 目标服务器上的目标文件(用绝对路径)+传输的文件要存放的本地位置(可用相对路径)


<4>
当同步远程主机的目录到本地时,若本地给出的位置上的目录不存在,就会按本地给出的位置上的名字生成目录,并将目录下的文件同步到其中


<5>
当同步远程主机的文件到本地时,若本地给出的位置上的文件不存在,就会按本地给出的位置上的名字生成文件,并将文件内容同步到其中




四、管道传输

可通过端口进行Linux之间大量小文件的快速传输。

管道传输可以降低IO开销

在linux中经常会看到stdin,stdout和stderr,分别为终端的标准输入(standard input),标准输出( standard out)和标准错误输出(standard error)。

当linux开始执行程序的时候,程序默认会打开这3个文件流,这样就可以对终端进行输入输出操作。

1.传输

先将本机的 python.txt 使用gzip压缩;再通过-c参数(通过管道传送输出到stdout),进行管道传送,输出到远程服务器;然后远程服务器从管道接收文件,解压并重定向名为2.txt的文件。

gunzip -c - 中的”-“表示接收从管道传进的sdtin

gzip -c python.txt | ssh [email protected] “gunzip -c - > 2.txt”



五、nc传输(一种网络的数据流重定向)

是强大的端口扫描工具

一般与dd命令结合,常用来做网络的克隆磁盘分区

可以在两台电脑之间远程的建立tcp或udp连接,并在两个端口之间传输数据

需要再两台服务器之间执行操作

可指定任意无服务的端口传输



1.使用方法

<1>
发送端:

使用dd命令克隆/dev/vda磁盘,并使用gzip压缩,把数据重定向到本机12312端口
dd if=/dev/vda | gzip -c | nc -l 12312


<2>
接收端:

使用nc连接主机12312端口,就能接收主机12312端口的比特数据流,然后使用gzip解压缩,并恢复到/dev/sda磁盘
nc 192.168.1.2 12312 | gzip -dc | dd of=/dev/sda


<3>
先开启接收端的要用于接收端口和接收文件内容的文件的名字

发送端再开启相应的端口传输文件


<4>
格式:

接收端命令:
nc -l 接收端ip地址(可不写,默认是自己的IP) 端口号 > 接收的文件名

发送端命令:
nc 接收端的IP(必填写) 端口号 < 发送的文件名

<5>
传输的时候注意网络和防火墙;云服务器要开启使用nc时用到的端口