如何使用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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM