🗂 Версионное копирование файлов с помощью cp и rsync
📑 Оглавление
- Введение
- Основные параметры cp для версионного копирования
- Сравнение cp и rsync
- Автоматизация с cron
- Практический пример: SSH
- Преимущества
- Дополнительно
📖 Введение
Команда 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
Чтобы автоматически создавать версии файлов:
- Откройте crontab:
crontab -e
- Добавьте задание, например, ежедневно в 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
- Создание резервной копии с нумерацией:
cp --backup=numbered /etc/ssh/sshd_config /data/backup/
- С пользовательским суффиксом:
cp --backup=numbered --suffix=.bak /etc/ssh/sshd_config /data/backup/
✅ Преимущества
- 📌 Поддержка истории изменений файлов
- 📌 Защита от случайного перезаписывания
- 📌 Простая версионность без сложных систем контроля версий
- 📌 Возможность автоматизации через cron
💡 Дополнительно
- Рекурсивное копирование директорий:
cp -r --backup=numbered /etc/nginx /data/backup/
- Интеграция с
rsyncдля удалённых серверов:
rsync -av --backup --suffix=".$(date +%F).bak" /etc/nginx/ remote:/backup/nginx/
- Используйте
--verboseдля подробного вывода:
cp -v --backup=numbered /etc/ssh/sshd_config /data/backup/