Приемы профессиональной работы в UNIX


ОСВЕДОМЛЕННОСТЬ ПОЛЬЗОВАТЕЛЯ - часть 4


Info - это командный файл, который получает информацию из регистрационного каталога и комментарий о пользователе из файла /etc/passwd. Результат выглядит так:

| | name: home dir comments | имя: регистрационный каталог комментарии |

Если в вашей системе используется это поле комментариев, то эта информация может быть полезной. "Вручную" выполнить просмотр пользователей в файле паролей можно следующим образом:

grep login_name /etc/passwd

При этом распечатывается вся строка со всеми полями данных. Info берет эти необработанные данные и выделяет из них каталог регистрации пользователя и поле комментария.

В командной строке можно указать несколько регистрационных имен. Каждое имя берется по порядку из командной строки.

ПРИМЕР

$ for NAME in `cat /etc/passwd | cut -d: -f1` > do > NAMELIST="$NAMELIST $NAME" > done; info $NAMELIST

Имя каждого пользователя в файле паролей добавляется к списку имен. Затем этот список передается в командную строку info, которая печатает все данные. Смысл команды: "Дай мне информацию обо всех пользователях системы".

ПОЯСНЕНИЯ

Строки 4-8 - это цикл for, который обрабатывает все имена, переданные в командной строке. Для каждого переданного имени выполняются строки 6 и 7.

В строке 6 в переменную USER заносится результат команды grep, заключенной между символами ударения (`). Начиная с начала строки (обозначено символом ^), grep ищет имя, за которым следует символ двоеточия (:). Такое указание заставляет выполнять поиск образца только в первом поле файла паролей.

В строке 7 мы отображаем нашу выходную строку командой echo, внутри которой вложены другие команды echo. Мы могли бы получать элементы информации отдельно, присваивая их значения отдельным переменным, и затем создавать необходимый формат вывода, используя значения этих переменных. Однако помещение всей информации в командную строку работает быстрее, и текст программы более компактный, хотя и не очень читабельный. Мы можем также использовать символы форматирования в команде echo для форматирования нашей распечатки.

Сначала отображается имя в том же виде, как оно получено из командной строки. Затем выводится табуляция (\t). За первой табуляцией следует поле номер шесть из файла паролей. Поскольку мы еще не имеем этих данных, мы должны выделить их из значения переменной USER, которую мы уже имеем из предыдущей строки. Чтобы сделать это, мы командой echo выводим всю строку и выделяем шестое поле, используя разделяющие двоеточия. После этого поля мы выводим еще одну табуляцию и затем пятое поле файла паролей. Мы получили это поле таким же образом, как и шестое поле - эхо-отображением и выделением.

Такая техника получения данных медленная, поскольку вовлечены все процессы, но это самый быстрый путь сделать это на языке shell. Команда awk была бы понятнее и, возможно, быстрее, но наша реализация демонстрирует гибкость языка shell. Язык shell может выполнять почти все, но не всегда лучшим образом. Вот почему в некоторых случаях мы используем язык Си, в чем вы убедитесь по мере продвижения по нашей книге.




Начало  Назад  Вперед