我想在兩台 Linux 電腦之間傳輸檔案(音樂資料夾)。在尋找最佳方法後,我發現有地段這樣做的方法。我知道有人問過這個問題很多,到處和每時每刻。這樣做的主要問題是,最近對於 Linux 初學者在 2011 年完成這項任務的最佳方法還沒有明確的共識(甚至取決於某些參數)。
因此,本著 Stack Exchange 網站的精神,我希望這與我的具體情況無關,而更多是對其他人的指導,以及如何透過本地網路在兩台 Linux 電腦之間傳輸檔案。我認為維基百科對很多人來說都是有用的。
這是我目前發現的:
- SSH
- sshfs
- SCP
- sftp
- 網路檔案系統
- 森巴舞
- 給予者
什麼是最簡單的?最靈活?最簡單?最好的解決方案?各自的優點和缺點是什麼?還有其他(更好)的選擇嗎?選擇最佳方法的參數是什麼(解決方案可能取決於文件數量、文件大小、簡易性與靈活性,...)?
答案1
在Linux環境中,無論是安全性或易用性,ssh是最好的選擇。您列出的 SSH、SSHFS、SCP 和 SFTP 都只是建構在 SSH 協定之上的不同服務。 SCP 非常易於使用,它的工作方式與 CP 類似,但您可以在路徑中提供使用者名稱和電腦名稱。因此,我們可以像 那樣執行 CP cp ~/music/ ~/newmusic/
,但我們也可以輕鬆地scp ~/music/ user@host:~/newmusic
將其發送到名為 host 的電腦。就是這樣 - 我們不需要設置任何東西。如果您沒有設定憑證或其他驗證,系統會提示您輸入另一台電腦上的帳戶密碼(當然,scp 與 ssh 共用這些設定)。
SFTP 是一種可以輕鬆在遠端檔案系統上執行大量操作的工具 - 它的工作方式與 FTP 類似,但它透過 SSH 運行,因此非常安全且只需要 SSH 伺服器。man sftp
將告訴您有關如何使用它的所有資訊。我使用 SFTP 不僅僅是為了在兩台電腦之間移動資料夾,當您需要執行大量操作(例如在另一台電腦上重新排列檔案)時,它會更有用。
SSHFS 只是將 SFTP 擴展到檔案系統:它允許您將虛擬主機安裝到檔案系統中,因此網路操作完全透明。 SSHFS 適用於半永久性設置,而不僅僅是一次性檔案傳輸。設定起來需要更多的努力,您可以閱讀專案網站。
如果您需要在混合作業系統環境中工作,Samba 將成為您的下一個最佳選擇。 Windows 和 OS X 完全自動支援 Samba,Linux 也支援 Samba,儘管有時使用起來很困難。
答案2
若要傳送目錄,請 cd 到要在執行傳送的電腦上傳送其內容的目錄內部,然後執行下列操作:
tar -cz . | nc -q 10 -l -p 45454
在接收內容的電腦上,cd 到您希望內容出現的位置並執行以下操作:
nc -w 10 $REMOTE_HOST 45454 | tar -xz
替換$REMOTE_HOST
為執行發送的電腦的 IP/主機名稱。您也可以使用不同的連接埠來代替45454
。
這裡實際發生的情況是,「接收」計算機透過連接埠 45454 連接到發送計算機,並接收目錄的 tar 和 gzip 內容,並將其直接傳遞給 tar(和 gzip)以將其解壓縮到當前目錄。
快速範例(使用 localhost 作為遠端主機)
電腦1台
caspar@jumpy:~/nctest/a/mydir$ ls
file_a.txt file_b.log
caspar@jumpy:~/nctest/a/mydir$ tar -cz . | nc -q 10 -l -p 45454
電腦2
caspar@jumpy:~/nctest/b$ ls
caspar@jumpy:~/nctest/b$ nc -w 10 localhost 45454 | tar -xz
caspar@jumpy:~/nctest/b$ ls
file_a.txt file_b.log
答案3
一次性動作推薦使用scp。
但是,如果您發現目錄可能有效,並且需要多次移動它以保持其他位置更新,那麼您可以使用 rsync (使用 ssh)。
由於 rsync 有很多參數,我通常會將它放在一個小 shell 中,這樣我就可以得到正確的結果(每次)。這個想法是只發送自上次運行以來發生變化的內容。
#!/bin/bash
user="nisse"
host="192.168.0.33"
echo "Sync: /home/media/music/"
rsync --archive --delete -v --progress -e "ssh -l $user " /home/media/music/ $host:/home/media/music/
這將使用使用者「nisse」將名為「/home/media/music/」的目錄從本機電腦移至名為 192.168.0.33 的電腦。並刪除目標上本機上不存在的所有內容。
答案4
最快的可能是netcat
(如卡斯帕所描述的)。
tar
我喜歡&的組合ssh
,它既安全又快速:
關於源頭
tar -cf - . | ( ssh user@target && cd /target/path && tar -xf - )
以 root 身分執行此操作,可以保留檔案權限。或-p
雙面使用。如果您有稀疏文件,也-S
可以考慮。
ssh
如果您使用arcfour
與 openSSH 一起使用的密碼,則可以減少加密開銷:
tar -cpSf - . | ( ssh -c arcfour user@targethost && cd /target/path && tar -xpSf - )
要更新遠端路徑,rsync
是完美的:
rsync -av --sparse --delete -e "ssh -c arcfour" . root@targethost:/target/path