Внутреннее устройство Linux
Шрифт:
Оболочки для входа в систему
Традиционно оболочка для входа в систему возникает, когда вы в первый раз входите в систему с помощью терминала, используя такую команду, как /bin/login. Удаленный вход в систему по протоколу SSH также выдает вам оболочку для входа в систему. Основная идея: оболочка для входа в систему является начальной оболочкой. Можно определить, является ли оболочка оболочкой для входа в систему, запустив команду echo $0; если первый символ ответа дефис (-),
Когда оболочка bash запущена для входа в систему, она выполняет файл /etc/profile. После этого она ищет пользовательские файлы .bash_profile, .bash_login и .profile, запуская только первый файл, который обнаружит.
Как бы странно это ни звучало, но возможно запустить неинтерактивную оболочку в качестве оболочки входа в систему, чтобы принудительно исполнить ее файлы запуска. Для этого запустите такую оболочку с параметром -l или —login.
Оболочки не для входа в систему
Оболочка не для входа в систему — дополнительная оболочка, которую вы запускаете после входа в систему. Это всего лишь любая интерактивная оболочка, которая не является оболочкой входа. Терминальные команды системы управления окнами (xterm, GNOME Terminal и т. д.) запускают оболочки не для входа в систему, если только вы не запросите специально оболочку для входа.
После запуска в качестве оболочки не для входа в систему оболочка bash выполняет файл /etc/bash.bashrc, а затем запускает пользовательский файл .bashrc.
Последствия наличия двух типов оболочек
Причины, по которым существуют два различных типа файлов запуска, заключаются в том, что в давние времена пользователи входили в систему через традиционный терминал с оболочкой для входа в систему, после чего запускали подоболочки не для входа с системами управления окнами или экранной программой. По поводу подоболочек не для входа в систему было решено, что повторяющаяся настройка среды пользователя и запуск набора команд, которые уже запущены, являются расточительством. В оболочках для входа в систему можно было бы запускать замысловатые команды запуска из таких файлов, как .bash_profile, оставив только псевдонимы и другие «легковесные» вещи файлу .bashrc.
В наши дни большинство пользователей входит в систему через графические менеджеры дисплея (из следующей главы вы узнаете об этом подробнее). Многие из них начинают работу с одной неинтерактивной оболочки для входа в систему, чтобы сохранить описанную выше модель «для входа — не для входа». Если они этого не делают, вам придется полностью настроить окружение (путь, путь к страницам руководства и т. п.) в файле .bashrc, а иначе вы не увидите ничего из вашего окружения в терминальном окне оболочек. Кроме того, вам потребуется также файл .bash_profile, если вы желаете войти в консоль или удаленно, поскольку такие оболочки для входа даже не беспокоятся о файле .bashrc.
Пример файла .bashrc
Чтобы удовлетворить оба типа оболочек, каким образом создавать файл .bashrc, который можно было бы использовать и в качестве файла .bash_profile? Приведу один весьма элементарный (и в то же время совершенно достаточный) пример:
# Command path.
PATH=/usr/local/bin:/usr/bin:/bin:/usr/games
PATH=$HOME/bin:$PATH
# PS1 is the regular prompt.
# Substitutions include:
# \u username \h hostname \w current directory
# \! history number \s shell name \$ $ if regular user
PS1='\u\$ '
# EDITOR and VISUAL determine the editor that programs such as less
# and mail clients invoke when asked to edit a file.
EDITOR=vi
VISUAL=vi
# PAGER is the default text file viewer for programs such as man.
PAGER=less
# These are some handy options for less.
# A different style is LESS=FRX
# (F=quit at end, R=show raw characters, X=don't use alt screen)
LESS=meiX
# You must export environment variables.
export PATH EDITOR VISUAL PAGER LESS
# By default, give other users read-only access to most new files.
umask 022
Как описано ранее, можно использовать такой файл .bashrc в качестве файла .bash_profile с помощью символической ссылки. Можно также сделать эту связь еще четче, создав файл .bash_profile, как в этой однострочной команде:
. $HOME/.bashrc
Проверка того, является ли оболочка интерактивной
Если файл .bashrc соответствует файлу .bash_profile, то обычно не приходится запускать дополнительные команды для оболочек входа в систему. Однако, если вы желаете назначить различные действия для разных типов оболочек, можно добавить следующую проверку в файл .bashrc, которая отслеживает наличие символа i в переменной оболочки $-:
case $- in
*i*) # interactive commands go here
command
—snip—
;;
*) # non-interactive commands go here
command
—snip-
;;
esac
13.4.2. Оболочка tcsh
Стандартным вариантом оболочки csh практически во всех системах Linux является оболочка tsch, улучшенная C-оболочка, которая сделала популярными такие функции, как редактирование командной строки и многорежимное завершение имен файлов и команд. Даже если вы не используете оболочку tsch как оболочку по умолчанию для нового пользователя (мы рекомендуем применять оболочку bash), наличие файлов запуска для нее все же необходимо на тот случай, если пользователь натолкнется на нее.