在兩台 Linux 電腦之間透過 LAN 傳輸檔案的最佳方式

在兩台 Linux 電腦之間透過 LAN 傳輸檔案的最佳方式

我想在兩台 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

相關內容