Каким образом можно скопировать файл с одного Linux-сервера на другой?

«Каким образом можно скопировать файл с одного Linux-сервера на другой?» — вопрос из категории Linux, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В DevOps для копирования файлов между серверами стандартно используются два инструмента: scp для простых задач и rsync для продвинутого и инкрементного копирования.

1. SCP (Secure Copy Protocol)

Простейший способ скопировать файл по SSH. Идеален для разовых операций с небольшими файлами.

Базовый синтаксис:

scp [ОПЦИИ] <исходный_файл> <пользователь>@<удаленный_хост>:<целевой_путь>

Примеры:

# Копируем локальный файл на удалённый сервер
scp /backup/app.log.1 admin@prod-server-01:/var/log/archive/

# Копируем файл с удалённого сервера на локальную машину
scp admin@prod-server-01:/etc/nginx/nginx.conf ./nginx.conf.backup

# Копируем файл напрямую с сервера A на сервер B (минуя локальную машину)
# Выполняется с машины A или через Jump Host
scp /data/config.yml deploy@prod-server-02:/app/config/

# Копируем рекурсивно целую директорию
scp -r ./scripts/ admin@prod-server-01:/opt/

# Используем нестандартный SSH-порт (например, 2222)
scp -P 2222 file.txt admin@host:/tmp/

2. RSYNC

Мощный инструмент для синхронизации файлов. Основной выбор для бэкапов, деплоя и регулярных задач. Его главное преимущество — копирование только изменённых частей файлов (дельта-кодирование), что экономит время и трафик.

Базовый синтаксис:

rsync [ОПЦИИ] <источник> <пользователь>@<хост>:<цель>

Ключевые опции:

  • -a (archive): Рекурсивно, сохраняет права, владельца, временные метки и симлинки. Основная опция.
  • -v (verbose): Подробный вывод.
  • -z (compress): Сжатие данных при передаче.
  • -P: Комбинация --progress (показывает прогресс) и --partial (сохраняет частично загруженные файлы для докачки).
  • --delete: Удаляет в цели файлы, которых нет в источнике (делает точную синхронизацию).
  • -e ssh: Явное указание использовать SSH (используется по умолчанию).

Примеры:

# Инкрементальное копирование директории с прогрессом и сжатием
rsync -avzP /opt/myapp/ admin@backup-server:/backups/myapp/

# Синхронизация веб-контента на продакшен-сервер (удаляя лишнее)
rsync -avz --delete /build/website/ web@prod-01:/var/www/html/

# Копирование с использованием SSH-ключа и нестандартного порта
rsync -avz -e 'ssh -p 2222 -i ~/.ssh/deploy_key' ./app/ deploy@host:/srv/

# Сухая проба (dry-run) — показывает, что будет сделано, без реального копирования
rsync -avzn --delete ./src/ user@host:/dest/

Выбор инструмента:

  • scp: Быстро скопировать один-два файла. Проще запомнить синтаксис.
  • rsync: Копирование больших директорий, регулярные синхронизации, деплой приложений, бэкапы. Всегда предпочтительнее для автоматизации.