Библиотека сайта rus-linux.net
Фундаментальные основы Linux. Часть VII. Управление локальными учетными записями пользователей
Оригинал: Linux FundamentalsАвтор: Paul Cobbaut
Дата публикации: 16 октября 2014 г.
Перевод: А.Панин
Дата перевода: 23 декабря 2014 г.
Глава 28. Профили пользователей
Вошедшие в систему пользователи получают в свое распоряжение множество установленных (и изменяемых) псевдонимов команд, переменных и функций, но откуда они берутся? Командная оболочка
использует множество загрузочных файлов сценариев, которые исполняются (или подключаются
) в момент ее вызова. Ниже приводится обзор упомянутых загрузочных сценариев.
Системный профиль
Как командная оболочка bash
, так и командная оболочка ksh
будет проверять существование файла /etc/profile
и подключать
его в случае существования.
При чтении данного файла вы можете обнаружить (как в дистрибутиве Debian, так и в дистрибутиве Red Hat Enterprise Linux), что именно его силами создается переменная окружения PATH (помимо других переменных окружения). Данный сценарий также может изменять значение переменной окружения PS1, устанавливать значение переменной окружения HOSTNAME и исполнять дополнительные сценарии, такие, как /etc/inputrc
.
/etc/profile
из дистрибутива Debian используется утилита grep.
root@debian7:~# grep PATH /etc/profile PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" PATH="/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games" export PATH root@debian7:~#
/etc/profile
из дистрибутива RHEL/CentOS7.
[root@centos7 ~]# grep PATH /etc/profile case ":${PATH}:" in PATH=$PATH:$1 PATH=$1:$PATH export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE HISTCONTROL [root@centos7 ~]#
Пользователь root
может использовать данный сценарий для объявления псевдонимов команд, функций и переменных для каждого из пользователей в системе.
Файл ~/.bash_profile
В том случае, если данный файл существует в домашней директории пользователя, командная оболочка bash
осуществит его подключение. В дистрибутивах Debian 5/6/7 данного файла по умолчанию не существует.
~/.bash_profile
, который проверяет существование сценария ~/.bashrc
и осуществляет его подключение в случае существования. Также он добавляет путь к директории $HOME/bin к списку путей, хранящемуся в переменной окружения $PATH.
[root@rhel7 ~]# cat /home/paul/.bash_profile # .bash_profile # Получение псевдонимов команд и функций if [ -f ~/.bashrc ]; then . ~/.bashrc fi # Пользовательское окружение и запускаемые программы PATH=$PATH:$HOME/.local/bin:$HOME/bin export PATH [root@rhel7 ~]#
Файл ~/.bash_login
Если сценария .bash_profile
не существует, командная оболочка bash
будет выполнять проверку существования сценария ~/.bash_login
и его подключение в случае существования.
Данного файла не существует по умолчанию ни в дистрибутиве Debian, ни в дистрибутиве Red Hat.
Файл ~/.profile
Если в домашней директории пользователя не существует ни сценария ~/.bash_profile
, ни сценария ~/bash_login
, командная оболочка bash будет проверять наличие сценария ~/.profile
и исполнять его. По умолчанию данного сценария не существует в дистрибутиве Red Hat.
~/.bashrc
и добавлять путь к директории $HOME/bin в список директорий, хранящийся в переменной окружения $PATH.
root@debian7:~# tail -11 /home/paul/.profile if [ -n "$BASH_VERSION" ]; then # подключение сценария .bashrc в случае его существования if [ -f "$HOME/.bashrc" ]; then . "$HOME/.bashrc" fi fi # изменение значения переменной PATH с целью включения пути к пользовательской директории бинарных файлов в случае ее существования if [ -d "$HOME/bin" ] ; then PATH="$HOME/bin:$PATH" fi
По умолчанию данного файла не существует в дистрибутивах RHEL/CentOS.
Файл ~/.bashrc
Сценарий ~/.bashrc
обычно подключается средствами других сценариев. Давайте рассмотрим задачи, решаемые этим сценарием по умолчанию.
~/.bashrc
, проверяющий существование сценария /etc/bashrc
и подключающий его в случае существования. Также он позволяет объявлять специальные псевдонимы команд и функции.
[root@rhel7 ~]# cat /home/paul/.bashrc # .bashrc # Подключение файла с глобальными объявлениями if [ -f /etc/bashrc ]; then . /etc/bashrc fi # Раскомментируйте следующую строку, если вам не нравится функция автоматического разделения вывода утилиты systemctl на страницы: # export SYSTEMD_PAGER= # Пользовательские псевдонимы команд и функции
root@debian7:~# wc -l /home/paul/.bashrc 110 /home/paul/.bashrc
Файл ~/.bash_logout
При завершении работы командная оболочка bash
может исполнять сценарий ~/.bash_logout
.
serena@deb503:~$ cat .bash_logout # ~/.bash_logout: исполняется bash(1) при завершении работы командной оболочки. # при завершении работы с консолью в целях повышения безопасности экран очищается if [ "$SHLVL" = 1 ]; then [ -x /usr/bin/clear_console ] && /usr/bin/clear_console -q fi
/usr/bin/clear
.
[serena@rhel53 ~]$ cat .bash_logout # ~/.bash_logout /usr/bin/clear
paul@rhel65:~$ cat .bash_logout # ~/.bash_logout
Обзор сценариев дистрибутива Debian
Ниже приведена таблица для дистрибутива Debian с указанием моментов запуска каждого из описанных стартовых сценариев командной оболочки bash.
Таблица 28.1. Пользовательское окружение дистрибутива Debian
Сценарий | su | su - | ssh | gdm |
---|---|---|---|---|
~/.bashrc | Не запускается | Запускается | Запускается | Запускается |
~/.profile | Не запускается | Запускается | Запускается | Запускается |
/etc/profile | Не запускается | Запускается | Запускается | Запускается |
/etc/bash.bashrc | Запускается | Не запускается | Не запускается | Запускается |
Обзор сценариев дистрибутива RHEL5
Ниже приведена таблица для дистрибутива Red Hat Entrprise Linux 5 с указанием моментов запуска каждого из описанных стартовых сценариев командной оболочки bash.
Таблица 28.2. Пользовательское окружение дистрибутива Red Hat
Сценарий | su | su - | ssh | gdm |
---|---|---|---|---|
~/.bashrc | Запускается | Запускается | Запускается | Запускается |
~/.bash_profile | Не запускается | Запускается | Запускается | Запускается |
/etc/profile | Не запускается | Запускается | Запускается | Запускается |
/etc/bashrc | Запускается | Запускается | Запускается | Запускается |
Практическое задание: профили пользователей
-
1. Выведите список всех файлов профиля пользователя в вашей системе.
-
2. Прочитайте содержимое каждого из этих файлов, обычно в них осуществляется
подключение
дополнительных сценариев. -
3. Объявите уникальную переменную, псевдоним команды и функцию в каждом из этих файлов.
-
4. Воспользуйтесь различными способами получения командной оболочки (su, su -, ssh, tmux, gnome-terminal, Ctrl-Alt-F1, ...) и проверьте, какие из объявленных вами переменных, псевдонимов команд и функций присутствуют в вашем пользовательском окружении.
-
5. Можете ли вы сходу определить последовательность исполнения обнаруженных стартовых сценариев?
-
6. Если работа приложения зависит от значения объявленной в файле $HOME/.profile переменной, имеет ли значение существование файла $HOME/.bash_profile или нет?
Корректная процедура выполнения практического задания: профили пользователей
-
1. Выведите список всех файлов профиля пользователя в вашей системе.
-
ls -a ~ ; ls -l /etc/pro* /etc/bash*
-
2. Прочитайте содержимое каждого из этих файлов, обычно в них осуществляется
подключение
дополнительных сценариев. -
3. Объявите уникальную переменную, псевдоним команды и функцию в каждом из этих файлов.
-
4. Воспользуйтесь различными способами получения командной оболочки (su, su -, ssh, tmux, gnome-terminal, Ctrl-Alt-F1, ...) и проверьте, какие из объявленных вами переменных, псевдонимов команд и функций присутствуют в вашем пользовательском окружении.
-
5. Можете ли вы сходу определить последовательность исполнения обнаруженных стартовых сценариев?
-
Нет, так как при совпадении имен псевдонимов команд, функций и переменных производится их перезапись.
-
6. Если работа приложения зависит от значения объявленной в файле $HOME/.profile переменной, имеет ли значение существование файла $HOME/.bash_profile или нет?
-
Да, имеет. (Обратитесь к странице руководства man bash /INVOCATION)
Предыдущий раздел: | Оглавление | Следующий раздел: |
Глава 27. Пароли пользователей | Глава 29. Группы пользователей |