| Окружение |
|
Окружение — это набор переменных и их значений, с помощью которых можно передавать в программу какие-нибудь данные общего назначения. В этой главе описываются механизмы, позволяющие вашим программам читать и модифицировать окружение. Понятие окруженияЧтобы понять, что такое окружение, нужно немного забежать вперед и разобраться в базовых терминах многозадачности Linux. В основе многозадачности лежит понятие "процесс". Процесс — это нечто, совершающее в системе какие-либо действия. Обычно это запущенная работающая программа. Один процесс может инициировать (породить) другой. В таком случае породивший процесс называют родителем или родительским процессом, а порожденный — потомком или дочерним процессом. Все процессы в системе — элементы одной иерархии, называемой деревом npoifeccoe. На вершине этой иерархии находится процесс ink. Это единственный процесс, не имеющий родителя. Каждый раз, когда вы запускаете в командной строке какую-нибудь программу, например Is, в системе рождается новый процесс, для которого оболочка является родителем. Если, например, программа запускается из меню KDE, то в системе рождается процесс с родителем kdeinit и т. д. Бытует мнение, что родителем процесса init является ядро Linux. He имеет смысла в очередной раз поднимать философский вопрос о курице и яйце. Для нас важно лишь то, что init всегда стоит на вершине иерархии процессов. Окружение (environment) — это набор специфичных для конкретного пользователя пар переменная=значение. Каждый процесс располагает и свободно распоряжается своей копией окружения, которую он получает от родителя. Таким образом, если процесс сначала модифицирует свое окружение, а потом породит новый процесс, то потомок получит копию уже измененного окружения. Чтобы посмотреть, что представляет собой окружение в действительности, введите следующую команду: $ env На экран будет выведено окружение программы env. Можете не сомневаться, это точная копия окружения вашей командной оболочки. В современных Linux-дистрибутивах окружение представлено десятками переменных, но широко используются только некоторые из них:
Следующий шаблон позволяет посмотреть значение конкретной переменной: $ echo $VARIABLE Здесь variable — это имя переменной. Вообще говоря, оболочка вместо записи $variable всегда подставляет значение соответствующей переменной окружения. Рассмотрим пример: $ touch $USER Вместо $user здесь подставляется значение переменной. Такая команда создаст пустой файл, присвоив ему имя текущего пользователя. Пользователь может модифицировать окружение командной оболочки. В разных оболочках это делается по-разному. Рассмотрим такую возможность на примере bash. Эта оболочка, помимо свойственного любому процессу окружения, поддерживает также свой собственный набор переменных, которые называют локальными переменными оболочки. Рассмотрим пример: $ MYVAR=Hello Первой командой создается и инициализируется локальная переменная оболочки myvar. Следующая команда выводит значение этой переменной. Третья команда ищет переменную myvar среди окружения программы env (точная копия окружения оболочки). Но поскольку myvar не является переменной окружения, то последняя команда ничего не выводит. Как видно из этого примера, локальные переменные "работают" только на уровне оболочки. Не являясь частью окружения, они не могут наследоваться дочерними процессами. Поэтому программа env не нашла переменную myvar. Но иногда требуется включить (экспортировать) локальную переменную в окружение. Для этого в оболочке bash есть внутренняя (не являющаяся отдельной программой) команда export: $ export MYVAR Команду export можно также использовать для инициализации и экспорта переменной в один прием: $ export MYVAR_NEW=Goodbye $ env | grep MYVAR_jNEW Важно понимать, что полученные переменные myvar и myvar_new существуют только в текущем окружении процесса оболочки и ее потомков. Очевидно, что после перезагрузки эти переменные "исчезнут", если их, например, не объявить в файле инициализации bash. Даже такая жизненно важная переменная как path не появляется в окружении оболочки сама собой: строка для ее инициализации обычно находится в файле /etc/profile. Исключить переменную из окружения оболочки позволяет команда export -n. При этом остается локальная переменная. Когда же надо удалить переменную отовсюду, вызывают команду unset: $ env | grep -i myvar Важно понимать, что export, export -n и unset — это не отдельные программы, а внутренние команды bash. Оболочки ksh (KornShell) и zsh (Z shell), например, не поддерживают опцию -п команды export. Оболочки семейства C-Shell (csh, tcsh) работают с окружением совсем другими командами setenv и unsetenv.
Related Articles
Set as favorite
Bookmark
Email This
Hits: 414 Комментарии (0)RSS feed CommentsНаписать комментарий |