如何使用scp在Linux服务器的后台传输文件?
Posted Bioinfarmer
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用scp在Linux服务器的后台传输文件?相关的知识,希望对你有一定的参考价值。
两台服务器间文件如何传输?对于小文件,可以先从Linux服务器传到window,再传到另一台服务器。对于大的文件,如测序数据、比对文件等。这样的方法显然太笨。
scp一个命令就能解决。
一、上传
常规操作
从当前服务器上传到另一个服务器。
# 文件
$ scp file yourname@192.168.0.101:your/path
# 目录
$ scp -r dir yourname@192.168.0.101:your/path
以上端口默认是22的,能满足我们大部分需求。然,当你在服务器上做过端口映射(或者外网连接地址),端口就不是22的情况时,需要指定目标端口号。
$ scp -P 10001 file yourname@192.168.0.101: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 yourname@192.168.0.101: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 yourname@192.168.0.101:/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服务器的后台传输文件?的主要内容,如果未能解决你的问题,请参考以下文章