25 декабря 2010 в 15:37

Основы Linux от основателя Gentoo. Часть 3 (4/4): Настройка пользовательского окружения перевод

Заключительная глава третьей части серии руководств Linux для новичков. Основы конфигурирования рабочей оболочки, настройка переменных окружения, а также подведение итогов всей третьей части.

Навигация по основам Linux от основателя Gentoo:

Часть I:
  1. BASH, основы навигации
  2. Управление файлами и директориями
  3. Ссылки, а также удаление файлов и директорий
  4. Glob-подстановки
Часть II:
  1. Регулярные выражения
  2. Назначения папок, поиск файлов
  3. Управление процессами
  4. Обработка текста и перенаправления
  5. Модули ядра
Часть III
  1. Документация
  2. Модель прав доступа
  3. Управление аккаунтами
  4. Настройка окружения

Настройка пользовательского окружения


Знакомство с «fortune»


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

Для начала, давайте покажем дружелюбное сообщение когда вы будете входить в систему. Чтобы увидеть пример такого сообщения, запустите fortune:

$ fortune
No amount of careful planning will ever replace dumb luck.

(приложение fortune может быть не установлено, запустите установку в пакетном менеджере вашего дистрибутива, например apt-get install 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 в вашей домашней директории, запуская каждую строчку как будто набирая ее в командной строке. Это называется интерпретацией файла (file sourcing).

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 vs. FOO=


Это не то же самое, что установка переменной пустым значением, хотя порой это сложно объяснить. Один из способов эту разницу заметить — вызвать команду set без параметров, чтобы вывести список всех текущих переменных:

$ FOO=bar
$ set | grep ^FOO
FOO=bar
$ FOO=
$ set | grep ^FOO
FOO=
$ unset FOO
$ set | grep ^FOO

Использование set без параметров похоже на использование встроенной команды export за исключением того, что set отображает все переменные, а не только обозначенные как внешние.

Экспортирование переменных для изменения поведения программ.


Часто поведение команд можно изменить установкой переменных окружения. Так же, как в случае новых сессий bash, запускаемые программы из вашей командной строки будут видеть только переменные окружения, помеченные на экспорт. Например, команда 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.

Итоги и ссылки


Итоги


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

Ссылки


Не забудьте посмотреть ресурсы c Linux документацией, использованные в этом руководстве, в особенности Linux Documentation Project, где сможете найти различные гайды, FAQ, а так же бесценные страницы мана. Не забудьте также о Linux Weekly News.

The Linux System Administrators guide является хорошим дополнением к этому руководству. Также вы можете найти в интернете весьма полезную статью Эрика Рэймонда "Unix and Internet Fundamentals HOWTO".

Дэниел Роббинс, на примере серии статей, «Bash в примерах», показывает как использовать конструкции программирования для написания собственных скриптов. Эта серия (особенно части 1 и 2) является замечательной подготовкой для экзамена LPIC 1-го уровня, к тому же поможет закрепить усвоенные понятия охватываемые руководством «Настройка пользовательского окружения» разделы:
Если вы не знакомы с текстовым редактором Vi прочтите вступление Дэниела в руководстве "Vi intro — the cheat sheet method tutorial". Оно позволит вам легко и в тоже время быстро освоить всю мощь Vi. Считайте, что этот материал обязателен для прочтения если вы не знаете как пользоваться Vi.

Для знакомства с редактором Emacs, смотрите руководство «the developerWorks», "Living in Emacs".

Перевод выполнил коллективный разум с помощью notabenoid.com. Спасибо следующим benoid-юзерам (в алфавитном порядке): kindacute, nekjine, Rich. Отдельная благодарность Алексею Блажко (blazhkoa@gmail.com), а также инициатору всей серии переводов, VBart.

Продолжение следует...


Об авторах


Daniel Robbins


Дэниэль Роббинс — основатель сообщества Gentoo и создатель операционной системы Gentoo Linux. Дэниэль проживает в Нью-Мехико со свой женой Мэри и двумя энергичными дочерьми. Он также основатель и глава Funtoo, написал множество технических статей для IBM developerWorks, Intel Developer Services и C/C++ Users Journal.

Chris Houser


Крис Хаусер был сторонником UNIX c 1994 года, когда присоединился к команде администраторов университета Тэйлора (Индиана, США), где получил степень бакалавра в компьютерных науках и математике. После он работал во множестве областей, включая веб-приложения, редактирование видео, драйвера для UNIX и криптографическую защиту. В настоящий момент работает в Sentry Data Systems. Крис также сделал вклад во множество свободных проектов, таких как Gentoo Linux и Clojure, стал соавтором книги The Joy of Clojure.

Aron Griffis


Эйрон Гриффис живет на территории Бостона, где провел последнее десятилетие работая в Hewlett-Packard над такими проектами, как сетевые UNIX-драйвера для Tru64, сертификация безопасности Linux, Xen и KVM виртуализация, и самое последнее — платформа HP ePrint. В свободное от программирования время Эйрон предпочитает размышлять над проблемами программирования катаясь на своем велосипеде, жонглируя битами, или болея за бостонскую профессиональную бейсбольную команду «Красные Носки».
+56
8538
209
DMinsky 16,5
Похожие публикации

Комментарии (22)

+4
ID175055 #
Спасибо!
Читаю с самого начала.
+2
SLEPOI #
Благодарен! очень интересные и полезные статьи)
+2
voooz #
Спасибо, потихоньку читаю всю серию!
+1
FessAectan #
Наконец-то! Я ждал, спасибо!
+1
Ejina #
Дома конечно есть хорошие книги по Linux, но эта будет просто жемчужина среди них! Спасибо авторам за книгу! Огромное спасибо ребятам за перевод!
+1
Xarakternik #
Вот мы и дождались конца. Огромное спасибо.
Перевел все на бумагу.

Теперь ждем баша в примерах.
+3
DMinsky #
Это еще не конец)) Ждите перевод четвертой части.
+1
naryl #
> (приложение fortune может быть не установлено, запустите установку в пакетном менеджере вашего дистрибутива, например apt-get install fortune — прим. пер.)

Дэниэль Роббинс пишет отличные нейтральные статьи, а переводчик и сюда Дебианы пропихнул. :)
+2
DMinsky #
Прошу прощения, я стараюсь быть максимально нейтральным. Но порой, нужно ориентироваться на самые массовые дистрибутивы, если вы предложите лучший выход для людей у которых не установлен fortune и которые могут немного запнутся в этом моменте, я с радостью его выслушаю и поправлю перевод.
+3
naryl #
Ладно, пусть остаётся так. Потому что только пользователи Ubuntu могут не уметь устанавливать программы.
+6
lampslave #
Зато у нас есть Центр приложений Ubuntu. А скоро будет Центр управления Центром управления Центром приложений Ubuntu :)
+1
SeLarin #
А у меня при «ps u» нет ни одного bash'а с черточкой. ЧЯДНТ? %)
+3
DMinsky #
Вероятно вы запустили эмулятор терминала, который запустился в интерактивном режиме. Для того, чтобы запустить терминал как оболочку входа, нужно либо изменить настройки самого эмулятора терминала, либо, чтобы просто попробовать, нажмите ctrl-alt-f1 (от f1 до f6 по вкусу) залогинтесь со своей учеткой и выполните ps u. Чтобы вернуться обратно в графическую оболочку ctrl-alt-f7 или просто alt-f7
+1
sarlv #
Огромное вам спасибо!!! Перечитал ваши статьи несколько раз. Буду ждать перевода четвертой части
0
amarao #
Мне кажется, или в статье что-то недоговаривается про control terminals?
+1
xget #
В избранное! После сессии просветимся.
+1
roller #
что то непонятно зачем нужна команда env
всегда писал просто
$ JAVA_SDK=блаблабла javaprog.sh
и все работало…
+2
DMinsky #
Если вы просто напишите VARIABLE=value, а после выполните нужную команду, команда конечно отработает верно. Суть в том, что после завершения команды, переменная $VARIABLE останется установленной со значением value. А если у вас есть несколько программ, которые зависят от одной переменной окружения и каждой из них нужно свое значение этой переменной? Вот для такого случая и предназначена эта (env) команда.
0
GrayWind #
А вот неправда ваша.
$ cat test.sh
#!/bin/sh

echo $var
$ var=value ./test.sh
value
$ ./test.sh

$ echo $var

$

А если поставить ";" после var=value, то да, переменная сохранится.
0
DMinsky #
Вот оно че Михалыч!)) Действительно, так в принципе работает, хотя я никогда не встречал подобного варианта запуска в документации. Чтож, тогда выскажу в защиту env следующее, помимо временной установки, можно также временно удалять (unset) переменные окружения, а так же запускать программу в пустым списком переменных окружения с помощью ключей -u -i соответственно.
0
GrayWind #
Ну, никто и не говорил, что env совсем не нужна. Просто в некоторых случаях её использование можно опустить, равно как и set.

Кроме всего прочего, есть ещё любопытное, для меня, использование скобочек. Например:
 $ (var=value; echo $var); echo $var
value

$
+1
sarlv #
Кстати, нашел статью Дэниела по vi на русском. Если кому интересно:
www.ibm.com/developerworks/ru/edu/l-vi/index.html

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.