Глиф Учебники

Как скопировать файлы на сервер: scp и rsync

Справочник · Командная строка Linux · 2 минуты чтения

Файл — на сервер в домашнюю папку:

Bash
scp report.pdf ivan@192.168.1.10:~/

Папку целиком:

Bash
scp -r site ivan@192.168.1.10:~/

С сервера к себе, в текущую папку (.):

Bash
scp ivan@192.168.1.10:/var/log/nginx/error.log .

Команды набираются в терминале вашего компьютера, а не на сервере; вместо ivan и 192.168.1.10 — ваш пользователь на сервере и адрес сервера.

scp работает через SSH: нужен тот же логин и пароль или ключ, что и для ssh. Удалённый путь пишется как пользователь@адрес:путь; двоеточие обязательно — без него scp сделает обычную копию у вас на компьютере. Другой порт задаётся большой буквой: scp -P 2222 … (у ssh — маленькой, -p).

rsync — для папок и повторного копирования

Bash
rsync -avz site/ ivan@192.168.1.10:~/site/

rsync передаёт только новые и изменённые файлы, поэтому повторное копирование большой папки занимает секунды. -a — с вложенными папками, правами и датами, -v — печатать имена файлов, -z — сжимать при передаче. Ещё полезны -P (показывать ход и докачивать прерванное) и -n — пробный запуск: показать, что будет сделано, ничего не копируя. Другой порт — -e "ssh -p 2222". Программа rsync должна стоять на обоих компьютерах.

Косая черта в конце — важно

У rsync косая черта в конце исходной папки меняет результат:

КомандаЧто получится на сервере
rsync -av site server:/var/www/папка /var/www/site со всем содержимым
rsync -av site/ server:/var/www/содержимое site прямо в /var/www, без папки site
rsync -av site/ server:/var/www/site/папка /var/www/site со всем содержимым

Запомнить просто: site/ — «содержимое папки», site — «саму папку».

Ключ --delete удаляет на сервере всё, чего нет в исходной папке. Вместе с ошибкой в косой черте он может стереть целую папку: rsync -av --delete site/ server:/var/www/ удалит в /var/www все остальные сайты. Перед любым --delete запустите ту же команду с -n и прочитайте список того, что будет удалено.

Подводные камни