我想在两台 Linux 计算机之间传输文件(音乐文件夹)。在搜索了实现此目的的最佳方法后,我发现有很多的方法。我知道这个问题已经被问过了很多,到处和每时每刻. 主要问题是,对于 2011 年 Linux 初学者来说,还没有明确的、最新的共识来说明如何最好地完成这项任务(甚至取决于某些参数)。
因此,本着 Stack Exchange 网站的精神,我希望这篇文章与我的具体情况无关,而更适合其他人,指导他们如何通过本地网络在两台 Linux 计算机之间传输文件。我认为 wiki 对许多人来说都很有用。
以下是我目前发现的内容:
- 远程控制
- SSHFS
- SCP
- 安全FTP
- 网络文件系统
- 桑巴
- 给予者
最简单、最灵活、最简单、最好的解决方案是什么?每种方法的优缺点是什么?还有其他(更好的)选择吗?选择最佳方法的参数是什么(解决方案可能取决于文件数量、文件大小、易用性与灵活性等)?
答案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
要发送目录,请在执行发送的计算机上进入要发送其内容的目录并执行以下操作:
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 的 PC。并删除目标上本地 PC 上不存在的所有内容。
答案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