2011-08-22 04:12:04 +0000 2011-08-22 04:12:04 +0000
81
81

Лучший способ передачи файлов по локальной сети между двумя компьютерами с операционной системой Linux.

Я хочу перенести файлы (музыкальную папку) между двумя компьютерами под управлением Linux. После поиска наилучшего способа сделать это, я увидел, что есть lots способов сделать это. Я знаю, что это было запрошено a lot, everywhere и all the time. Главная проблема в том, что в последнее время нет четкого консенсуса по поводу одного из лучших способов сделать это в 2011 году для новичков Linux (даже в зависимости от некоторых параметров).

Итак, в духе сайтов Stack Exchange, я хочу, чтобы это было связано не с моей конкретной ситуацией, а скорее с руководством для других, а также с тем, как передавать файлы между двумя компьютерами Linux по локальной сети. Я думаю, что вики-сайт был бы полезен для многих.

Вот что я нашел на данный момент:

  • ssh
  • sshfs
  • scp
  • sftp
  • nfs
  • samba
  • giver

Что самое простое? Самый гибкий? Самый простой? Лучшее решение? Каковы преимущества и недостатки каждого из них? Есть ли другие (лучшие) варианты? Каковы параметры при выборе наилучшего метода (решение может зависеть от количества файлов, размера файла, легкости в сравнении с гибкостью, …)?

Ответы (7)

66
66
66
2011-08-22 04:35:30 +0000

В среде Linux, как для безопасности, так и для простоты использования, ssh - лучший способ. SSH, SSHFS, SCP и SFTP в списке - это всего лишь различные сервисы, построенные на основе протокола SSH. SCP очень прост в использовании, он работает так же, как CP, но вы можете предоставить имена пользователей и машин в пути. Итак, мы можем сделать CP как cp ~/music/ ~/newmusic/, но мы можем также легко сделать scp ~/music/ user@host:~/newmusic, чтобы отправить его на компьютер с именем хоста. Вот и все - нам не нужно ничего настраивать. Вам будет предложено ввести пароль учетной записи на другой машине, если у вас нет сертификата или других настроек аутентификации (scp разделяет эти настройки с ssh, конечно).

SFTP - это инструмент, который позволяет легко выполнять множество операций на удаленной файловой системе - он работает так же, как и FTP, но работает через SSH, поэтому он безопасен и требует только SSH-сервера. man sftp расскажет вам все о том, как его использовать. Я не использую SFTP только для перемещения папки между двумя машинами, это более полезно, когда у вас много операций, например, если вы переставляете файлы на другом компьютере.

SSHFS просто расширяет SFTP на файловую систему: это позволяет вам монтировать виртуальный хост к вашей файловой системе, так что сетевые вещи происходят абсолютно прозрачно. SSHFS предназначена для полупостоянных настроек, а не для одноразовой передачи файлов. Нужно приложить больше усилий для настройки, о чем вы можете прочитать на сайте проекта .

Если вам нужно работать в смешанной среде, Samba станет вашим следующим лучшим вариантом. Windows и OS X поддерживают Samba полностью автоматически, и Linux делает то же самое, хотя иногда это бывает неудобно.

19
19
19
2011-08-22 06:49:45 +0000

Для однократных перемещений рекомендуется Scp.

Но если вы обнаружили, что этот гир может работать, и вам нужно переместить его много раз, чтобы обновить другую позицию, то вы можете использовать rsync (с помощью ssh).

Так как rsync имеет много аргументов, я обычно помещаю его в маленькую оболочку, так что я получаю его правильно (каждый раз). Идея заключается в том, чтобы посылать только то, что изменилось с момента последнего запуска.

#!/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/

Это перенесет dir под названием “/home/media/music/” с локального компьютера на pc под названием 192.168.0.33, используя пользовательский “nisse”. И удалите все, что не существует на локальном компьютере.

10
10
10
2014-04-27 06:30:49 +0000

Я бы порекомендовал вам попробовать альтернативные варианты вместо того, чтобы использовать SSH для перемещения файлов в вашей собственной локальной сети, т.к. накладные расходы - это IMMENSE. Я бы выбрал решение Caspar'а, если это решение по каким-либо причинам не сработает на вас:

В исходном коде:

$ python3 -m http.server {PICK_YOUR_PORT}

В исходном коде:

В исходном:

$ wget -r {ip / hostname}:{port}/{File / Directory}

Это будет не только легче, чем использование SSH, но и намного быстрее при скоростях 45~65MiB на стандартном CAT6 UTP.
Если вы действительно хотите получить максимальную отдачу от соединения, попробуйте заменить wget на lftp и использовать команды pget -n20 и mirror -r.

8
8
8
2011-08-22 08:57:03 +0000

Самый быстрый, вероятно, netcat (как описано в Caspar).

Мне нравится комбинация 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
5
5
5
2011-08-22 10:00:32 +0000

Если это абсолютно необходимо сделать по локальной сети, я бы использовал rsync, т.к. она будет снимать, где остановилась, если ее прервать. В ней также есть несколько других трюков для минимизации количества передаваемых данных, хотя я сомневаюсь, что многие/ногие из них были бы релевантны в случае копирования музыкальной библиотеки на девственное место. Если безопасность вызывает беспокойство, просто сначала установите RSYNC_RSH=ssh, и данные будут туннелироваться через ssh.

Если бы я на самом деле это делал, я бы, наверное, вообще не использовал локальную сеть. Я бы скопировал файлы на жесткий диск USB, а затем с него. По моему опыту, это может быть на несколько порядков быстрее, чем копирование по локальной сети, несмотря на то, что файлы приходится копировать дважды - USB 2.0 рассчитан на 480 Мбит/с, что быстрее, чем что-либо, кроме гигабитного ethernet, плюс он менее чувствителен к условиям, которые ухудшают производительность локальной сети. Он также полностью не зависит от операционной системы, при условии, что вы используете файловую систему, с которой могут справиться все задействованные машины - я бы порекомендовал VFAT/FAT32, так как это практически универсально.

2
2
2
2011-08-22 09:03:18 +0000
0
0
0
2016-04-14 20:18:21 +0000

Я следовал ssh процессу для безпассового входа сначала http://www.tecmint.com/ssh-passwordless-login-using-ssh-keygen-in-5-easy-steps/

Для скриптов и текстовых файлов следующее работает для меня просто отлично

Для передачи данных с локального хоста на удаленный хост.cat localfile | ssh <user>@<ip> "cat > <path>/<remotefile>"

Для передачи данных с удаленного хоста на локальный хост.ssh <user>@<ip> "cat > <path>/<remotefile>" | cat > localfile

Это работает для меня для передачи файлов на встроенных системах, которые не имеют встроенного ssh клиента или scp.

Без scp - только ssh.

Похожие вопросы

6
10
5
37
7