Гид по технологиям

scp и rsync: когда использовать и как

7 min read Linux Обновлено 15 Dec 2025
scp или rsync — что выбрать?
scp или rsync — что выбрать?

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

Два терминала на экране ноутбука, показывающие man-страницы команд scp и rsync.

К чему стремиться в выборе инструмента

Цель простая: безопасно и эффективно переместить файлы между компьютерами по сети. Решение зависит от нескольких факторов:

  • Одноразовая ручная копия или автоматическая задача?
  • Объём данных и вероятность прерывания соединения.
  • Нужно ли сохранять права, ссылки и временные метки.
  • Можно ли установить rsync на обе машины.

Краткое правило: используйте scp для быстрых ручных действий, rsync — для синхронизации, резервного копирования и автоматизации.

Важно: оба инструмента по умолчанию используют SSH для защиты передачи. Без SSH ни scp, ни rsync по SSH работать не будут.

Что общего и в чём основная разница

Оба инструмента копируют файлы по сети и обычно работают поверх SSH. Но подход различается:

  • scp — «secure copy». Он похож на локальную команду cp: простая отправка или приём файлов. Подходит для разовых операций. Требует лишь клиента scp на машине, где выполняют команду.
  • rsync — ориентирован на синхронизацию. При повторных запусках rsync сравнивает файлы и передаёт только изменения. rsync должен быть установлен на обоих концах, но даёт больше опций: архивный режим, инкрементные передачи, возобновление при обрыве, сжатие и исключения.

Ментальная модель: scp — «копировать сейчас», rsync — «синхронизировать состояние папки между машинами».

Вывод rsync в SSH выглядит как обычный вывод в терминале.

Быстрые примеры команд

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).
  • Оператор бэкапа: мониторить логи и алерты, проверять контрольную выборку файлов.

Как проверять и тестировать передачи

Тестовые сценарии:

  1. Маленький файл: отправить и проверить контрольную сумму (md5sum или sha256sum).
  2. Большой файл: начать копирование и прервать соединение, затем повторно запустить rsync и убедиться, что передача возобновилась.
  3. Исключения: добавить правило –exclude и проверить, что файлы не появились на приёмной стороне.
  4. Права и владельцы: использовать -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.yml

Playbook для перехода с scp на rsync

  1. Проверьте, установлен ли rsync на удалённой машине.
  2. Запустите dry-run копирования: rsync -av –dry-run источник удалённый:путь
  3. Проверьте результат и логи.
  4. Настройте cron/systemd timer для регулярной синхронизации.
  5. Мониторьте первые недели выполнения задач и исправьте исключения.

Часто задаваемые вопросы

Нужно ли устанавливать 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, начните с простого и постепенно вводите автоматизацию.

Сводка ниже содержит основные выводы и рекомендации.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро