如何使用scp在Linux服务器的后台传输文件?

两台服务器间文件如何传输?对于小文件,可以先从Linux服务器传到window,再传到另一台服务器。对于大的文件,如测序数据、比对文件等。这样的方法显然太笨。

scp一个命令就能解决。

一、上传

常规操作

从当前服务器上传到另一个服务器。

# 文件
$ scp file  [email protected]:your/path
# 目录
$ scp -r dir [email protected]:your/path

以上端口默认是22的,能满足我们大部分需求。然,当你在服务器上做过端口映射(或者外网连接地址),端口就不是22的情况时,需要指定目标端口号。

$ scp -P 10001 file  [email protected]:your/path

以上,回车后会提示你输入目标服务器的密码。如果没反应,八成是连接有问题。可先ping下两台服务器的网络,是否正常。

建议

虽然可传输文件夹(目录),但对于大文件建议还是压缩后再传,提高传送速度。大文件压缩工具推荐pigz(搭配tar使用),压缩速度很快,且压缩率不输于其他软件。

$ tar -cvf - test |pigz -k >test.tar.gz

另外,涉及到任何文件传送,注意有md5相匹配,养成良好习惯。

$ md5sum test.tar.gz >md5

后台运行

Linux间传输的另一个最大优点,就是可以将任务放后台运行,无需等待。

但是你如果直接在上面scp加上nohup scp... &是不起作用的。这里需要一点Linux的基础。

首先运行scp:

$ nohup scp file  [email protected]:your/path
# nohup可省略

输入密码后,输入ctrl+z挂起。

再输入bg使进程在后台运行。

$ bg
#或 %1,表示后台第一个工作号, %可忽略
$ bg %1

注意在这里虽然任务已在后台运行,但如果你此时关闭当前会话窗口或客户端,任务是不会继续执行的。这显然不是我们真正想要的,我有过教训。

如何让任务真正在后台运行,即关闭窗口后还能继续?

只需在上面一步基础上再加上disown -h将作业忽略HUP信号(从当前的shell中移除作业)。

# 查看任务
$ jobs
$ disown -h 
#或
$ disown -h %1
# 若有多个任务,可选择
$ disown -h %2

# 查看任务运行状态和父进程号
$ ps -ef|grep scp
# 退出
$ exit

这时,即使你断开会话任务,任务仍然可在后台运行。

disown参数解析:

-h    标记每个作业标识符,这些作业将不会在shell接收到sighup信号时接收到sighup信号。
-a    移除所有的作业。
-r    移除运行的作业。

二、下载

从目标服务器下载文件到当前服务器。

$ scp [email protected]:/home/test.txt /your/path

和上传文件很相似,不赘述。

https://www.cnblogs.com/no7dw/archive/2012/07/07/2580307.html
https://www.cnblogs.com/jyzhao/p/6253728.html
https://www.jianshu.com/p/76221b8b1af8
https://blog.csdn.net/qq_29307291/article/details/72819802
http://c.biancheng.net/view/1079.html

你可能感兴趣的:(如何使用scp在Linux服务器的后台传输文件?)