🗂 Версионное копирование файлов с помощью cp и rsync

Platform Tested Tool Tool


📑 Оглавление


📖 Введение

Команда cp известна большинству пользователей Linux как инструмент для копирования файлов, но она умеет создавать версионные резервные копии, что особенно полезно для системных администраторов и разработчиков.

[!TIP] Версионное копирование позволяет отслеживать историю изменений без установки Git или других систем контроля версий.


🔑 Основные параметры cp для версионного копирования

Параметр Описание
--backup Создаёт резервную копию целевого файла перед его перезаписью.
--suffix Определяет пользовательский суффикс для резервной копии файла.

[!IMPORTANT] По умолчанию резервные копии получают суффикс ~ (например, file~), если пользователь не указал свой.


⚙️ Примеры использования cp

Простейшее резервное копирование

cp --backup=numbered /path/to/source/file /path/to/destination/

Пример для SSH:

cp --backup=numbered /etc/ssh/sshd_config /data/backup/

Результат:

sshd_config.~1~
sshd_config.~2~
...

Резервное копирование с пользовательским суффиксом

cp --backup=numbered --suffix=.bak /path/to/source/file /path/to/destination/

Пример:

cp --backup=numbered --suffix=.bak /etc/ssh/sshd_config /data/backup/

Результат:

sshd_config.bak.1
sshd_config.bak.2
...

[!TIP] Это позволяет легко идентифицировать резервные копии по расширению.


📊 Сравнение cp и rsync

Функция cp rsync
Версионное копирование ✅ с --backup ✅ с --backup и --suffix
Рекурсивное копирование директорий ✅ с -r ✅ с -a (архив)
Передача по сети ✅ через rsync:// или ssh
Инкрементное копирование ✅ копирует только изменённые файлы
Автоматизация ✅ через cron ✅ через cron

[!TIP] Используйте rsync для резервного копирования больших директорий или передачи на удалённый сервер.

Пример rsync с версионностью:

rsync -av --backup --suffix=".bak" /etc/ssh/sshd_config /data/backup/

⏰ Автоматизация с cron

Чтобы автоматически создавать версии файлов:

  1. Откройте crontab:
crontab -e
  1. Добавьте задание, например, ежедневно в 2:00:
0 2 * * * cp --backup=numbered --suffix=.bak /etc/ssh/sshd_config /data/backup/

[!TIP] Можно комбинировать с датой в суффиксе:

cp --backup=numbered --suffix=".$(date +%F).bak" /etc/ssh/sshd_config /data/backup/

Результат: sshd_config.2025-10-03.bak.1


🛡️ Практический пример: SSH

  1. Создание резервной копии с нумерацией:
cp --backup=numbered /etc/ssh/sshd_config /data/backup/
  1. С пользовательским суффиксом:
cp --backup=numbered --suffix=.bak /etc/ssh/sshd_config /data/backup/

✅ Преимущества


💡 Дополнительно

cp -r --backup=numbered /etc/nginx /data/backup/
rsync -av --backup --suffix=".$(date +%F).bak" /etc/nginx/ remote:/backup/nginx/
cp -v --backup=numbered /etc/ssh/sshd_config /data/backup/