Дейв Тейлор - Сценарии командной оболочки. Linux, OS X и Unix. 2-е издание
- Название:Сценарии командной оболочки. Linux, OS X и Unix. 2-е издание
- Автор:
- Жанр:
- Издательство:Питер
- Год:2017
- Город:СПб.
- ISBN:978-5-496-03029-8
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Дейв Тейлор - Сценарии командной оболочки. Linux, OS X и Unix. 2-е издание краткое содержание
Цель этой книги — продемонстрировать практические приемы программирования сценариев на bash и познакомить с самыми распространенными утилитами на коротких и компактных примерах, не вдаваясь в излишние подробности. Экспериментируйте с этими сценариями — ломайте, исправляйте и приспосабливайте их под свои нужды, чтобы понять, как они работают. Только так вы сможете решать самые сложные задачи.
Сценарии командной оболочки. Linux, OS X и Unix. 2-е издание - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
··#·· Для стандартных систем Unix/Linux, не для OS X.
··pwfile="/etc/passwd"
··shadowfile="/etc/shadow"
··gfile="/etc/group"
··hdir="/home"
··if ["$(id −un)"!= "root"]; then
····echo "Error: You must be root to run this command." >&2
····exit 1
··fi
··echo "Add new user account to $(hostname)"
··/bin/echo −n "login: "; read login
··# Следующая строка ограничивает максимальный числовой идентификатор
··#·· пользователя значением 5000, скорректируйте это значение,
··#·· чтобы оно соответствовало верхней границе вашего диапазона
··#·· числовых идентификаторов пользователей.
··uid="$(awk −F: '{ if (big < $3 && $3 < 5000) big=$3 } END { print big + 1 }'\
········ $pwfile)"
··homedir=$hdir/$login
··# Для каждого пользователя создается собственная группа.
··gid=$uid
··/bin/echo −n "full name: "; read fullname
··/bin/echo −n "shell: "; read shell
··echo "Setting up account $login for $fullname…"
··echo ${login}:x:${uid}:${gid}:${fullname}:${homedir}:$shell >> $pwfile
··echo ${login}:*:11647:0:99999:7::: >> $shadowfile
··echo "${login}:x:${gid}:$login" >> $gfile
··mkdir $homedir
··cp −R /etc/skel/.[a-zA-Z]* $homedir
··chmod 755 $homedir
··chown −R ${login}:${login} $homedir
··# Установка начального пароля
··exec passwd $login
Как это работает
Самая замысловатая команда в этом сценарии находится в строке . Она перебирает записи в файле /etc/passwd , отыскивает наибольший числовой идентификатор, который меньше наибольшего допустимого значения для учетных записей пользователей (в этом сценарии используется число 5000, но вы должны скорректировать его для своей конфигурации), и затем прибавляет 1, чтобы получить числовой идентификатор для новой учетной записи. Это избавляет администратора от необходимости запоминать следующий доступный числовой идентификатор, а также гарантирует высокую степень согласованности информации об учетных записях в процессе развития и изменения коллектива пользователей.
Сценарий добавляет учетную запись с новым числовым идентификатором. Затем создает домашний каталог для нового пользователя и копирует в него содержимое каталога /etc/skel . В соответствии с соглашениями, каталог /etc/skel должен хранить шаблоны файлов .cshrc, login, bashrc и .profile . На сайтах, где имеется веб-сервер, поддерживающий службу ~account, в новый домашний каталог необходимо также скопировать каталог, такой как /etc/skel/public_html . Это особенно удобно, если в вашей организации предусматривается настройка рабочих станций с Linux для инженеров или разработчиков специальными конфигурациями bash.
Запуск сценария
Этот сценарий не имеет аргументов и должен запускаться с привилегиями root.
Результаты
В нашей системе уже есть учетная запись для tintin, поэтому мы решили создать отдельную учетную запись для snowy [4] Вам непонятно, о чем это мы? Это персонажи из замечательной серии иллюстрированных комиксов «Adventures of Tintin» (Приключения Тинтина), созданной бельгийским художником Эрже (Hergé) и вышедшей в середине XX века. Подробности смотрите на сайте: http://www.tintin.com/ ( https://ru.wikipedia.org/wiki/Приключения_Тинтина — Примеч. пер. ).
(как показано в листинге 5.15).
Листинг 5.15.Тестирование сценария adduser
$ sudo adduser
Add new user account to aurora
login: snowy
full name: Snowy the Dog
shell: /bin/bash
Setting up account snowy for Snowy the Dog…
Changing password for user snowy.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.
Усовершенствование сценария
Одним из значительных преимуществ использования собственного сценария adduser является возможность расширять его и изменять логику отдельных операций, не заботясь об обновлении системы под эти изменения. В числе вероятных расширений автоматическая отправка приветственного электронного письма, в общих чертах обрисовывающего порядок работы и способы получения справочной информации, автоматическая печать на бумаге сводной информации об учетной записи для передачи пользователю, добавление псевдонима firstname_lastname или firstname.lastname в файл aliases сервера электронной почты и даже копирование комплекта файлов в домашний каталог учетной записи, чтобы пользователь мог немедленно включиться в коллективную работу над проектом.
№ 41. Приостановка действия учетной записи
Есть много случаев, когда желательно заблокировать учетную запись, не удаляя ее из системы, например, когда пользователь уличен в краже промышленных секретов и идет разбирательство, студент отправился отдыхать на летние каникулы или подрядчик ушел в отпуск.
Можно просто изменить пароль пользователя и не сообщить ему, но, если пользователь в это время находится в системе, также важно было бы принудительно вывести его из системы и закрыть доступ к его домашнему каталогу из других учетных записей в системе. Когда действие учетной записи приостанавливается, почти всегда требуется вывести пользователя из системы немедленно , а не когда он сам пожелает сделать это.
Бо́льшая часть сценария в листинге 5.16 связана с определением присутствия пользователя в системе, его уведомлением о завершении сеанса и принудительным выводом из системы.
Код
Листинг 5.16.Сценарий suspenduser
#!/bin/bash
# suspenduser — приостанавливает действие учетной записи до неопределенного
#·· момента в будущем
homedir="/home" # Местонахождение домашних каталогов пользователей
secs=10········ # Пауза в секундах перед выводом пользователя из системы
if [-z $1]; then
··echo "Usage: $0 account" >&2
··exit 1
elif ["$(id −un)"!= "root"]; then
··echo "Error. You must be 'root' to run this command." >&2
··exit 1
fi
echo "Please change the password for account $1 to something new."
passwd $1
# Теперь посмотрим, если пользователь зарегистрирован в системе.
#·· выведем его принудительно.
if who|grep "$1" > /dev/null; then
··for tty in $(who | grep $1 | awk '{print $2}'); do
····cat << "EOF" > /dev/$tty
******************************************************************************
URGENT NOTICE FROM THE ADMINISTRATOR:
This account is being suspended, and you are going to be logged out
in $secs seconds. Please immediately shut down any processes you
have running and log out.
If you have any questions, please contact your supervisor or
John Doe, Director of Information Technology.
******************************************************************************
EOF
··done
··echo "(Warned $1, now sleeping $secs seconds)"
··sleep $secs
··jobs=$(ps −u $1 | cut −d\ −f1)
kill −s HUP $jobs # Послать сигнал остановки процессам пользователя.
Интервал:
Закладка: