这篇文章总结下 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 |
一下子方便了很多。