Готовый перевод Linux Fundamentals Part 3 / Основы Linux от основателя Gentoo. Часть 3: Tuning the user environment
Настройка окружения пользователя
Знакомство с "fortune"
У вашего окружения есть много полезных опций, которые вы можете изменить по своему усмотрению. Однако до сих пор мы не обсуждали как восстанавливать эти настройки каждый раз, когда вы входите в систему, исключая то, чтобы каждый раз набирать их заново. В этом разделе мы рассмотрим настройку вашего окружения посредством редактирования файлов запуска.
Для начала, давайте покажем дружелюбное сообщение когда вы будете входить в систему. Чтобы увидеть пример такого сообщения, запустите fortune:
$ fortune
Бесконечное, тщательное планирование не заменит вам глупой удачи.
.bash_profile
Теперь давайте сделаем так чтобы fortune запускалось при каждой авторизации. Используя любимый текстовый редактор отредактируйте файл .bash_profile в вашей домашней дериктории. Если такого файла не существует, создайте его. Вставьте в его начало:
fortune
Выйдите из системы и зайдите обратно. До тех пор, пока вы не запустите менеджер дисплея, такой как например xdm, gdm или kdm, вас весело встретят, когда вы войдете:
mycroft.flatmonk.org login: chouser
Password:
Freedom from incrustations of grime is contiguous to rectitude.
<В здоровом теле здоровый дух.>(прим. Переводчика)
$
Командная строка авторизации пользователя.
При запуске bash проходит файл .bash_profile в вашей домашней директории, запуская каждую строчку как будто набирая ее в командной строке. Это называется обработкой файла.
Bash действует немного по разному, в зависимости от того, как она была запущена.
Если она была запущена с авторизацией, она будет действовать следующим образом -- для начала обработает /etc/profile, затем ваш персональный ~/.bash_profile.
Есть два способа запуска bash с авторизацией. Первый используется, когда вы входите в систему, bash запускается с именем процесса -bash. Это видно в списке процессов:
$ ps u
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
chouser 404 0.0 0.0 2508 156 tty2 S 2001 0:00 -bash
Вы, вероятно, увидите более длинный список, но но в нем будет как минимум одна строка с чертой перед именем вашей оболочки, как -bash в примере выше. Эта черта используется оболочкой , чтобы определить, была ли она запущена при авторизации.
Понимание --login
Второй способ запуска bash авторизацией -- опция командной строки --login. Этот способ иногда используется эмуляторами терминала (напрмер,xterm), чтобы добиться от bash поведения как при сессии с авторизацией.
После авторизации можно запустить много копий вашей оболочки.У тех из них которые запущены без опции --login или не имеют черточки перед именем процесса, поведение будет иным нежели при запуске с авторизацией.
Они предоставляют вам командную строку, однако, называются они интерактивными оболочками. Если bash запущена интерактивно, без авторизации, она проигнорирует /etc/profile и ~/.bash_profile вместо этого обработает ~/.bashrc
interactive login profile rc
yes yes source ignore
yes no ignore source
no yes source ignore
no no ignore ignore
Проверка на интерактивность
Иногда bash обрабатывает ваш ~/.bashrc не являясь реально интерактивной, например при использовании команд типа rsh или scp. Это важно помнить потому как вывод текста, как в примере с командой fortune выше, может испортить эти неинтерактивные сессии bash. Хорошей идеей является использование переменной PS1 для проверки факта интерактивности текущей сессии перед выводом текста:
if [ -n "$PS1" ]; then
fortune
fi
/etc/profile и /etc/skel
Как системный администратор, вы отвечаете за файл /etc/profile. Так как им руководствуются все кто впервые входят в систему, важно держать его в рабочем состоянии. Это также очень мощный инструмент, используемый для того чтобы заставить вещи работать правильно для новых пользователей сразу после того как они войдут используя свою новую учетную запись.
Однако, существуют некоторые настройки, которые, с одной стороны, могут быть выставленны в значения по умолчаниюдля новых пользователей, а с другой, могут быть легко ими изменены при необходимости. Как раз для этого и существует директория /etc/skel. При использовании команды useradd для создания новой учетной записи, все файлы из /etc/skel копируются в домашний каталог нового пользователя. Это означает, что вы можете положить, например, .bash_profile и .bashrc в /etc/skel для более комфортного начала работы нового пользователя.
export
Переменные в bash могут быть помечены таким образом, что они будут установлены во всех запущенных заново командных оболочках. Это означает, что они обозначены как внешние (export). Вы можете заставить bash отобразить список всех таким образом обозначенных внешних переменных в вашей сессии bash:
$ export
declare -x EDITOR="vim"
declare -x HOME="/home/chouser"
declare -x MAIL="/var/spool/mail/chouser"
declare -x PAGER="/usr/bin/less"
declare -x PATH="/bin:/usr/bin:/usr/local/bin:/home/chouser/bin"
declare -x PWD="/home/chouser"
declare -x TERM="xterm"
declare -x USER="chouser"
Обозначение переменных как внешние
Если переменная не обозначена как внешняя, вновь запущенная командная оболочка не будет иметь эту переменную установленной. Тем не менее, вы можете обозначить переменную как внешнюю, используя встроенную команду export с этой переменной.
$ FOO=foo
$ BAR=bar
$ export BAR
$ echo $FOO $BAR
foo bar
$ bash
$ echo $FOO $BAR
bar
В этом примере были заданы обе переменные FOO и BAR, но только BAR была помечена для экспорта. Когда был запущен новый bash он потерял значение переменной FOO. Если вы выйдите из этого нового bash, вы увидите что первоначальные значения обоих переменных FOO и BAR не изменились.
$ exit
$ echo $FOO $BAR
foo bar
Export и set -x
В связи с таким поведением, переменные могут быть указаны в ~/.bash_profile или /etc/profile и помечены для экспорта, и в дальнейшем больше не будет необходимости когда-либо их указывать. Существует несколько опций которые не могут быть экспортированы, и поэтому они должны быть заданы в ~/.bashrc и в вашем профиле последовательно. Эти опции настраиваются при помощи встроенной команды set:
$ set -x
Опция -x заставляет bash вывести на экран каждую команду которую он собирается выполнить:
$ echo $FOO
$ echo foo
foo
Это может быть очень полезно для понимания непредвиденного поведения команд при использовании кавычек или похожих странностей. Чтобы выключить опцию -x, используйте set +x. Обратитесь к странице документации man за всеми опциями встроенной команды set.
Установка переменных с "set"
Встроенную команду set можно также использовать для установки значений переменных, но это необязательно. Команда bash
set FOO=foo
обозначает то же самое что и
FOO=foo
Сделать переменную неустановленной позволяет встроенная команда unset:
$ FOO=bar
$ echo $FOO
bar
$ unset FOO
$ echo $FOO
unset FOO или FOO= ?
Это не то же самое, что установка переменной пустым значением, хотя порой это сложно объяснить. Проще говоря, используйте встроенную команду set без параметров чтобы увидеть список всех текущих установленных переменных:
$ FOO=bar
$ set | grep ^FOO
FOO=bar
$ FOO=
$ set | grep ^FOO
FOO=
$ unset FOO
$ set | grep ^FOO
Использование set без параметров похоже на использование встроенной команды export за исключением того, что set отображает все переменные а не только обозначенные как внешние.
Экспортирование переменных для изменения поведения программ.
Часто поведение команд можно изменить установкой переменных окружения. Как со стартом новой сесии bash, запускаемые программы из вашей командной строки bash будут видеть только переменные окружения, помеченные export. Например, команда man проверяет переменную PAGER, чтобы выяснить какую программу использовать для постраничного просмотра тескста.
$ PAGER=less
$ export PAGER
$ man man
Когда переменная PAGER установлена в less, вы будете видеть сначала одну страницу, а нажатие пробела будет перемещать вас а следующую страницу. Если вы измените переменную PAGER в cat, то весь текст отобразится сразу, без остановок на страницах.
$ PAGER=cat
$ man man
Использование "env"
К сожалению, если вы позабудете установить PAGER обратно в less, программа man (как и некоторые другие программы) будет продолжать вывод весь запрошенный текст без остановок. Если вам необходимо использовать установленный PAGER в cat единожды, вам нужно использовать команду env.
$ PAGER=less
$ env PAGER=cat man man
$ echo $PAGER
less
В этом примере переменная PAGER была использована со значением cat в программе man, но сама по себе переменная окружения PAGER осталась неизменной в сессии bash.
Внимание! Этот перевод, возможно, ещё не готов.
Его статус: идёт перевод
Переведено на Нотабеноиде
http://notabenoid.org/book/12606/40969
Переводчики: foff4ik, kindacute, nekjine, tehhi
VBart, allig4t0r
Настройки
Готово:
