В сценарии может возникнуть проблема с правами доступа к файлу журнала. Файл
Для файловых систем ext2, ext3 и ext4 (используются по умолчанию в большинстве дистрибутивов Linux), существует другое решение — с помощью команды chattr установить на файл журнала специальное разрешение «только для добавления», что сделает его доступным для записи всем пользователям без всякой опасности. Еще одно решение: записывать сообщения в системный журнал с помощью замечательной команды logger. Журналирование операций с командой rm в этом случае будет выглядеть так:
logger −t logrm "${USER:-LOGNAME}: $*"
Эта команда добавит в поток данных системного журнала, недоступный рядовым пользователям для изменения, запись с меткой logrm, именем пользователя и выполненной командой.
Если вы решите использовать команду logger, прочитайте страницу справочного руководства syslogd(8), где написано, как убедиться, что ваша конфигурация не отбрасывает события с приоритетом user.notice. Обычно эта настройка находится в файле
№ 18. Вывод содержимого каталогов
Нам всегда казался бессмысленным один из аспектов команды ls: для каталогов она либо выводит список содержащихся в них файлов, либо показывает количество блоков по 1024 байта, необходимых для хранения данных. Ниже показано, как выглядит типичный элемент списка, возвращаемого командой ls −l:
drwxrwxr-x·· 2 taylor·· taylor·· 4096 Oct 28 19:07 bin
Но в этой информации мало проку! В действительности нам хотелось бы знать, сколько файлов находится в каталоге. Именно это делает сценарий в листинге 2.12. Он генерирует многоколоночный список файлов и каталогов, показывая для файлов их размеры, а для каталогов — количество содержащихся в них записей.
Код
Листинг 2.12. Сценарий formatdir для получения более информативных списков каталогов
··#!/bin/bash
··# formatdir — выводит содержимое каталога в дружественном и информативном виде
··# Обратите внимание: необходимо, чтобы "scriptbc" (сценарий № 9) находился
··#·· в одном из каталогов, перечисленных в PATH, потому что он неоднократно
··#·· вызывается в данном сценарии.
··scriptbc=$(which scriptbc)
··# Функция для преобразования размеров из KB в KB, MB или GB для
··#·· большей удобочитаемости вывода
··{
····if [$1 −ge 1048576]; then
······echo "$($scriptbc −p 2 $1 / 1048576)GB"
····elif [$1 −ge 1024]; then
······echo "$($scriptbc −p 2 $1 / 1024)MB"
····else
······echo "${1}KB"
····fi
··}
··#################
··## КОД ОСНОВНОГО СЦЕНАРИЯ
··if [$# −gt 1]; then
····echo "Usage: $0 [dirname]" >&2
····exit 1
····cd "$@"················# Тогда перейти в него.