每天一个linux命令:拷贝命令家族(cp、scp、rsync) --- scp

每天一个linux命令:拷贝命令家族(cp、scp、rsync) — scp

1. scp功能

scp 命令可以在 2个 linux 主机间复制文件; scp 即secure copy, scp是linux系统下基于ssh的远程文件拷贝命令,所以,使用scp命令之前要保证目标主机开启了ssh server。

更多精彩请查看:www.zicreate.com

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:从本地复制到远程

命令:

$ scp zicreate.txt root@10.239.85.241:/tmp/
The authenticity of host ‘10.239.85.241 (10.239.85.241)’ can’t be established.
ECDSA key fingerprint is 21:fe:c6:5f:91:7e:b6:28:b3:fe:aa:8e:24:3a:2d:2b.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added ‘10.239.85.241’ (ECDSA) to the list of known hosts.
root@10.239.85.241’s password:
zicreate.txt 100% 640 0.6KB/s 00:00

如上所示,第一次建立ssh链接时会询问,输入yes即可。由于scp是基于ssh登陆进行安全的远程文件拷贝,所以,拷贝时需要指定远程主机的用户名称以及对应的密码,只有经过认证的用户才具有拷贝权利,并不是可以随便拷贝的。

场景2:从远程复制到本地

命令:

$ rm zicreate.txt
rm: 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 -r root@10.239.85.241:/tmp/dir1 ./ #从远程拷贝文件夹到本地

$ scp -r ./dir1 root@10.239.85.241:/tmp #从本地拷贝文件夹到远程

默认进行复制操作时会显示传输进度以及传输速率。

其他参数相关操作实际使用较少,不再详述。

扩展

与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 更多高级操作此处不在展开,留待以后讲解。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值