Шрифт:
Оболочки для входа в систему
Традиционно оболочка для входа в систему возникает, когда вы в первый раз входите в систему с помощью терминала, используя такую команду, как /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
Проверка того, является ли оболочка интерактивной