Библиотека сайта rus-linux.net
Руководство по Bash для начинающих | ||
---|---|---|
Назад | Глава 3: Среда окружения Bash | Вперед |
Файлы инициализации командной оболочки
Общесистемные конфигурационные файлы
/etc/profile
Когда оболочка вызывается интерактивно с использованием параметра --login
или когда она вызывается с помощью команды sh, командная оболочка считывает инструкции из файла /etc/profile
. В этом файле обычно устанавливаются значения переменных PATH
, USER
, MAIL
, HOSTNAME
и HISTSIZE
.
В некоторых системах в файле /etc/profile
задается значение umask; в других системах в этом файле находятся ссылки на другие конфигурационные файлы, например:
- на
/etc/inputrc
, общесистемный файл инициализации программы Readline, в котором можно настраивать реакцию клавиатуры; - на директорий
/etc/profile.d
, в котором находятся конфигурационные файлы, определяющие общую системную настройку некоторых конкретных программ.
В этом файле должны быть все настройки, которые вы хотите применить к пользовательской среде. Файл может выглядеть следующим образом:
# /etc/profile # System wide environment and startup programs, for login setup PATH=$PATH:/usr/X11R6/bin # No core files by default ulimit -S -c 0 > /dev/null 2>&1 USER="`id -un`" LOGNAME=$USER MAIL="/var/spool/mail/$USER" HOSTNAME=`/bin/hostname` HISTSIZE=1000 # Keyboard, bell, display style: the readline config file: if [ -z "$INPUTRC" -a ! -f "$HOME/.inputrc" ]; then INPUTRC=/etc/inputrc fi PS1="\u@\h \W" export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE INPUTRC PS1 # Source initialization files for specific programs (ls, vim, less, ...) for i in /etc/profile.d/*.sh ; do if [ -r "$i" ]; then . $i fi done # Settings for program initialization source /etc/java.conf export NPX_PLUGIN_PATH="$JRE_HOME/plugin/ns4plugin/:/usr/lib/netscape/plugins" PAGER="/usr/bin/less" unset i
В этом конфигурационном файле устанавливаются значения для некоторых основных переменных среды окружения, а также некоторые переменные, которые необходимы пользователю, запускающему в своем веб браузере поддержку языка Java и/или использующие Java-приложения. Смотрите раздел "Переменные".
Дополнительную информацию об условном операторе if, используемом в этом файле, смотрите в главе 7 "Условные инструкции"; в главе 9 "Повторяющиеся задания" обсуждаются циклы, использующие конструкцию for.
В исходных кодах Bash есть примеры файлов profile
, предназначенные для общего или индивидуального использования. Но для того, чтобы эти файлы и пример файла, приведенный выше, работали в вашей среде, их надо модифицировать!
/etc/bashrc
В системах, имеющих несколько типов командных оболочек, настройки,
касающиеся Bash, лучше поместить в этот файл, поскольку файл /etc/profile
читается также и другими оболочками, например, командной оболочкой Bourne. С помощью разделения конфигурационных файлов, предназначенных для различных типов оболочек, можно предотвратить ошибки, генерируемые оболочками, не понимающими синтаксис Bash. В таких случаях пользовательский файл ~/.bashrc
может указывать на файл /etc/bashrc
с тем, чтобы включить его в процесс инициализации оболочки при входе в систему.
Вы также можете обнаружить, что в файле /etc/profile
в вашей системе хранятся настройки только командной оболочки и настройки программ, тогда как в файле /etc/bashrc
хранятся общесистемные определения функций оболочки и алиасов. На файл /etc/bashrc/
> можно ссылаться из файла /etc/profile
или из отдельных пользовательских файлов, предназначенных для инициализации командной оболочки.
В исходных кодах есть примеры файла bashrc
, либо вы можете найти его копию в /usr/share/doc/bash-2.05b/startup-files
. Ниже приведена часть файла bashrc
, которая поставляется вместе с документацией по Bash:
alias ll='ls -l' alias dir='ls -ba' alias c='clear' alias ls='ls --color' alias mroe='more' alias pdw='pwd' alias sl='ls --color' pskill() { local pid pid=$(ps -ax | grep $1 | grep -v grep | gawk '{ print $1 }') echo -n "killing $1 (process $pid)..." kill -9 $pid echo "slaughtered." }
Кроме алиасов общего назначения, в нем определяются алиасы, благодаря которым можно выполнять команды даже в тех случаях, когда при наборе команд делаются опечатки. Мы будем обсуждать алиасы в разделе "Создание и удаление алиасов". В этом файле есть функция pskill; функции будут подробно изучены в главе 11 "Функции".
Конфигурационные файлы индивидуальных пользователей
У меня нет этих файлов?! | |
Первоначально у вас в вашем домашнем директории этих файлов может не быть, создайте их в случае необходимости. |
~/.bash_profile
Это тот конфигурационный файл, в котором предпочтительно задавать индивидуальную пользовательскую настройку среды окружения. В этом файле пользователи могут добавить дополнительные конфигурационные параметры, либо изменить настройки, заданные по умолчанию:
franky~> cat .bash_profile ################################################################# # # # .bash_profile file # # # # Executed from the bash shell when you log in. # # # ################################################################# source ~/.bashrc source ~/.bash_login case "$OS" in IRIX) stty sane dec stty erase ;; # SunOS) # stty erase # ;; *) stty sane ;; esac
Этот пользователь сконфигурировал использование символа Backspace для входа в другие операционные системы. Кроме того, выполняется чтение файлов .bashrc
и .bash_login
.
~/.bash_login
В этом файле содержатся конкретные настройки, которые обычно активируются только когда вы войдете в систему. В этом примере мы используем файл, в котором конфигурируется значение переменной umask и при входе систему показывается список подключенных пользователей. Пользователю также выдается календарь на текущий месяц:
####################################################################### # # # Bash_login file # # # # commands to perform from the bash shell at login time # # (sourced from .bash_profile) # # # ####################################################################### # file protection umask 002 # all to me, read to group and others # miscellaneous w cal `date +"%m"` `date +"%Y"`
В случае, когда отсутствует файл ~/.bash_profile
, будет читаться этот файл.
~/.profile
Если отсутствуют файлы ~/.bash_profile
и ~/.bash_login
, будет
читаться файл ~/.profile
. В него можно поместить те же конфигурационные настройки, которые затем также будут доступны в других командных оболочках. Помните, что другие командные оболочки не могут понимать синтаксис Bash.
~/.bashrc
В настоящее время чаще пользуются командными оболочками, при входе в которые не нужна аутентификация, например, когда аутентификация уже выполнена в графическом терминале X. При открытии такого окна, пользователю не нужно указывать имя пользователя и пароль, проверка подлинности не выполняется. Когда это происходит, Bash ищет файл ~/.bashrc
, а поскольку на этот файл также делаются ссылки в файлах, которые читаются при входе в систему, это означает, что вам не нужно указывать одни и те же настройки в нескольких файлах.
В следующем пользовательском файле .bashrc
определяется пара алиасов и после того, как будет прочитан общесистемный файл /etc/bashrc
, устанавливаются значения переменных, используемых в конкретных программах:
franky ~> cat .bashrc # /home/franky/.bashrc # Source global definitions if [ -f /etc/bashrc ]; then . /etc/bashrc fi # shell options set -o noclobber # my shell variables export PS1="\[\033[1;44m\]\u \w\[\033[0m\] " export PATH="$PATH:~/bin:~/scripts" # my aliases alias cdrecord='cdrecord -dev 0,0,0 -speed=8' alias ss='ssh octarine' alias ll='ls -la' # mozilla fix MOZILLA_FIVE_HOME=/usr/lib/mozilla LD_LIBRARY_PATH=/usr/lib/mozilla:/usr/lib/mozilla/plugins MOZ_DIST_BIN=/usr/lib/mozilla MOZ_PROGRAM=/usr/lib/mozilla/mozilla-bin export MOZILLA_FIVE_HOME LD_LIBRARY_PATH MOZ_DIST_BIN MOZ_PROGRAM # font fix alias xt='xterm -bg black -fg white &' # BitchX settings export IRCNAME="frnk" # THE END franky ~>
Дополнительные примеры можно найти в пакете Bash. Помните, что чтобы файлы с примерами работали в вашей среде, в них нужно вносить изменения.
Алиасы рассматриваются в разделе "Алиасы".
~/.bash_logout
В этом файле находятся инструкции, выполняемые при выходе из системы. В этом примере при выходе из системы очищается окно терминала. Это удобно при дистанционных подключениях, когда после завершения подключения окно терминала очищается.
franky ~> cat .bash_logout ####################################################################### # # # Bash_logout file # # # # commands to perform from the bash shell at logout time # # # ####################################################################### clear franky ~>
Изменение конфигурационных файлов командной оболочки
Когда в любом из указанных выше файлов делаются изменения, то для того, чтобы изменения вступили в силу, пользователь должен либо переподключиться к системе, либо использовать команду source, указав измененный файл. После того, как скрипт будет проинтерпретирован, изменения будут применены к текущей сессии командной оболочки:
Рис.3.1. Различные строки приглашения для различных пользователей
Большинство скриптов выполняются в приватной среде окружения: переменные, не наследуются дочерними процессами, если они не экспортированы родительской оболочкой. Использование файла, в котором указываются команды оболочки, являются тем способом, с помощью которого вы можете применить изменения к своей собственной среде исполнения и настроить переменные для текущей командной оболочки.
В этом примере также демонстрируется использование различных строк приглашений для различных пользователей. В данном случае красный цвет будет указывать, что этот режим опасен. Если цвет строки приглашения зеленый, то не следует слишком беспокоиться.
Обратите внимание, что source resourcefile
это то же самое, что и .Resourcefile
.
Если вы заблудились во всех этих конфигурационных файлах и обнаружили, что столкнулись с настройками, которые вам непонятны, воспользуйтесь инструкциями echo точно также, как и при отладке скриптов; смотрите раздел "Отладка скрипта по частям". Вы можете добавлять инструкции, например, следующим образом:
echo "Теперь выполняется файл .bash_profile.."
или, например, так:
echo "Теперь в файле .bashrc: устанавливаем значение переменной PS1" export PS1="[some value]" echo "PS1 is now set to $PS1"
Предыдущий раздел: | Оглавление | Следующий раздел: |
Глава 3: Cодержание | Переменные |