Задача. Расширение относительного пути к файлу

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

Для решения задачи предлагается использовать следующие приложения:

  • dirname
  • basename
  • pwd

Учтите, что приложение должно корректно обрабатывать пути, имеющие пробелы в названии каталогов.

Задача. Создание скрипта для архивирования данных

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

./backup.sh --source PATH --destination PATH
  --source PATH path to the directory to backup
  --destination PATH path to the directory to put the archive contents

Оба пути должны быть путями к каталогам. После выполнения скрипта должна формироваться следующая структура каталогов:

$ ./backup.sh --source /tmp/source --destination /tmp/backups
$ tree /tmp/source
/tmp/source
└── data.md
$ tree /tmp/backups
/tmp/backups
└── 2022-01-15-10-15-16-source.tar

Внутри tar-архива должен находится каталог source со своим содержимым.

Проверьте созданный скрипт с помощью ShellCheck.

Задача. Выполнение сжатия созданного архива

tar-архивы только собирают внутри себя данных, но их сжатие не происходит по умолчанию. Доработайте скрипт, чтобы он выполнял сжатие данных.

Для сжатия данных используйте одно из следующих приложений:

  • bzip2
  • gzip
  • xz

После выполнения скрипта структура каталога должна выглядеть следующим образом:

$ tree -F info
info
├── backups/
│   └── 2020-10-25-15-36-57.tar.xz
└── data/
    └── info.md

Расширение файла должно соответствовать средству, которое использовалось для создания архива

  • bzip2: .tar.bz2
  • gzip: .tar.gz, .tgz
  • xz: .tar.xz, txz

Не забудьте проверить скрипт с помощью ShellCheck.

Задача. Использование tar для архивирования и сжатия файлов

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

Не забудьте проверить скрипт с помощью ShellCheck.

Задача. Настройка максимального количества резервных копий

Добавьте к скрипту необязательный аргумент --max-amount NUMBER. С помощью данного аргумента устанавливается максимальное количество резервных копий, которые могут находится в целевом каталоге. Если аргумент не передан, то значением по умолчанию должно быть число 10.

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

Задача. Создание скрипта для восстановления информации

Создайте скрипт restore.sh. Данный скрипт должен иметь следующую сигнатуру:

./restore.sh --archive ARCHIVE --destination PATH

  --archive ARCHIVE  path to the backup archive
  --destination PATH path to the directory to put the archive contents

С помощью аргумента --archive указывается путь к архиву, который надо использовать.

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

Проверьте написанный скрипт с помощью ShellCheck.

Задача. Выполнение резервирования по расписанию.

Опишите systemd-службу и таймер для выполнения автоматического резервирования. Необходимо резервировать каталог /var/lib/service в каталог /var/backups/service-backups.

  • Скрипт должен запускаться с правами пользователя backuper.
  • Данного пользователя необходимо создать, он должен быть системным.
  • Указанные каталоги необходимо создать.
  • Необходимо обеспечить чтение данных из /var/lib/service и запись в целевой каталог /var/backups/service-backups.
  • Запуск необходимо автоматизировать с помощью systemd.
  • Запуск необходимо производить в ночное время по средам.

Задача. Автоматизация настройки systemd-службы

Напишите скрипт, который будет автоматизировать установку и настройку systemd-службы. Данный скрипт должен:

  • Размещать скрипт для выполнения резервного копирования в каталог /usr/local/bin.
  • Создавать пользователя, от имени которого скрипт должен запускаться.
  • Создавать каталог для хранения резервных копий.
  • Выдавать необходимые права на каталог с резервными копиями.
  • Размещать в нужных каталогах конфигурационные файлы systemd-службы и systemd-таймера.
  • Активировать таймер для выполнения задачи резервирования.