Можно также внести ряд других усовершенствований, которые сделают сценарий более дружественным для пользователя. Например, добавить флаг −l для восстановления последней (latest) копии и флаг−D для удаления дополнительных копий файла. Подумайте, какие еще флаги вы добавили бы, чтобы упростить работу со сценарием?
№ 17. Журналирование операций удаления файлов
Вместо архивирования удаляемых файлов иногда достаточно просто фиксировать факты удаления. В листинге 2.10 приводится сценарий, который журналирует вызовы команды rm в отдельном файле, ни о чем не извещая пользователя.
Такого эффекта можно добиться, использовав сценарий в роли обертки. Основная идея любой обертки состоит в том, что она располагается между фактической командой Unix и пользователем, предлагая дополнительные возможности, недоступные в оригинальной команде.
Обертки — мощная концепция, и в этой книге вы еще не раз встретитесь с ней.
Код
Листинг 2.10. Сценарий logrm
··#!/bin/bash
··# logrm — журналирует все операции удаления файлов, если вызывается без флага −s
··removelog="/var/log/remove.log"
····echo "Usage: $0 [-s] list of files or directories" >&2
····exit 1
··fi
····# Запрошена операция без журналирования…
····shift
··else
··fi
··exit 0
Как это работает
Первая условная инструкция в
Запуск сценария
Обычно при установке программ-оберток, таких как сценарий logrm, обертываемые команды переименовываются, а оберткам присваиваются имена оригинальных команд. Если вы решите пойти этим путем, убедитесь, что обертка вызывает переименованную программу, а не саму себя! Например, если вы переименовали
Как вариант, можно определить псевдоним, чтобы заменить стандартный вызов rm вызовом команды logrm:
alias rm=logrm
В любом случае вам потребуются права доступа к каталогу /var/log на выполнение и запись, что может не соответствовать настройкам системы по умолчанию.
Результаты
Давайте создадим несколько файлов, удалим их и затем заглянем в журнал
Листинг 2.11. Тестирование сценария logrm
$ touch unused.file ciao.c /tmp/junkit
$ logrm unused.file /tmp/junkit
$ logrm ciao.c
$ cat /var/log/remove.log
Thu Apr··6 11:32:05 MDT 2017: susan: /tmp/central.log
Fri Apr··7 14:25:11 MDT 2017: taylor: unused.file /tmp/junkit
Fri Apr··7 14:25:14 MDT 2017: taylor: ciao.c
Отлично! Обратите внимание, что пользователь susan удалил файл
Усовершенствование сценария