10 примеров удаленного копирования файлов

Опубликовано admin в Пнд, 05/07/2010 - 14:24

В своих примерах я буду использовать утилиты sftp, scp и netcat


Копирование с помощью scp
Scp для передачи данных использует ssh, т. е необходимо иметь ssh доступ на удалённый хост.

На удалённый хост.

1).
файл
.

$ scp ./local_file username@remotehost:


Скопирует локальный файл ./local_file на удалённый хост remotehost  в домашнию директорию пользователя username. Можно указать название файла на удалённом хосте(scp ./local_file username@remotehost:remote_file).

2).
директория
.

$ scp -r /etc/local_folder username@remotehost:/etc


Скопирует локальную директорию /etc/local_folder на удалённый хост в директорию /etc

С удалённого хоста.

3).
файл.

$ scp  username@remotehost:remote_file ./


Скопирует удалённый файл
remote_file из домашней директории username на локальную машину в текущую директорию

4).
директория

$ scp -r username@remotehost:/etc/remote_folder /etc


Скопирует удалённую папку
 /etc/remote_folder/ на локальную машину в директорию /etc

Копирование с помощью sftp
Sftp это интерактивная программа передачи файлов, подобная ftp, которая выполняет передачу данных в шифрованном виде, используя ssh, т.е необходимо иметь ssh доступ на удалённый хост.
Копировать директории стандартный sftp клиент не умеет.

На удалённый хост.
5).

$ sftp remotehost
Connecting to remotehost...
sftp> lls
remote_file        local_file
sftp> put local_file
Uploading local_file to /home/username/local_file
local_file                                           100%    0     0.0KB/s   00:00    
sftp> ls
local_file  
sftp> quit


C помощью команды put копируем локальный файл ./local_file на удалённый хост remotehost  в домашнию директорию пользователя username. Команда lls выводит листинг локальной директории, команда ls выводит листинг удалённой директории.

С удалённого хоста.

6).

$ sftp remotehost
Connecting to remotehost...
sftp> ls
remote_file
sftp> get remote_file
Fetching /home/username/remote_file to remote_file
sftp> quit


C помощью команды
get копируем удалённый файл remote_file из домашней директории username на локальную машину в текущую директорию.

Копирование с помощью netcat
Для начала, если у вас Debian или Ubuntu то поставьте netcat-openbsd и pipeviewer(pv). 

$ sudo apt-get install netcat-openbsd pv


Варианты с pv показывают статистику передачи файла, таким образом можно замерять пропускную способность сетевого канала.

На удалённый хост.

7).
файл

$ nc -l 1234 | pv | cat > ./remote_file

или

$ nc -l 1234 > ./remote_file

Принимаем файл на удалённом хосте

$ cat ./local_file | pv | nc remotehost 1234

или

$ nc remotehost 1234 < ./local_file

Отправляем файл на удалённый хост

8).
директория.

$ nc -l 1234 | pv | tar x

или

$ nc -l 1234 | tar x

Принимаем директорию на удалённом хосте

$ tar -cf - ./local_folder | pv | nc remotehost 1234

или

$ tar -cf - ./local_folder | nc remotehost 1234

Отправляем директорию на удалённый хост

C удалённого хоста.

9).
файл.

$ cat ./remote_file | pv | nc -l 1234

или

$ nc -l 1234 < ./remote_file

Передаём файл с удалённого хоста

$ nc remotehost 1234 | pv | cat > ./local_file

или

$ nc remotehost 1234 > ./local_file

Принимаем файл на локальной машине

10).
директория.

$ tar -cf - ./remote_folder | pv | nc -l 1234

или

$ tar -cf - ./remote_folder | nc -l 1234

Передаём директорию с удалённого хоста

$ nc remotehost 1234 | pv | tar x

или

$ nc remotehost 1234 | tar x

Принимаем директорию на локальной машине

P.S

Ну и последний бонусный пример, можно отдавать файлы по http:

$ python -m SimpleHTTPServer

или

# nc -l 8000 < ./shared_file


Запустится мини веб сервер, который будет отдавать содержимое текущей директории по http.Теперь текущая директория доступна, как
http://$HOSTNAME:8000/


Статья взята с http://unixstuff.ru/ (_http://unixstuff.ru/files/be73a7f18204d0ca549e6ce1c027fd86-1.html)

( categories: )