scp и rsync: когда использовать и как
scp проще для ручных одноразовых копирований. rsync лучше для регулярных синхронизаций, резервного копирования и больших или частичных переносов: он передаёт только отличия, умеет сжимать трафик и легче восстанавливает прерванные соединения. Оба используют SSH для безопасности; для rsync нужен установленный rsync на обеих машинах.

К чему стремиться в выборе инструмента
Цель простая: безопасно и эффективно переместить файлы между компьютерами по сети. Решение зависит от нескольких факторов:
- Одноразовая ручная копия или автоматическая задача?
- Объём данных и вероятность прерывания соединения.
- Нужно ли сохранять права, ссылки и временные метки.
- Можно ли установить rsync на обе машины.
Краткое правило: используйте scp для быстрых ручных действий, rsync — для синхронизации, резервного копирования и автоматизации.
Важно: оба инструмента по умолчанию используют SSH для защиты передачи. Без SSH ни scp, ни rsync по SSH работать не будут.
Что общего и в чём основная разница
Оба инструмента копируют файлы по сети и обычно работают поверх SSH. Но подход различается:
- scp — «secure copy». Он похож на локальную команду cp: простая отправка или приём файлов. Подходит для разовых операций. Требует лишь клиента scp на машине, где выполняют команду.
- rsync — ориентирован на синхронизацию. При повторных запусках rsync сравнивает файлы и передаёт только изменения. rsync должен быть установлен на обоих концах, но даёт больше опций: архивный режим, инкрементные передачи, возобновление при обрыве, сжатие и исключения.
Ментальная модель: scp — «копировать сейчас», rsync — «синхронизировать состояние папки между машинами».

Быстрые примеры команд
scp (простая отправка):
scp username@remotehost:/path/to/directory Пример: отправить файл foo.txt на удалённую машину:
scp foo.txt kris@some-computer:/home/kris/Скопировать файл с удалённой машины на локальную:
scp kris@some-computer:/home/kris/foo.txt .Копировать директорию рекурсивно:
scp -r dotfiles kris@some-computer:/home/kris/rsync (базовая отправка):
rsync user@remotehost: Пример: отправить foo.txt через rsync:
rsync foo.txt kris@some-computer:foo.txtКопировать файл с удалённой машины на локальную текущую директорию:
rsync kris@some-computer:/home/kris/foo.txt .Типичная полезная комбинация флагов для rsync:
rsync -avz ~/dotfiles kris@some-computer:/home/kris/dotfilesГде:
- -a или –archive — рекурсивный режим и сохранение прав, владельцев, временных меток, символьных ссылок; удобный «всё в одном» флаг;
- -v — подробный вывод;
- -z — сжатие в дороге; полезно при медленных соединениях.
Подробный набор флагов и подсказки
Cheat sheet для быстрого использования:
scp
- -r — рекурсивно копировать каталоги.
- -P порт — указать порт SSH (внимание: у scp флаг большой буквы P).
- -C — включить сжатие (иногда помогает при медленных каналах).
rsync
- -a — архивный режим (рекурсивно, сохраняет права и симвссылки).
- -v — подробный вывод.
- -z — сжатие данных при передаче.
- -P — показать прогресс и сохранять частично переданные файлы (аналог –partial –progress).
- –delete — удалять на приёмной стороне файлы, которых больше нет на источнике (внимательно).
- –exclude=PATTERN — исключить файлы/директории по шаблону.
- -e ‘ssh -p 2222’ — использовать кастомные опции ssh (порт, ключи, прокси).
Совет: для портов и сложных настроек SSH используйте опцию -e для rsync:
rsync -av -e "ssh -p 2222" ./dir user@host:/remote/dirКогда scp выигрывает
- Вы просто хотите быстро перетащить один файл или каталог вручную.
- На целевой машине нет rsync и вы не можете его установить, но есть ssh/scp.
- Вы предпочитаете минимальную поверхность конфигурации и понятный синтаксис.
Примеры: единичный файл журнала, отправка конфигурации коллеге, если у вас только интерактивный доступ.
Когда rsync выигрывает
- Регулярные резервные копии и синхронизации (cron, systemd timers).
- Большие наборы данных или медленные/ненадёжные каналы — rsync передаёт только отличия и умеет докачивать.
- Нужна фильтрация, исключения, контроль версий и копирование прав/ссылок.
- Требуется логирование и отчётность о том, что именно изменилось.
Пример: зеркалирование вэб-контента, инкрементные бэкапы, деплой сайтов.
Когда оба не годятся и альтернативы
- Очень большие файлы и высокая задержка: подумайте о rsync + специализированных параметрах или о передаче через tar+ssh с оптимизацией блоков.
- Если нужна контрольная целостность и репликация на уровне блоков — используйте ZFS send/receive, btrfs send или специализированные решения.
- Для GUI-переноса файлов используйте SFTP-клиенты (FileZilla, WinSCP). Они работают поверх того же протокола SFTP, что и SSH.
Примеры автоматизации и playbook для резервного копирования
Ниже — минимальный пример скрипта для ежедневного бэкапа домашней директории на удалённый сервер по SSH с rsync. Сохраняйте скрипт на источнике и настройте cron/systemd:
#!/bin/bash
# daily-backup.sh
SOURCE=~/projects
DEST=backup@backup.example.com:/backups/hosts/my-laptop/
DATE=$(date +"%F")
ssh backup@backup.example.com "mkdir -p /backups/hosts/my-laptop/$DATE"
rsync -azv --delete --exclude='node_modules' $SOURCE $DEST$DATE/Критерии приёмки
- На удалённом сервере присутствует директория с сегодняшней датой.
- rsync завершился с кодом возврата 0.
- Логи содержат список синхронизированных файлов.
Роль-based чек-листы
- Администратор: проверить доступ по SSH, доступность диска на приёмной стороне, права на запись.
- Разработчик: убедиться, что исключены временные файлы и папки зависимостей (node_modules, .venv).
- Оператор бэкапа: мониторить логи и алерты, проверять контрольную выборку файлов.
Как проверять и тестировать передачи
Тестовые сценарии:
- Маленький файл: отправить и проверить контрольную сумму (md5sum или sha256sum).
- Большой файл: начать копирование и прервать соединение, затем повторно запустить rsync и убедиться, что передача возобновилась.
- Исключения: добавить правило –exclude и проверить, что файлы не появились на приёмной стороне.
- Права и владельцы: использовать -a у rsync и проверить права после копирования.
Пример проверки контрольной суммы:
# На источнике
sha256sum foo.dat > foo.dat.sha256
scp foo.dat kris@host:/tmp/
scp foo.dat.sha256 kris@host:/tmp/
# На приёмной стороне
ssh kris@host 'cd /tmp && sha256sum -c foo.dat.sha256'Безопасность и рекомендации по хардэннингу
- Всегда используйте ключи SSH с passphrase и управляйте ими через ssh-agent.
- Ограничьте доступ по SSH с помощью файрвола и политик AllowUsers/Match в /etc/ssh/sshd_config.
- На стороне приёма используйте диск с достаточным пространством и отдельный пользователь для приёмки бэкапов.
- При использовании rsync с –delete тестируйте в режиме сухого запуска –dry-run прежде, чем включать в cron.
- Логируйте вывод команд и переносите логи в централизованный журнал.
Подсказки для локализации и совместимости
- rsync должен быть установлен на обеих машинах. На большинстве дистрибутивов Linux это пакет rsync через apt, yum, pacman.
- scp обычно входит в пакет openssh-client/openssh-clients.
- На нестандартных системах (например, Windows) используйте OpenSSH, WSL или клиент типа cwRsync.
Ментальные модели и эвристики
- Простота ≈ scp.
- Повторяемость и надёжность ≈ rsync.
- Если «нужно просто сейчас скопировать» — scp; если «нужно поддерживать папку в актуальном состоянии» — rsync.
Таблица сравнения основных возможностей
- Поддержка SSH: scp — да, rsync — да (по SSH).
- Инкрементные передачи: scp — нет, rsync — да.
- Восстановление при обрыве: scp — ограничено, rsync — да.
- Установка на обоих концах: scp — достаточно клиента на стороне запуска, rsync — да, требуется на обеих.
Типичные ошибки и как их избегать
- Ошибка: случайный запуск rsync с –delete приводящий к потере данных. Решение: всегда прогоняйте с –dry-run и проверяйте исключения.
- Ошибка: путаница с путями и слешами в конце источника/приёмника — rsync трактует слеши по-разному. Решение: читайте man rsync и тестируйте.
- Ошибка: использование scp без учёта прав — используйте rsync -a если нужны владельцы и права.
Шаблоны команд для типичных задач
Синхронизация локальной папки с удалённой, показывая прогресс и логируя:
rsync -azv --progress --log-file=/var/log/rsync/my-sync.log ~/site/ deploy@web:/var/www/site/Зеркалирование удалённой папки локально с сохранением прав:
rsync -av --delete backup@backup.example.com:/backups/hosts/my-laptop/ ./backups/my-laptop/Копирование вручную через scp с другим портом:
scp -P 2222 config.yml user@host:/etc/myapp/config.ymlPlaybook для перехода с scp на rsync
- Проверьте, установлен ли rsync на удалённой машине.
- Запустите dry-run копирования: rsync -av –dry-run источник удалённый:путь
- Проверьте результат и логи.
- Настройте cron/systemd timer для регулярной синхронизации.
- Мониторьте первые недели выполнения задач и исправьте исключения.
Часто задаваемые вопросы
Нужно ли устанавливать rsync на обеих машинах
Да. rsync требует наличия исполняемого файла на обеих сторонах для эффективного сравнения и передачи дельт.
Можно ли использовать scp и rsync через нестандартный порт SSH
Да. scp использует -P для порта. rsync принимает ssh-опции через -e: rsync -e “ssh -p 2222” …
Уменьшит ли сжатие (-z) время передачи
Иногда. Если файлы хорошо сжимаются и канал узкий, -z поможет. При быстрых сетях с аппаратным ускорением сжатия это может замедлить процесс.
Как избежать удаления нужных файлов при использовании –delete
Сначала используйте –dry-run и –verbose, проверьте список файлов, затем включайте –delete в плановом режиме после подтверждения.
FAQ JSON-LD
Ниже приведены распространённые вопросы и краткие ответы по теме.
Заключение
scp и rsync решают схожие задачи, но с разной философией. scp хорош для простых операций — он интуитивен и доступен. rsync хорош для надёжной синхронизации, автоматизации и экономии трафика. Освойте обе команды: эти навыки пригодятся и для ад-хок задач, и для серьёзной автоматизации.
Ключевые шаги на практике: проверьте доступ по SSH, протестируйте dry-run, начните с простого и постепенно вводите автоматизацию.
Сводка ниже содержит основные выводы и рекомендации.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента