Стратегии резервного копирования каталогов

ShellBeginner
Практиковаться сейчас

Введение

Представьте, что каждый день вы фотографируете растущее растение. Если называть каждую фотографию plant.jpg, новый снимок будет постоянно перезаписывать старый, и история изменений потеряется. Чтобы сохранить все фотографии, нужно называть их plant_2023-01-01.jpg, plant_2023-01-02.jpg и так далее.

Та же проблема возникает с резервными копиями системы. Если всегда записывать данные в файл с одним и тем же именем, каждая новая копия может перезаписать предыдущую и уничтожить историю, необходимую для восстановления.

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

Вы научитесь:

  1. Запрашивать у Linux текущую дату в заданном формате.
  2. Сохранять эту дату в «коробке» — переменной.
  3. Использовать дату для создания уникального файла резервной копии с отметкой времени.

Получение текущей даты

На этом этапе вы научитесь использовать команду date для форматирования текущей даты. Это первый компонент динамического имени файла.

Обычная команда date выводит текущие дату и время в длинном текстовом формате. Но для имён файлов обычно нужен компактный формат, удобный для сортировки, например YYYY-MM-DD. Linux позволяет настроить вывод с помощью символа + и кода формата после него. Код %F — это удобное сокращение для полной даты в формате «год-месяц-день».

Этот формат нужен не только для красоты. Он удобен на практике: если имена файлов имеют формат YYYY-MM-DD, их алфавитная сортировка одновременно будет хронологической.

Сначала убедитесь, что вы находитесь в каталоге проекта:

cd ~/project

Теперь запросите у системы дату в нужном формате:

date +%F

Вы должны увидеть вывод, похожий на 2023-10-27, но с фактической сегодняшней датой.

Чтобы использовать этот результат в имени файла, его нужно сохранить. Для этого применяется подстановка команды. Представьте, что команда помещается внутрь пузыря $(...). Сначала оболочка выполняет команду внутри пузыря, получает результат и заменяет пузырь этим текстом.

Подстановка команды — одна из основных возможностей оболочки, связывающая простое использование командной строки с автоматизацией. Она позволяет использовать вывод одной команды как данные для другой команды.

Попробуем сохранить дату в переменной. Переменная — это именованное хранилище данных. Мы создадим хранилище с именем current_date и поместим в него результат выполнения команды.

current_date=$(date +%F)

Важно: обратите внимание, что вокруг знака = нет пробелов. Это строгое правило оболочки. Запись variable = value завершится ошибкой, а запись variable=value будет работать.

Теперь проверим содержимое нашей «коробки». Для этого используем команду echo и поставим символ $ перед именем переменной, чтобы получить её значение:

echo $current_date

Если на экране отобразилась сегодняшняя дата, значит, вы успешно сохранили результат команды.

Создание файла резервной копии

Теперь, когда дата сохранена в переменной, мы можем использовать её для создания файла резервной копии с информативным именем.

В вашем каталоге уже подготовлен файл project_plan.txt. Убедитесь, что он существует:

ls -l project_plan.txt

Наша цель — создать копию этого файла с именем project_plan_YYYY-MM-DD.bak. Таким образом, в имени копии будет указана сегодняшняя дата.

Мы воспользуемся стандартной командой cp для копирования. Но вместо того чтобы вводить дату вручную, позволим оболочке подставить её из переменной $current_date.

Выполните следующую команду:

cp project_plan.txt "project_plan_$current_date.bak"

Оболочка видит $current_date внутри двойных кавычек и перед выполнением команды копирования заменяет эту конструкцию фактической датой, сохранённой в переменной, например 2023-10-27.

Это называется раскрытием переменной. Оболочка раскрывает переменные до запуска команды cp, поэтому команда выглядит динамической, хотя сама cp не понимает переменные оболочки.

Полезный совет: этап с переменной можно пропустить и выполнить всё одной строкой. Такой подход часто используется в сценариях автоматизации. Поместите пузырь команды $(...) непосредственно в команду cp:

cp project_plan.txt "project_plan_$(date +%F).bak"

Эта команда говорит оболочке: «Выполни команду date, вставь её результат сюда, а затем выполни команду копирования». Оба способа дают абсолютно одинаковый результат.

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

Убедимся, что всё сработало. Теперь в каталоге должны находиться два файла: исходный файл и его копия с отметкой времени.

Выведите список файлов в каталоге:

ls -l

Вы должны увидеть примерно такой результат:

-rw-rw-r-- 1 labex labex 65 Oct 27 10:00 project_plan.txt
-rw-rw-r-- 1 labex labex 65 Oct 27 10:05 project_plan_2023-10-27.bak

Обратите внимание: новая дата встроена в имя файла.

Наконец, проверим, что содержимое копии не повреждено. Для чтения нового файла можно использовать команду cat. Поскольку повторно вводить полную дату может быть неудобно, снова применим подстановку команды:

cat project_plan_$(date +%F).bak

Вы должны увидеть исходный текст:

Phase 1: Initialization
Phase 2: Development
Phase 3: Deployment

Готово! Вы создали резервную копию с отметкой времени. Если завтра выполнить ту же команду, будет создан новый файл с завтрашней датой, а история резервных копий останется сохранённой и упорядоченной.

Эта простая привычка именовать файлы оказывается полезной во многих сценариях. Многие схемы ротации резервных копий начинаются именно с этой идеи: закодировать время в имени файла, чтобы сохранять несколько поколений копий, а не перезаписывать последнюю.

Итоги

Поздравляем! Вы освоили важный навык автоматизации.

В этой лабораторной работе вы научились:

  • Форматировать время: использовать date +%F, чтобы получать строку даты в удобном для компьютера формате.
  • Применять подстановку команды: использовать $(...), чтобы передавать результат одной команды другой.
  • Создавать динамические имена: формировать имена файлов на основе текущей даты.

Этот простой приём лежит в основе профессиональных стратегий резервного копирования. Теперь вы сможете защитить файлы от случайной перезаписи!