Linux 学习记录:scp 命令的几种用法

这篇文章总结下 scp 命令几种常见的使用方法,方便自己查找。

1. scp 命令介绍

scp 其实是一个 SSH 客户端工具,全称是 secure copy,其主要用途是做本机和远程服务器之间的文件拷贝,底层使用的是 ssh 协议,因此在跨主机之间拷贝文件时,具有安全性保障。

2. 常见使用方法

2.1 从服务器下载单个文件

首先在本地切换到想要保存服务器文件的目录,然后执行下列命令:

1
scp <username>@<hostname>:/datapool/workspace/tanjuntao/hello.txt .

注意:命令最后有一个 .,表示本机当前目录的意思。

2.2 从服务器下载整个文件夹

首先在本地切换到想要保存服务器文件夹的目录,然后执行下列命令:

1
scp -r <username>@<hostname>:/datapool/workspace/tanjuntao/TestDir .

唯一的区别是多了一个 -r 参数,表示递归下载,也就是下载一个文件夹。

2.3 上传单个文件到服务器

切换到本机需要上传的文件所在的文件夹下,然后执行下列命令:

1
scp Test.txt <username>@<hostname>:/datapool/workspace/tanjuntao/TestDir

2.4 上传整个文件夹到服务器

同样道理,上传文件夹需要加入 -r 参数 :

1
scp -r LocalDir <username>@<hostname>:/datapool/workspace/tanjuntao/TestDir

2.5 一次性上传多个文件

有时候需要将本地好几个文件一次性上传到服务器上,而不想多次执行单个上传文件的命令,可以这么做:

1
scp a.txt b.txt c.txt <username>@<hostname>:/datapool/workspace/tanjuntao/TestDir

即:将多个文件一个个列出来即可。

2.6 从服务器一次性下载多个文件

反过来,有时候也想要从服务器上一次性下载多个文件到本地,这种情况语法稍微特殊一点:

1
scp <username>@<hostname>:/datapool/workspace/tanjuntao/TestDir/\{a.txt, b.txt, c.txt\} .

服务器上的多个文件,需要放入到 {} 中,并且以逗号分隔开来,同时 {} 需要用反斜杠进行转义。

2.7 如果 ssh 服务不是使用默认的 22 的端口

有时候为了安全性考虑,服务器上的 sshd 服务不是在默认的 22 端口启动的,而是换了一个不容易猜测的端口,比方说 2323,这时候就需要在 scp 命令中引入一个指定端口的参数:-P (大写)参数。

前面的六种情况,都必须加入 -P 参数才能正常执行。以从本地传输多个文件到服务器为例,也就是 2.5 中的例子,现在命令需要修改为:

1
scp -P 2323 a.txt, b.txt <username>@<hostname>:/datapool/workspace/tanjuntao/TestDir

-P 参数必须紧跟在 scp 的后面。

3. 注意事项

scp 命令也是可以利用到本地的 SSH 配置文件 ~/.ssh/config 的,也就是可以用服务器别名来替代 <username>@<hostname>

比方说,如果 <username>@<hostname> 这台服务器在 config 文件中有个 jump 的别名,那么,上面的 2.7 就可以变成下面这样:

1
scp -P 2323 a.txt, b.txt jump:/datapool/workspace/tanjuntao/TestDir

一下子方便了很多。

Donate comment here