Как скопировать файлы на сервер: scp и rsync
Файл — на сервер в домашнюю папку:
scp report.pdf ivan@192.168.1.10:~/Папку целиком:
scp -r site ivan@192.168.1.10:~/С сервера к себе, в текущую папку (.):
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 — для папок и повторного копирования
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 и прочитайте список того, что будет удалено.
Подводные камни
Permission deniedпри записи. Папки вроде/var/wwwна сервере принадлежат root или веб-серверу. Скопируйте файлы в домашнюю папку, а на сервере перенесите их черезsudo mv. Или настройте права папки (урок Права доступа: chmod, chown и rwx).- Имена с пробелами берите в кавычки:
scp "годовой отчёт.pdf" ivan@192.168.1.10:~/— так имя дойдёт целиком. - Из Windows. Команда
scpесть в PowerShell в Windows 10 и 11 и работает так же. Если удобнее мышью — подойдёт бесплатная программа WinSCP. - Много мелких файлов. Тысячи маленьких файлов быстрее перенести одним архивом:
tar -czf site.tar.gz site, скопировать архив и распаковать на сервере (справка Как распаковать tar.gz, zip и другие архивы).