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

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

Я хочу перенести файлы (папку с музыкой) между двумя компьютерами Linux. После поиска лучшего способа сделать это, я увидел, что естьмногоспособов сделать это. Я знаю, что это спрашивалимного,повсюдуивсе время. Основная проблема в том, что не существует четкого, недавнего консенсуса относительно лучшего способа выполнения этой задачи в 2011 году для начинающих пользователей Linux (даже в зависимости от некоторых параметров).

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

Вот что мне удалось найти на данный момент:

  • сш
  • 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 тоже, хотя иногда им сложно пользоваться.

решение2

Мой личный фаворит для случаев, когда безопасность не имеет значения, этонеткат+смола:

Чтобы отправить каталог, перейдите в каталог, содержимое которого вы хотите отправить, на компьютере, выполняющем отправку, и выполните:

tar -cz . | nc -q 10 -l -p 45454

На компьютере, получающем содержимое, перейдите в папку, в которой вы хотите сохранить содержимое, и выполните следующие действия:

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 имеет много аргументов, я обычно помещаю его в небольшую оболочку, чтобы все было правильно (каждый раз). Идея состоит в том, чтобы отправлять только то, что изменилось с момента последнего запуска.

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

Это переместит каталог с именем "/home/media/music/" с локального компьютера на компьютер с именем 192.168.0.33, используя пользователя "nisse". И удалит все на цели, чего нет на локальном компьютере.

решение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

Связанный контент