Настройка bash

Настройка оболочки bash также призвана автоматизировать и упростить интерактивную работу в ней. Так, можно постоянно вводить вручную путь к каталогу, содержащему пользовательские сценарии, а можно, настроив должным образом переменные окружения, вызывать их, находясь в любом каталоге файловой системы. Или, как говорилось выше, вызывать команды типа rm , mv и т.д. с параметром, запрашивающим подтверждение для выполнения потенциально опасныхданных, а можно путем определения псевдонимов команд ( aliases ) предписать вывод такого подтверждения по умолчанию.

Поведение оболочки bash по умолчанию определяется двумя общесистемными конфигурационными файлами — /etc/bashrc и /etc/profile . Они создаются при установкеASPLinuxи содержат некий первоначальный набор настроек, подходящий для большинства пользовательских задач.

Кроме того, при создании учетной записи пользователя и назначения ему оболочки bash в качестве рабочей среды в его пользовательском каталоге создаются два файла аналогичного назначения — $HOME/.bashrc и $HOME/.bash_profile . Они запускаются сразу после общесистемных, файлами в сеансе конкретного пользователя. Именно ихредактированием достигаются индивидуальные настройки.

Иногда пользовательские конфигурационные файлы в домашнем каталоге могут отсутствовать, если, например, при создании учетной записи пользователя на стадии установки ASPLinux для него была определена другая оболочка, позднее вручную замененная на bash . В этом случае ихследует создать либо вручную, либо копированием из каталога /etc :

cp /etc/bashrc $HOME/.bashrc

и

cp /etc/profile $HOME/.bash_profile

либо просто командой cat :

cat > .bashrc

и

cat > .bash_profile

В последнем случае ихможно оставить пустыми, внося при необходимости только те опции, которые потребуется сделать отличными от общесистемных.

Следует обратить внимание на то, что пользовательские конфигурационные файлы начинаются с символа . (точка). Это общее правило, касающееся не только файлов конфигурации bash, но и почти любыхпрограмм. Точку в данном случае следует отличать от обозначения текущего каталога ( . или ./) — она означает, что файл с именем такой формы является скрытым (аналог атрибута hidden в MS DOS). Он не будет, в частности, отображаться командой Is по умолчанию.

Чтобы увидеть скрытые файлы в списке текущего каталога, команду эту следует дать в форме

ls -a

Назначение файлов .bashrc и .bash_profile различно. Первый считыва-ется один раз — при авторизации пользователя и первом запуске оболочки в сеансе. Файл .bash_profile перечитывается всякий раз, как запускается новый экземпляр программы bash, что происходит при исполнении некоторых программ или, например, при запуске окна терминала в X Window System. И потому не следует удивляться, что поведение оболочки bash может быть различным в разныхслучаях. Хотя ничто не запрещает сделать настройки обоих конфигурационныхфайлов идентичными.

В домашнем каталоге администратора (/root) также имеются индивидуальные файлы /root/.bashrc и /root/.bash_profile, настройки которых, как правило, отличаются и от общесистемных, и от прочих пользовательских. И потому если авторизоваться в системе как root, поведение оболочки bash будет иным, чем в сеансе обычного пользователя. Однако если последний получает временные привилегии администратора командой su, поведение bash по прежнему определяется его пользовательскими конфигурационными файлами, а не настройками суперпользователя.

В результате пользователь, получив права администратора командой su, иногда не в состоянии запустить некоторые программы, предназначенные для общесистемного конфигурирования. Это может вызвать недоумение, хотя объясняется очень просто: путь к файлам этой группы не определен в переменной окружения конфигурационного файла данного пользователя. И преодолевается еще проще — запуском команды с указанием полного пути (обычно команды такого рода собраны в каталоге /sbin), переопределением переменной окружения в данном сеансе или исправлением своего конфигурационного файла.

Впрочем, при необходимости доступа к окружению администратора в полном объеме, для получения его прав команду su следует использовать в форме

SU -1

(или просто su -). В этом случае происходит перечитывание файла начальной

конфигурации командной оболочки администратора.

Уяснив назначение конфигурационныхфайлов, можно приступить к ихредак-тированию.

Для этого потребуется любой текстовый редактор, например, описанные в этом руководстве консольные редакторы vi или joe , или редактор для среды KDE—kwrite . Обратим только внимание, что если выбранный редактор по умолчанию поддерживает перенос строк по достижению границы экрана или окна, эту опцию следует обязательно отключить: в результате принудительного разрыва строк файл может стать неработоспособным. Об этом следует всегда помнить при редактировании любыхфайлов конфигурации и скриптов.

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

Начнем с переменныхокружения. Через нихопределяются такие свойства оболочки, как тип терминала (переменная $TERM ), домашний каталог пользователя (переменная $HOME ) и многие другие. В Shell-совместимыхоболочках (в том числе и в bash ) любая переменная задается в одном из конфигураци-онныхфайлов bash таким образом:

ИМЯ_ПЕРЕМЕННОЙ=значение

Например, для смены типа используемого терминала на vt100 следует добавить

TERM=vt100

Большинство переменныхявляется внутренними (называемыми переменными оболочки), то есть доступными только для внутреннихее команд. Полный их список, который можно просмотреть командой set , включает многие десятки. Они используются главным образом при создании сценариев.

На поведение оболочки при интерактивной работе большее влияние оказывают переменные окружения ( shell environment ). Чтобы превратить переменную оболочки в переменную окружения, ее следует экспортировать, то есть сделать доступной для внешнихкоманд. Чтобы проделать это с переменной $TERM из приведенного примера, достаточно присоединить к ее определению выражение

export TERM=vt100

или добавить его отдельной строкой:

TERM=vtlOO export TERM

Обычно переменные окружения определяются в файле

$HOME/.bash_profile.

Просмотреть текущие ихзначения можно командой

echo $ИМЯ_ПЕРЕМЕННОЙ

Одной из важнейшихсреди переменных окружения является неоднократно упоминавшаяся ранее переменная $РАТН. Настало время остановиться на ней подробнее.

Переменная $РАТН задает список каталогов, просматриваемыхинтерпретатором оболочки при поиске команд, то есть исполняемыхбинарныхфайлов и сценариев. Текущее значение $РАТН можно определить командой:

echo $PATH

ответом на что будет сообщение вида

/usr/local/bin:/bin:/usr/bin:/usr/XHR6/bin:/usr:/home/username/bin

Это стандартный набор каталогов (значения, разделенные двоеточием) для исполняемыхфайлов, определяемый общесистемными настройками bash, за исключением последнего компонента, который определяется в файле $НОМЕ/.bash_profile следующим образом:

РАТН=$РАТН: $HOME/bin

то есть к общесистемному значению переменной $РАТН для любого пользователя присоединяется его персональный подкаталог bin в домашнем каталоге ($HOME/bin), что для конкретного пользователя username принимает форму /home/username/bin.

Если по тем или иным причинам файл $НОМЕ/.bash_profile не был создан одновременно с учетной записью, строку РАТН=$РАТН:$HOME/bin (или полное перечисление каталогов, как приведено выше) нужно внести в него вручную.

Далее, следует помнить, что командные интерпретаторы оболочек Linux, в том числе и bash, в отличие отC0MMAND.COM для MS DOS, не производят поиска исполняемыхфайлов в текущем каталоге сами по себе, что часто

обескураживает пользователя. Чтобы они делали это, текущий каталог должен быть явно (в форме ./) указан в переменной окружения $PATH . Однако, делать это не безопасно, так как может быть использовано для подмены си-стемныхутилит при взломе системы.

Наконец, в перечне каталогов $PATH отсутствуют каталоги для команд административного назначения (/sbin и /usr/sbin ). Если пользователю часто приходится обращаться к таким командам после получения временных прав суперпользователя, следует, как уже говорилось, пользоваться командой

su -

что предпочтительней прямой авторизации в качестве root . Можно также внести каталоги, содержащие административные команды, в $PATH , причем ранее всехпрочих. В результате соответствующая строка в $HOME/.bash_profile примет вид

PATH=/sbin:/usr/sbin:$PATH:$HOME/bin

а ответом на команду

echo $PATH

будет вывод на экран следующего перечня:

/sbin:/usr/sbin:/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin:/home/alv/bin

Порядок перечисления каталогов в переменной $PATH имеет значение, так как при вводе любой команды интерпретатор bash ищет его слева направо, то есть, в приведенном примере, сначала в /sbin , потом в /usr/sbin и т.д., и лишь в последнюю очередь — в $HOME/bin . Поэтому если пользователь создал собственную команду, одноименную какой-либо системной из каталога /sbin и хочет в первую очередь использовать именно ее, следует позаботиться, чтобы в перечне каталогов $HOME/bin стояло раньше, чем /sbin .

Переменная $PATH , как и любая другая, заданная в форме PATH=...

остается пока внутренней переменной оболочки. Для превращения в переменную окружения ее нужно экспортировать. Если файл $HOME/.bash_profile был создан одновременно с учетной записью, это было сделано автоматически. Если нет — после строки PATH=... следует добавить

export PATH

Через переменные окружения можно настроить вид приглашения командной строки, что имеет не только декоративную, но и функциональную сторону: приглашение призвано помочь пользователю ориентироваться в его положении в структуре каталогов, отличать пользователей друг от друга и от администратора и т.д.

Так, принятая в bash по умолчанию форма

[username@localhost username]$

показывает имя пользователя, имя машины и имя текущего каталога, а также позволяет с первого взгляда отличить обычного пользователя ($) от администратора (#). Однако ее можно сделать еще более информативной, для чего используется переменная окружения $PS1. Так, если определить ее следующим образом:

PS1=’\u:\w=»'

в приглашении будет выводится имя пользователя (и) и полный путь до текущего каталога, начиная от домашнего (w, символ \ в обоихслучаяхуказывает, что следующий за ним символ — не просто алфавитный, а имеет специальное значение), а само приглашение приобретет вид

alv:~/cur/src=»

Кроме того, в приглашение можно ввести любую последовательность обычныхалфавитных символов, например, сообщение вида

alv:Введите команду~=»

что достигается строкой

PS1=’\и:Введите команду\до=»'

Разумеется, переменную $PS1 после настройки нужно экспортировать

export PS1

Кроме этого, пользователь может определить для себя и другие переменные окружения, такие, как системный редактор по умолчанию

EDITOR=joe export EDITOR

или программу постраничного просмотра

PAGER=more export PAGER

Не менее полезным, чем определение переменныхокружения, является задание псевдонимов ( aliases ) для некоторыхкоманд. Это обычно делается в файле $HOME/.bashrc следующим образом:

alias имя_псевдонима=’имя_команды [-опции]’

Имя псевдонима может совпадать с именем команды, опции которой задают условия ее выполнения. Ранее неоднократно говорилось, что во избежание непреднамеренной потери данныхкоманды типа rm , cp , mv лучше задавать с опцией -i , запрашивающей подтверждения потенциально опасныхдействий (например, при совпадении имен файлов и т.д.). Псевдонимы позволяют автоматизировать этот процесс, сделав такой запрос принудительным.

Для этого в файл $HOME/.bashrc вносятся строки:

alias rm=’rm -i’ alias cp=’cp -i’ alias mv=’mv -i’

то есть команды rm , cp , mv определяются как псевдонимы самихсебя, но с обязательной опцией -i , в результате чего предупреждающие сообщения будут выводиться всегда.

При уничтожении большого количества файлов и уверенности в правильности своихдействий псевдоним для rm (или любой другой команды) можно временно отключить командой:

unalias rm

а по завершении процедуры — восстановить:

alias rm=’rm -i’

Последняя команда может использоваться при интерактивной работе для временного определения псевдонимов.

Можно создавать имена псевдонимов, отличные от имен подменяемыхко-манд. Так, команда ls по умолчанию не выводит имена скрытыхфайлов (вида .имя_файла ), и в большинстве случаев это удобно. Однако при всякого рода настройкахвидеть скрытые файлы необходимо. И на этот случай можно определить псевдоним типа

alias la=’Is -а’

и внести его в $НОМЕ/.bashrc или использовать интерактивно.

Описанными примерами далеко не исчерпываются возможности настройки

bash.

Полную информацию по этому вопросу можно получить из экранной документации man bash.

Еще материалы по теме: