两台Linux系统之间要想传输文件可以采用的方法有好多种,例如scp传输、rsync差别化传输、nc传输等,下边将为你们详尽讲解一下每位技巧的使用。
scp传输
当两台LINUX主机之间要互传文件时可使用SCP命令来实现
scp传输速率较慢,但使用ssh通道保证了传输的安全性
复制文件
将本地文件拷贝到远程
scp文件名–用户名@计算机IP或则计算机名称:远程路径
从远程将文件拷回本地
scp–用户名@计算机IP或则计算机名称:文件名本地路径
命令格式
scp local_file remote_username@remote_ip:remote_folder
或者
scp local_file remote_username@remote_ip:remote_file
或者
scp local_file remote_ip:remote_folder
或者
scp local_file remote_ip:remote_file
第1,2个指定了用户名,命令执行后须要再输入密码,第1个仅指定了远程的目录,文件名子不变,第2个指定了文件名;
第3,4个没有指定用户名,命令执行后须要输入用户名和密码,第3个仅指定了远程的目录,文件名子不变,第4个指定了文件名;
复制目录
将本地目录拷贝到远程
scp-r目录名用户名@计算机IP或则计算机名称:远程路径
从远程将目录拷回本地
scp-r用户名@计算机IP或则计算机名称:目录名本地路径
命令格式
scp -r local_folder remote_username@remote_ip:remote_folder
或者
scp -r local_folder remote_ip:remote_folder
第1个指定了用户名,命令执行后须要再输入密码;
第2个没有指定用户名,命令执行后须要输入用户名和密码;
事例
scp -r /home/space/music/ root@www.cumt.edu.cn:/home/root/others/
scp -r /home/space/music/ www.cumt.edu.cn:/home/root/others/
参数解读
参数描述
-a
尽可能将档案状态、权限等资料都照原状给以复制
-r
若source中富含目录名,则将目录下之档案亦皆依序拷贝至目的地
-f
若目的地早已有相同档名的档案存在,则在复制前先给以删掉再行复制
-v
和大多数linux命令中的-v意思一样,拿来显示进度.可以拿来查看联接,认证,或是配置错误
-C
使能压缩选项
-P
选择端口.注意-p早已被rcp使用
-4
强行使用IPV4地址
-6
强行使用IPV6地址
举例说明把计算机名为“v111.nn”下所有的东西都拷贝到本机/home/admin/目录下
scp -r * v111.nn:/home/admin/
以admin的身分把IP地址为“192.168.219.125”,/home/admin/test目录下所有的东西都拷贝到本机/home/admin/目录下
scp -r admin@192.168.219.125:/home/admin/test /home/admin/
rsync差别化传输(支持断点续传,数据同步)
rsync -av /backup/ -e ssh root@192.168.1.110:/bak
-a:archive归档模式,表示以递归形式传输文件,并保持所有文件属性,链接等,等于-rlptgoDrsync——remotesync。
rsync是Linux系统下的文件同步和数据传输工具,它采用“rsync”算法linux操作系统介绍,可以将一个顾客机和远程文件服务器之间的文件同步,也可以在本地系统上将数据从一个分区备份到另一个分区上。
假如rsync在备份过程中出现了数据传输中断,恢复后可以继续传输不一致的部份。rsync可以执行完整备份或增量备份。
它的主要特征有:
可以镜像保存整个目录树和文件系统;可以很容易做到保持原先文件的权限、时间、软硬链接;无须特殊权限即可安装;可以增量同步数据,文件传输效率高,因此同步时间短;可以使用rcp、ssh等方法来传输文件,其实也可以通过直接的socket联接;支持匿名传输,以便捷进行网站存盘等;加密传输数据,保证了数据的安全性;
管线传输(增加IO开支)
gzip -c sda.img | ssh root@192.168.1.110 "gunzip -c - > /image/sda.img"
对sda.img使用gzip压缩,-c参数表示输出到stdout,即通过管路传送
gunzip-c–中的”-“表示接收从管线传进的sdtin
nc传输(一种网路的数据流重定向)
nc所做的就是在两台笔记本之间构建tcp或udp链接,并在两个端口之间传输数据流,是一种网路的数据流重定向
使用dd结合nc命令网路克隆c盘分区
主机:
dd if=/dev/vda | gzip -c | nc -l 50522
待恢复机:
nc 192.168.215.63 50522 | gzip -dc | dd of=/dev/sda
dd命令克隆/dev/vdac盘,并使用gzip压缩,把数据流重定向到本机50522端口,待恢复机上使用nc联接主机50522端口,才能接收主机50522端口的比特数据流,之后使用gzip解压缩,并恢复到/dev/sdac盘
dd命令读取的是c盘磁道,所以不论c盘文件系统,或则分区表,c盘MBR信息,dd都还能复制,可以使用bs,count参数控制要克隆的大小
比如ddbs=512count=1if=/dev/vdaof=mbr.img只复制c盘vda的第一个磁道512K字节数据(引导程序和分区表)
一般,可以用scp完成两台主机间的文件传输任务linux之间传文件,但在主机间未完善信任关系的情况下,scp每次都须要输入密码,用上去觉得不是很便捷,之前这篇笔记介绍过不用输入密码执行脚本或传输文件的方式,但对于一些临时性的任务linux之间传文件,打算工作还是比较麻烦。
whatisnc?
nc是netcat的缩写,关于nc是哪些,man如是说:arbitraryTCPandUDPconnectionsandlistens
nc可以便捷地实现任意TCP/UDP端口的侦听,联接的构建,端口的扫描,等等。也即,nc既可以作为server以TCP或UDP形式侦听指定端口,也可以作为client发起TCP联接或方法UDP包。下边要介绍的方法就是利用其TCP联接来实现主机间文件传输的。
nc的控制参数不少,常用的几个参数如下所列:
备注:nc要联接的目的端口可以是具体的整数,也可以直接通过服务名指定linux手机软件,这些情况下,nc会负责将name映射至某个well-knownport(可用cat/etc/services查看这种端口跟服务名的映射关系)
参数描述
-l
用于指定nc将处于侦听模式。指定该参数,则意味着nc被当成server,侦听并接受联接,而非向其它地址发起联接
-pport
指定nc要使用的端口。若之前已指定-l,则这儿的-p指定具体的侦听端口;若未指定-l,则表示向这个端口发起联接
-shostname/ip-address
指定发送数据的源IP地址,适用于多网死机器
-u
指定nc使用UDP合同,默认为TCP
-v
输出交互或出错信息,菜鸟调试时尤为有用
usenctotransmitdatabetweenhosts
经过前面对nc的简介,恐怕不少朋友早已晓得如何用nc来实现两台机器间的文件传输了。这儿对实现流程做简单说明。
在数据接收方的机器上侦听指定端口
nc -l -p 8210 > demo.txt # 在本机8210端口侦听TCP连接,将收到的数据写入文本文件
nc -l -p 8210 > demo.tar.bz2 # 在本机8210端口侦听TCP连接,将收到的数据写成压缩文件
在数据发送方机器上向指定地址(ip+port)以TCP形式发送数据
nc dest_ip 8210 # 向ip为dest_ip的机器的8210端口发送demo.txt文件
nc dest_ip 8210
-v复印出错信息
接收方:nc -v -l -p 8210
发送方:nc -v dest_ip 8210
注意:使用nc传文件时,需注意操作顺序,receiver先侦听端口,sender向receiver所在机器的该端口发送数据。否则发送失败。
构建文件服务器
不仅里面集中传输文件的形式之外,还可以通过简历文件服务器,之后通过网路挂载的形式传输,这些适用于常常性的拷贝,下边是一个挂载ftp服务器的反例
挂载ftp服务器
yum install curlftpfs
mkdir /data/ftp
curlftpfs username:password@ftp.yourdomain.com /data/ftp
至此关于Linux系统之间传输文件的方式分享教程到此结束,欢迎诸位同学在评论区留言。