跟我一起学嵌入式linux开发之常用命名:第5节 拷贝命令家族(cp、scp、rsync) --- scp
1. scp功能
scp 命令可以在 2个 linux 主机间复制文件; scp 即secure copy, scp是linux系统下基于ssh的远程文件拷贝命令,所以,使用scp命令之前要保证目标主机开启了ssh server。
2.命令格式
scp [参数] [源路径] [目标路径]
#远程主机路径格式为 username@host:filename
3.主要命令参数
-1:使用ssh协议版本1;-2:使用ssh协议版本2;-4:使用ipv4;-6:使用ipv6;-B:以批处理模式运行;-C:使用压缩;-F:指定ssh配置文件;-l:指定宽带限制;-o:指定使用的ssh选项;-P:指定远程主机的端口号;-p:保留文件的最后修改时间,最后访问时间和权限模式;-q:不显示复制进度;-r:以递归方式复制。4.使用场景
场景1:从本地复制到远程
命令:
如上所示,第一次建立ssh链接时会询问,输入yes即可。由于scp是基于ssh登陆进行安全的远程文件拷贝,所以,拷贝时需要指定远程主机的用户名称以及对应的密码,只有经过认证的用户才具有拷贝权利,并不是可以随便拷贝的。
场景2:从远程复制到本地
命令:
$rm zicreate.txtrm:remove regular file ‘zicreate.txt’? y$scp root@10.239.85.241:/tmp/zicreate.txt ./root@10.239.85.241's password:zicreate.txt 100% 640 0.6KB/s 00:00$ ls -l zicreate.txt-rw-r--r--. 1 root root 640 Dec 28 02:52 zicreate.txt
场景1与场景2的操作是一样的,唯一的区别仅在于 [源路径] [目标路径] 的定义不同而已。
场景3:复制文件夹
使用scp 进行文件夹复制时只需要加上 "-r" 参数即可,其他如通配符之类的组合操作可以参考cp命令。使用方式如下:
默认进行复制操作时会显示传输进度以及传输速率。
其他参数相关操作实际使用较少,不再详述。
扩展
与scp相似有一个同样功能的命令rcp。scp 是 rcp 的加强版,是security cp,而 rcp 是不加密的remote cp。所以,有了scp 基本上不需要 rcp 了,本系列文章不再讲解 rcp 的使用。
脑洞
在这里先剧透一个牛逼的命令 nc --- Netcat。
以下演示如何通过 nc 进行文件以及目录的远程传输。
在这个示例中,假设有两台电脑 A / B。A作为服务器(ip=10.239.85.234),B为客户端(ip=10.239.85.241)。
1. 文件传输
Server
$ nc -l 1234 < zicreate.txt
Client
$ nc -n 10.239.85.234 1234 > recv.txt
在这里我们创建了一个socke服务在A的1234端口上,并且重定向 netcat 的输入为文件 zicreate.txt,那么当任何 client 成功连接到 server 该端口时,netcat 会发送文件 zicreate.txt 的内容到 client。
在 client 我们将接收到的数据重定向输出到 recv.txt,当 Client 连接到 server , server 发送文件内容, Client 保存文件内容.
当然,server 端也可以接收文件,方法如下:
同样是 A 作为Server,
Server
$ nc -l 1234 > recv.txt
Client
$ nc -n 10.239.85.234 1234 < recv.txt
2. 目录传输
发送一个文件很简单,但是如果我们想要发送多个文件,或者整个目录,一样很简单,只需要使用压缩工具tar,压缩后发送压缩包。
具体命令如下:
Server
$ tar -cvf – ./dir1 nc -l 1234
Client
$ nc -n 10.239.85.234 1234 tar -xvf -
在server 上,我们创建一个tar归档包并且通过"-"在控制台重定向它,然后使用管道重定向给netcat,netcat可以通过网络发送它。
在client 我们下载该压缩包,然后通过管道接收归档包并解压为文件夹。
如果想要节省带宽传输压缩包,我们可以使用bzip2或者其他工具压缩。
关于netcat 更多高级操作此处不在展开,留待以后讲解。
领取专属 10元无门槛券
私享最新 技术干货