Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Redaktsia_4_UP_Linux_-_Osnovnaya_chast.doc
Скачиваний:
57
Добавлен:
06.11.2018
Размер:
2.02 Mб
Скачать

2.3. Переменные окружения

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

HOSTNAME=samsung.localnet

SHELL=/bin/bash

USER=root

PATH=/usr/local/sbin:/usr/sbin:/sbin:/usr/local/bin:/usr/bin:/bin:/usr/games:/usr/lib/java/bin:/usr/lib/java/jre/bin:/usr/lib/qt/bin

PWD=/root

LANG=ru_RU.KOI8-R

PS1=\u@\h:\w\$

PS2=>

HOME=/root

LOGNAME=root

VISUAL=mcedit

TERMINAL=mcedit

Рис. 2.4. Сокращенный список переменных окружения и их значений

Переменные окружения можно также прочитать в файлах environ, хранимых в нумерованных подкаталогах активных процессов в директории /proc. В качестве разделителя записей используются NULL-символы, и, чтобы представить их в удобной для чтения форме, следует применить конвейер из двух команд:

cat /proc/3456/environ|tr ”\0” ”\n”

Вторая команда заменяет нулевые разделители переводом строки.

Изменить переменную окружения можно несколькими способами, например:

HOME=/tmp

export HOME=/tmp

Во втором случае переменная становится глобальной и «видимой» другим процессам. Иначе говоря, переменная интерпретатора экспортируется в переменную среды. С помощью команды export переменная окружения не только объявляется, но ей присваивается определённое значение. Если переменная не существует, она будет создана. Если переменная уже имеет какое-то значение, оно будет потеряно.

Изменение значения переменной действительно в течение сеанса. Чтобы присвоить значения переменным окружения постоянно, их следует записать в конфигурационный файл /etc/profile для всех пользователей системы или ~/.bash_profile для конкретного пользователя. Чтение значений переменных из этих файлов происходит при загрузке системы или при авторизации пользователей.

Узнать значение конкретной переменной также можно несколькими способами:

echo $HOME

printenv HOME

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

PATH=/usr/local/sbin:/usr/sbin:/sbin:/usr/local/bin:/usr/bin:/bin:/usr/games:/usr/lib/java/bin:/usr/lib/qt/bin

Переменная может принимать ряд значений, разделенных двоеточием, каждое из которых является полным путем к каталогу, в котором должны храниться исполняемые или командные файлы. Суть данной переменной окружения такова, что она позволяет не указывать полный путь к исполняемому файлу при его запуске на исполнение. Командный интерпретатор считает первое введённое словосочетание в командной строке сначала своей встроенной командой, а затем, если введённое словосочетание не соответствует ни одной встроенной команде, исполняемым файлом (утилитой, программой пользователя и т.п.).

Если словосочетание не является встроенной командой интерпретатора, то он будет выбирать поочерёдно из переменной PATH каталог, «пристыковывать» к нему введённое пользователем словосочетание и осуществлять попытку запуска. Если после перебора всех каталогов из переменной пути данное словосочетание не будет найдено, то будет выдано сообщение о том, что «команда не найдена». Описанная переменная окружения имеет отличия у пользователя и суперпользователя.

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

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

Команда unset удаляет любые, указанные в качестве параметра, назначенные переменные, уничтожая и саму переменную, и её значение. Оболочка bash после выполнения этой команды вообще «забудет» о том, что такая переменная существовала. Удаление переменной действует только в текущем сеансе.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]