Переменные окружения и конфигурационные dot-файлы

Автор: | 17.11.2018

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

Таким механизмом является окружение environ(7) и переменные окружения, значения которых можно увидеть при помощи команды env(1). Переменные окружения обычно документируются на странице руководства к тем программам, на которые воздействуют, как правило, в разделе ENVIRONMENT.

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

Переменная окружения PATH

john@ubuntu:~$ date

Вт. марта 14 01:23:47 MSK 2018

john@ubuntu:~$ help -d unset

unset — Unset values and attributes of shell variables and functions.

john@ubuntu:~$ unset PATH

john@ubuntu:~$ date

bash: date: Нет такого файла или каталога

Переменная окружения lang содержит идентификатор языка, на котором программы стараются общаться с пользователем, например man(1) ищет перевод страницы руководства.

Переменная окружения LANG

john@ubuntu:~$ LANG=ja_JP.UTF-8

john@ubuntu:~$ date

2018*  8  12  17:25:09 MSK

john@ubuntu:~$ LANG=ka_GE.UTF-8

john@ubuntu:~$ cal

1    2    3    4    5

6     7   8    9     10   11  12

13   14   15   16   17  18  19

20  21  22   23   24  25  26

27   28  29  30

john@ubuntu:~$ unset LANG

john@ubuntu:~$ whatis man

man (7)                                — macros to format man pages

man (1)                                — an interface to the on-line reference manuals

john@ubuntu:~$ export LANG=ru_RU.UTF-8

john@ubuntu:~$ whatis man

man (1)                                 — доступ к справочным страницам

man (7)                                 — macros to format man pages

Переменная окружения pager указывает имя программы «листателя», использующегося другими программами, вывод которых не умещается на один экран. Так, например, поступает man(1) при отображении отформатированной страницы руководства, mail(1) при просмотре длинного письма, mysql(1) или psql(1) при выводе большого количества результирующих строк ответа за запрос к базе данных. Наиболее распространенным листателем является less(1), используемый как замена менее удобного «классического» more(1).

Переменные окружения EDITOR и VISUAL указывают имя текстового редактора, который будет вызван другими программами при необходимости редактировать текст.

Например, crontab(1) использует указанный таким образом редактор для изменения списка периодических заданий, mail(1) для редактирования отправляемого сообщения, mysql(1) или psql(1) для редактирования длинных запросов к базе данных, а lftp(1) для редактирования списка «закладок». Очень часто в качестве редактора используется «классический» и достаточно непривычный vi(1), который можно таким образом заменить более удобным nano(1).

Переменная browser указывает имя просмотрщика HTML, который будет использован другими программами при необходимости показать HTML-страницу, например, отформатированную таким образом страницу руководства man(1).

Переменная окружения BROWSER

john@ubuntu:~$ man -Н Is

sh: 1: exec: www-browser: not found

man: couldn’t execute any browser from exec www-browser

john@ubuntu:~$ export BROWSER=chromium-browser

finn@ubuntu:~$ man -H Is

В текущем сеансе браузера создано новое окно.

Некоторые программы имеют специальную переменную окружения, которая содержит ключи, применяемые каждый раз при вызове программы, например MANOPT для man(1). Такие переменные для программ XXX чаще всего имеют имя  или XXX_OPTIONS или даже XXX, например ZIPOPT для zip(1), TAR_OPTIONS для tar(1), GZIP для gzip(1) и LESS/MORE для less(1) и more(1) соответственно.

Установив, например, MANOPT=-H (BROWSER=chromium-browser, или BROWSER=firefox, или BROWSER=links, или BROWSER=lynx), можно просматривать страницы руководства в (одном из указанных графическом и/или текстовом) Web-браузере, а установив GZIP=-9, можно заставить упаковщик всегда использовать девятую (самую сильную, но самую медленную) степень сжатия.

Переменная окружения PS1 изменяет приглашение командного интерпретатора и может содержать подстановки (документированные в bash(1)), например,

  • \u — имя зарегистрированного в системе пользователя,
  • \h — короткое собственное имя компьютера,
  • \w— имя текущего каталога,
  • \$— символ приглашения $ для обычного пользователя и # для Суперпользователя root,
  • \t — время в 24-часовом формате,
  • \e— управляющий символ ESC и пр.

Используя подстановки PS1 и управляющие ESC-последовательности console_codes(7) или воспользовавшись базой данных управляющих ESC-последовательностей terminfo(5) и командой tput(1), можно модифицировать приглашение по своему предпочтению.

Переменная окружения РS1

john@ubuntu:~$ man 5 terminfo

. . .                                                      . . .                                                   . . .

enter_reverse_mode                             rev            mr                      turn on reverse
video mode

. . .                                                      . . .                                                   . . .
enter_dim_node                                   dim           mh                      turn on half-bright
mode

. . .                                                      . . .                                                   . . .
exit_attribute_mode                           sgr0           me                      turn off all
attributes

. . .                                                      . . .                                                   . . .
john@ubuntu:~$ tput rev | od -a

0000000 esc     [      7      m
0000004
john@ubuntu:~$ tput dim | od -a

0000000 esc     [       2     m
0000004
john@ubuntu:~$ tput sgr0 | od -a

0000000 esc      [      В  esc [        m

0000006
john@ubuntu: ~$ PS1=’ \e[2n\t\n\e(B\e[n\u@\h \e[7n\w\e(B\e[n \$ ‘

12:14:45
john@ubuntu | $ cd /etc

12:14:45
john@ubuntu /etc $

Или даже можно воспользоваться поддержкой символов unicode(7) в UTF-8(7) представлении на терминале. В этом примере эмулятор терминала в графическом интерфейсе по умолчанию имеет нужные шрифты, а на консоли необходимо загрузить подходящий Unicode-шрифт, например, командой setfont Uni2-Ternimus16.

Переменная окружения РS1 (вариант 2)

john@ubuntu:~$ stty

speed 38400 baud; line = 0;

eol = M-^?; eol2 = M-^?; swtch = M-^?;

ixany iutf8

john@ubuntu:~$ PS1=’ \u\342\230\273 \h:\w\$ ‘

john@ubuntu:~$

 

Переменная окружения term устанавливает Имя терминала, по которому программы, использующие управляющие ESC-последовательности (например, файловый менеджер mc(1)), берут их значения из базы данных terminfo(5).

Для эмуляторов терминала в графическом интерфейсе ее значение обычно TERM=xterm или TERM=xterm-color, для консоли Linux TERM=linux, а для настоящего аппаратного терминала W: [VT100] TERM=vt1oo. При неправильном значении переменной, например, могут «перестать работать» функциональные клавиши, просто потому что программа будет ожидать поступление определенной ESC-последовательности, соответствующей функциональной клавише, а в реальности будет поступать другая.

Переменная окружения TERM

john@ubuntu:~$ env

. . .

TERM=xterm
john@ubuntu:~$ TERM=linux

john@ubuntu:~$ infocmp

. . .                                    . . .

kf18=\E[32~, kf19=\E[33~, kf2=\E[[B, kf20=\E[34~,

. . .                                           . . .
john@ubuntu:~$ od -a
F2↵
^D
0000000 esc     О      Q       nl

0000004

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

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

Конфигурационные dot-файлы

john@ubuntu:~$ ls -A

. . .
.bash_history
.bash_logout
.bashrc

. . .

.profile

.lftp
.ssh
john@ubuntu:~$ file .profile .bashrc .lftp .ssh

.profile: ASCII English text

.bashrc: ASCII English text

.lftp: directory
.ssh: directory

Некоторые программы, например lftp(1), ssh(1) или ssh(1), имеют собственные конфигурационные файлы и/или каталоги, тогда как простейшие less(1), tar(1) и zip(1) предполагают, что «постоянные» параметры по-прежнему задаются при помощи переменных окружения less, tar_options и zipopt.

В таких случаях «постоянные» значения переменных сохраняются в каком-либо конфигурационном файле командного интерпретатора bash, например, считываемом в начале сеанса— .profile или при каждом запуске— .bashrc.

Конфигурационные dot-файлы интерпретатора bash

john@ubuntu:~$ less ~/.bashrc

. . .

GZIP=-9v

PSl=’\e[2m\t\e(B\e[m \u@\h \e[7m\w\e(B\e[m \$ ‘

. . .

 

Конфигурационные dot-файлы представляют собой текст на некотором языке, понятном конфигурируемой программе, например, язык командного интерпретатора bash(1) используется в .profile и .bashrc.

В большинстве случаев имена dot-файлов и их язык документируются в страницах руководства к «их» программам, обычно в разделе FILES. Нередко конфигурационному файлу посвящается отдельная страница в пятой секции, например, nanorc(5) для dot-файла .nanorc текстового редактора nano(1) или netrc(5) для файла .netrc FTP-клиентов ftp(1) и lftp(1), или ssh_config(5) для .ssh/config SSH-клиента ssh(1).

В отдельных случаях, когда конфигурируется не конкретная программа, а общая для многих программ библиотека, например readline(3), название переменных окружения, имя и язык конфигурационного файла можно получить (INPUTRC и .inputrc для readline(3), соответственно) из страницы руководства самой библиотеки.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *