Я хочу передавать файлы (музыкальную папку) между двумя компьютерами Linux. После поиска лучшего способа сделать это, я увидел, что есть много способов сделать это. Я знаю, что об этом спрашивали много , везде и всегда . Основная проблема заключается в том, что в последнее время нет четкого консенсуса по поводу одного из лучших способов сделать эту задачу в 2011 году для начинающих пользователей Linux (даже в зависимости от некоторых параметров).
Поэтому, в духе сайтов Stack Exchange, я хочу, чтобы это было связано не с моей конкретной ситуацией, а скорее с руководством для других, а также о том, как передавать файлы между двумя компьютерами Linux по локальной сети. Я думаю, что вики была бы полезна для многих.
Вот что я нашел до сих пор:
- SSH
- SSHFS
- УПП
- SFTP
- NFS
- самба
- податель
Что самое простое? Самый гибкий? Простейшее? Лучшее решение? Каковы плюсы и минусы каждого? Есть ли другие (лучшие) варианты? Каковы параметры при выборе лучшего метода (решение может зависеть от количества файлов, размера файла, простоты и гибкости, ...)?
источник
Ответы:
В среде 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, хотя иногда это сложно использовать.
источник
scp
работы нам нужно настроить какой-нибудь ssh-сервер, прослушиватель или разблокировать что-то на другой стороне? Я получаю сообщение об ошибке "Отказано в соединении".openssh-server
должен быть установлен в Ubuntu Natty.ssh
используется шифрование, которое вызовет некоторые дополнительные издержки. Если задействованные компьютеры имеют довольно медленные процессоры, это может иметь значение. В этом случаеnetcat
или подобное (см. Ответ Каспара) может быть предпочтительнее. Конечно, только если вам не нужно шифрование (в защищенной локальной сети).Мой личный фаворит для случаев, когда безопасность не имеет значения, netcat + tar :
Чтобы отправить каталог, перейдите в каталог, содержимое которого вы хотите отправить на компьютер, выполняющий отправку, и выполните:
tar -cz . | nc -q 10 -l -p 45454
На компьютере, получающем содержимое, перейдите туда, где вы хотите, чтобы содержимое отображалось, и выполните:
nc -w 10 $REMOTE_HOST 45454 | tar -xz
Замените
$REMOTE_HOST
на ip / hostname компьютера, выполняющего отправку. Вы также можете использовать другой порт вместо45454
.На самом деле происходит то, что «принимающий» компьютер подключается к передающему компьютеру через порт 45454 и получает содержимое каталога tar'd и gzip'd и передает его непосредственно в tar (и gzip), чтобы извлечь его в текущий каталог.
Быстрый пример (использование localhost в качестве удаленного хоста)
Компьютер 1
Компьютер 2
источник
-q
параметр указывает на то, что вы используете OpenBSD-Netcat , в то время как гну-Netcat также довольно часто ( по умолчанию в Arch Linux ). Не могли бы вы расширить свой ответ, включив в него синтаксис gnu-netcat ?Для однократных ходов рекомендуется scp.
Но если вы обнаружите, что этот каталог может работать, и вам нужно много раз перемещать его, чтобы обновлять другую позицию, тогда вы можете использовать rsync (с ssh).
Поскольку у rsync много аргументов, я обычно помещаю его в небольшую оболочку, чтобы я понял это правильно (каждый раз). Идея состоит в том, чтобы отправлять только то, что изменилось с момента последнего запуска.
Это переместит каталог с именем «/ home / media / music /» с локального компьютера на компьютер с именем 192.168.0.33, используя пользователя «nisse». И удалите все, что не существует на локальном компьютере.
источник
Я бы порекомендовал вам попробовать альтернативы, вместо того, чтобы идти прямо с SSH для перемещения файлов в вашей локальной сети, поскольку накладные расходы - IMMENSE. Я бы пошел с решением Каспара, если это по какой-то причине не будет работать для вас:
У источника:
По назначению:
Это будет не только легче, чем при использовании SSH, но и намного быстрее со скоростями в диапазоне 45 ~ 65 МБ на стандартной CAT6 UTP.
Если вы действительно хотите , чтобы выжать максимум из соединения попробуйте заменить
wget
сlftp
и использованиемpget -n20
иmirror -r
команд.источник
Самый быстрый, вероятно,
netcat
(как описал Каспар).Мне нравится сочетание
tar
&ssh
, которое безопасно и все еще быстро:По источнику
Делая это как root, он сохраняет права доступа к файлам. Или используйте
-p
с обеих сторон. Также-S
может быть рассмотрено, если у вас есть разреженные файлы.Можно уменьшить накладные расходы на шифрование,
ssh
если вы используете вarcfour
качестве шифра, который работает с openSSH:Чтобы обновить удаленный путь,
rsync
идеально подходит:источник
Если это абсолютно необходимо сделать через локальную сеть, я бы использовал
rsync
, так как он определит, где остановился, если его прервут. В нем также есть несколько других приемов для минимизации объема передаваемых данных, хотя я сомневаюсь, что многие / любые из них будут иметь отношение к случаю копирования музыкальной библиотеки в нетронутую папку. Если вас беспокоит безопасность, просто установитеRSYNC_RSH=ssh
сначала, и данные будут передаваться по ssh.Однако, если бы я на самом деле делал это, я бы вообще не использовал LAN. Я копировал файлы на жесткий диск USB, а затем выключал его. По моему опыту, это может быть на несколько порядков быстрее, чем при работе по локальной сети, несмотря на необходимость дважды копировать файлы - USB 2.0 рассчитан на 480 Мбит / с, что быстрее, чем что-либо, кроме гигабитного Ethernet, плюс он менее чувствителен к условиям что ухудшит производительность локальной сети. Он также полностью независим от ОС, при условии, что вы используете файловую систему, которую могут обрабатывать все задействованные машины, - я бы порекомендовал VFAT / FAT32, поскольку это в значительной степени универсально.
источник
Я бы предложил rsync, поскольку он будет копировать файлы постепенно. Вы можете настроить его на копирование только измененных или новых файлов только после первоначального обновления. Вы можете использовать ssh в качестве транспортного уровня, если хотите.
источник
Я использую Unison , который является отличным синхронизатором файлов по многим различным протоколам. Вы можете настроить его на использование
scp
,rcp
,ftp
или даже локально в файловой системе между двумя папками. Я использую его для синхронизации своей музыкальной библиотеки, поскольку она может передавать несколько файлов одновременно по сети и действительно настраивается в своей конфигурации. Я храню свою музыкальную коллекцию в резервном копировании и синхронизирую более 2-3 компьютеров. Он будет копировать только измененные файлы и делает это, сохраняя индекс на обоих концах передачи, чтобы иметь возможность определить, когда клиент изменил файл или когда файл сервера изменился.Ваш пробег может варьироваться, но это, безусловно, намного лучше, чем использование
scp
всей вашей музыкальной коллекции каждый раз, когда вы добавляете новую песню :)источник
Сначала я следовал процессу 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.
источник