我有使用下面的命令在遠程主機上創建的文件夾的科恩88外殼腳本:不關閉的ssh
ssh [email protected]$host "mkdir -p $somedir" 2>> $Log
,之後傳送使用該
scp -o keepalive=yes $somedir/$file [email protected]$host:$somedir
在一個循環一堆文件
我不知道第一個命令是否會在腳本結束後打開連接?
我有使用下面的命令在遠程主機上創建的文件夾的科恩88外殼腳本:不關閉的ssh
ssh [email protected]$host "mkdir -p $somedir" 2>> $Log
,之後傳送使用該
scp -o keepalive=yes $somedir/$file [email protected]$host:$somedir
在一個循環一堆文件
我不知道第一個命令是否會在腳本結束後打開連接?
每個命令打開和關閉自己的連接。使用像tcpdump
這樣的工具很容易驗證這一點。
這是由於用於終止進程的系統調用關閉了所有打開的文件描述符(包括套接字文件描述符)這一事實的結果。關閉套接字會關閉套接字後面的連接。
這意味着如果我有10個文件要傳輸,我將在腳本執行期間打開和關閉10 + 1 = 11個連接......是否有更有效的方法來執行此操作? – Dima
有許多方法可以在單個連接上覆制一堆文件。一個很好的選擇是[rsync](http://linux.die.net/man/1/rsync)(請參閱William Pursell的評論)。另外,scp可以複製多個文件,請參閱[man scp](http://linux.die.net/man/1/scp)。 –
新版本的ssh能夠在單個物理連接上覆用多個虛擬連接。所以你可以做的是在後臺啓動一些長時間運行的ssh命令,啓用連接複用,然後後續連接將以更快的啓動時間重新使用該連接。有關連接複用的信息,請參閱ssh_config
的手冊頁,相關選項爲ControlMaster
和ControlPath
。
但正如William Pursell所建議的,如果是選項,rsync
可能更簡單快捷。
它不會。你可以使用'ps'或'top'來檢查它。 – cnicutar
'man rsync' ... –