兩台服務器間文件如何傳輸?對於小文件,可以先從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