Ответ
В 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: Копирование больших директорий, регулярные синхронизации, деплой приложений, бэкапы. Всегда предпочтительнее для автоматизации.