Команды для переменных среды в unix. Как установить и отключить переменные локальной, пользовательской и системной среды в Linux. Пользовательские переменные оболочки

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

Один из способов отслеживания оболочкой данной информации – это использование среды окружения. Среда – это область, содержащая определяющие свойства системы переменные, которую оболочка строит при каждом запуске сессии.

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

Как работает среда и ее переменные

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

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

Среда имеет вид строки, содержащей пары вида «ключ-значение». Несколько значений, как правило, разделяются символом двоеточия (:). Каждая пара, в целом, выглядит примерно так:

КЛЮЧ=значение1:значение2:...

Если же значение содержит пробелы, нужно использовать двойные кавычки:

КЛЮЧ="значение с пробелами"

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

Переменные среды – это переменные, которые были определены для текущей оболочки и наследуются всеми дочерними оболочками или процессами. Переменные среды используются для передачи информации процессам, запущенным из оболочки.

Переменные оболочки – это переменные, которые содержатся исключительно в оболочке, в которой они были установлены или определены. Они часто используются для отслеживания текущих данных (к примеру, текущего рабочего каталога).

Обычно такие переменные обозначаются с помощью заглавных букв. Это помогает пользователям различать переменные среды в других контекстах.

Вывод переменных оболочки и среды

Каждая сессия отслеживает свои переменные оболочки и среды. Вывести их можно несколькими способами.

Чтобы просмотреть список всех переменных среды, используйте команды env или printenv. По умолчанию они выведут точно такой же результат:

printenv
SHELL=/bin/bash
TERM=xterm
USER=demouser
LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:su=37;41:sg=30;43:ca:...
MAIL=/var/mail/demouser
PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
PWD=/home/demouser
LANG=en_US.UTF-8
SHLVL=1
HOME=/home/demouser
LOGNAME=demouser
LESSOPEN=| /usr/bin/lesspipe %s
LESSCLOSE=/usr/bin/lesspipe %s %s
_=/usr/bin/printenv

Это типичный пример выведенного командами printenv и env результата. Данные команды отличаются только несколькими индивидуальными функциями. К примеру, printenv может запрашивать значения отдельных переменных:

printenv SHELL
/bin/bash

Команда env позволяет изменять среду, в которой запущены программы, передавая набор определений переменных в команду, примерно так:

env VAR1="blahblah" command_to_run command_options

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

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

Но как же просмотреть переменные оболочки?

Для этого используется команда set. При вводе без дополнительных параметров set выводит список всех переменных оболочки, переменных среды, локальных переменных и функций оболочки:

set
BASH=/bin/bash
BASHOPTS=checkwinsize:cmdhist:expand_aliases:extglob:extquote:force_fignore:histappend:interactive_comments:login_shell:progcomp:promptvars:sourcepath
BASH_ALIASES=()
BASH_ARGC=()
BASH_ARGV=()
BASH_CMDS=()
. . .

Как правило, этот список достаточно длинный. Чтобы вывести его в более удобном формате, откройте его с помощью программы-пейджера:

Этот список содержит огромное количество дополнительной информации, которая в данный момент не нужна (к примеру, некоторые функции bash).

Чтобы «почистить» выведенный результат, нужно запустить команду set в режиме POSIX, который пропускает функции оболочки. Это нужно выполнить в субоболочке, чтобы не изменить текущую среду:

(set -o posix; set)

Данное действие выведет все переменные среды и оболочки.

Можно также сравнить этот результат с результатом команд env/printenv и попробовать вывести список только переменных оболочки, но такой список не будет идеальным, поскольку данные команды выводят информацию по-разному:

comm -23 <(set -o posix; set | sort) <(env | sort)

Скорее всего, список будет содержать несколько переменных среды, поскольку команда set выводит значения в кавычках, а команды printenv и env — нет.

Тем не менее, это отличный способ просмотреть переменные среды и оболочки, установленные в данной сессии.

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

Основные переменные среды и оболочки

Некоторые особенно полезные переменные среды и оболочки используются очень часто.

Ниже приведен список основных переменных среды:

  • SHELL : описывает оболочку, которая интерпретирует введенные команды. В большинстве случаев по умолчанию установлена bash, но это значение можно изменить в случае необходимости.
  • TERM : указывает вид терминала, эмулируемого при запуске оболочки. В зависимости от операционных требований можно эмулировать разные аппаратные терминалы. Как правило, об этом не нужно беспокоиться.
  • USER : текущий пользователь.
  • PWD : текущий рабочий каталог.
  • OLDPWD : предыдущий рабочий каталог. Оболочка хранит его на случай запуска команды cd -.
  • LS_ COLORS : определяет цветовые коды, которые используются для цветного вывода результата команды ls. Такой вывод помогает пользователю быстрее прочесть результат команды (например, быстро различить типы файлов).
  • MAIL : путь к текущему почтовому ящику пользователя.
  • PATH : список каталогов, к которым обращается система при выполнении команд. Когда пользователь запускает команду, система проверяет эти каталоги в указанном порядке в поисках исполняемого файла.
  • LANG : текущие настройки языка и локализации, в том числе кодировка символов.
  • HOME : домашний каталог текущего пользователя.
  • _ : последняя выполненная команда.

Ознакомившись со списком переменных среды, изучите список переменных оболочки:

  • BASHOPTS : список опций, использованных при выполнении bash. Это можно применять для того, чтоб проверить, работает ли среда должным образом.
  • BASH_ VERSION : запущенная версия bash в удобочитаемой форме.
  • BASH_ VERSINFO : версия bash в машиночитаемом формате.
  • COLUMNS : определяет ширину вывода в столбцах.
  • DIRSTACK : стек каталогов, доступных командам pushd и popd.
  • HISTFILESIZE : максимальное количество строк, содержащееся в файле истории команд.
  • HISTSIZE : Количество команд, которые необходимо запоминать в списке истории.
  • HOSTNAME : текущее имя хоста.
  • IFS: Внутренний разделитель полей ввода в командной строке. По умолчанию установлен пробел.
  • PS1 : определяет строку первичного приглашения – вид командной строки при запуске сессии оболочки. Переменная PS2 устанавливает строку вторичного приглашения, если команда занимает несколько строк.
  • SHELLOPTS : параметры оболочки, которые можно установить при помощи set.
  • UID : уникальный идентификатор текущего пользователя.

Установка переменных оболочки и среды

Ниже приведены несколько примеров, чтобы продемонстрировать разницу между переменными оболочки и среды и объяснить синтаксис установки этих переменных.

Создание переменных оболочки

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

TEST_VAR="Hello World!"

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

Итак, полученная переменная оболочки действительна в текущей сессии, но не передается ее дочерним процессам.

Чтобы в этом убедиться, используйте команду grep на результат команды set:

set | grep TEST_VAR
TEST_VAR="Hello World!"

Убедиться, что данная переменная не является переменной среды, также можно, запустив grep на результат команды printenv:

printenv | grep TEST_VAR

Данное действие не выведет никакого результата.

Это можно использовать, чтобы открыть значение любой переменной оболочки или среды.

echo $TEST_VAR
Hello World!

Как можно видеть, чтобы обратиться к значению переменной, нужно использовать символ $.

Опять же, полученная переменная не должна быть передана какому-либо дочернему процессу. Чтобы это протестировать, внутри текущей оболочки разверните новую bash-оболочку:

bash
echo $TEST_VAR

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

Чтобы вернуться в исходную оболочку, введите exit:

Создание переменных среды

Теперь попробуйте превратить переменную оболочки в переменную среды. Это делается путем экспорта переменной. Команда, выполняющая экспорт, имеет соответствующее название.

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

printenv | grep TEST_VAR
TEST_VAR=Hello World!

Теперь эта переменная выведена в данном списке. Можно также снова развернуть дочернюю оболочку:

bash
echo $TEST_VAR
Hello World!

Отлично! Дочерняя оболочка получила переменную исходной оболочки. Попробуйте экспортировать еще одну переменную, прежде чем покинуть дочернюю оболочку.

export NEW_VAR="Testing export"

Проверьте, экспортировалась ли переменная:

printenv | grep NEW_VAR
NEW_VAR=Testing export

Теперь вернитесь в исходную оболочку:

Проверьте, можно ли открыть данную переменную:

Результат не возвращается

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

Переменная NEW_VAR была установлена как переменная среды дочерней оболочки. Эта переменная действительна для данной оболочки и ее дочерних оболочек и процессов. После возвращения пользователя в исходную оболочку данная среда была разрушена.

Перемещение и сброс переменных

Переменная TEST_VAR все еще является переменной среды. Чтобы снова сделать ее переменной оболочки, наберите:

export -n TEST_VAR

Теперь эта переменная больше не является переменной среды:

printenv | grep TEST_VAR

Это снова переменная оболочки:

set | grep TEST_VAR
TEST_VAR="Hello World!"

Чтобы полностью сбросить переменную, будь то переменная среды или оболочки, используйте команду unset:

Убедитесь, что такой переменной больше нет:

Результат не был выведен, поскольку переменная была сброшена.

Автоматическая установка переменных среды

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

Это немного сложнее, чем кажется сначала, поскольку bash-оболочка читает множество конфигурационных файлов.

Типы сессий оболочки

Оболочка bash читает разные конфигурационные файлы в зависимости от того, как сессия была запущена. Первые два типа сессий, определяющие оболочку, — это стартовая и дочерняя.

Стартовая, или начальная оболочка (login shell) — это сессия оболочки, которая открывается после авторизации пользователя. Если пользователь входит в терминал или проходит авторизацию при помощи SSH, будет открыта стартовая оболочка.

Если новая сессия запускается из авторизованной (стартовой) сессии (как ранее в примерах запускалась новая bash-оболочка), эта сессия будет дочерней (non- login shell). Чтобы открыть эту сессию, не нужно проходить процедуру авторизации.

Также сессии оболочки бывают интерактивными и неинтерактивными.

Интерактивная сессия оболочки (interactive shell) – это сессия, привязанная к терминалу. Неинтерактивная сессия оболочки (non-interactive shell) – это сессия, не привязанная к терминалу.

Итак, сессии оболочки классифицируются по таким аспектам: стартовая-дочерняя, интерактивная-неинтерактивная.

Обычная сессия, открытая с помощью SSH, как правило, является интерактивной стартовой сессией. Скрипт, запущенный через командную строку, обычно работает в неинтерактивной дочерней сессии. Терминальная сессия – это различные комбинации этих двух свойств.

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

Итак, сначала стартовая сессия получает конфигурации из файла /etc/profile. Затем она ищет конфигурационный файл стартовой оболочки в домашнем каталоге пользователя, чтобы получить определенные пользователем конфигурации.

Такая сессия читает файлы ~/.bash_profile, ~/.bash_login и ~/.profile и не читает остальных файлов.

Дочерняя сессия, в свою очередь, читает /etc/baash.bashrc, а затем пользовательский файл ~/.bash.rc для развертывания среды.

Неинтерактивные оболочки читают переменную среды BASH_ENV и указанный файл, чтобы создать новую среду.

Как задать переменные среды

Как видите, конфигурации разбросаны по разным файлам.

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

К счастью, большинство дистрибутивов Linux указывает конфигурационный файл дочерней оболочки источником конфигураций стартовой оболочки. Это значит, что определить переменные среды обеих сессий можно в конфигурационных файлах дочерней оболочки.

Как правило, для обеих оболочек используются переменные среды, задаваемые пользователем. Это значит, что задать эти переменные можно в файле ~/.bashrc.

Откройте данный файл:

Скорее всего, он уже содержит немного данных. Большинство заданных здесь значений – это параметры bash, не имеющие отношения к переменным среды. Переменные в данном файле задаются точно так же, как и в командной строке:

export VARNAME=value

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

source ~/.bashrc

Чтобы задать общесистемные переменные, внесите их в /etc/profile, /etc/bash.bashrc или /etc/environment.

Итоги

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

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

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

Tags: ,

Оригинал: Linux Fundamentals
Автор: Paul Cobbaut
Дата публикации: 16 октября 2014 г.
Перевод: А.Панин
Дата перевода: 13 декабря 2014 г.

Глава 12. Переменные командной оболочки

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

Символ доллара ($)

Еще одним важным интерпретируемым командной оболочкой символом является символ доллара $ . Командная оболочка будет искать переменную окружения с именем, соответствующим размещенной после символа доллара строке, и заменять данный символ и имя переменной на значение этой переменной (или ни на что в том случае, если переменной не существует).

Ниже приведено несколько примеров использования переменных $HOSTNAME, $USER, $UID, $SHELL и $HOME. $ echo Это командная оболочка $SHELL Это командная оболочка /bin/bash $ echo Данная командная оболочка $SHELL используется на компьютере $HOSTNAME Данная командная оболочка /bin/bash используется на компьютере RHELv4u3.localdomain $ echo Идентификатор пользователя $USER равен $UID Идентификатор пользователя paul равен 500 $ echo Моей домашней директорией является директория $HOME Моей домашней директорией является директория /home/paul

Зависимость от регистра

В данном примере показано, что имена переменных командной оболочки зависят от регистра! $ echo Привет $USER Привет paul $ echo Привет $user Привет

Создание переменных

В данном примере осуществляется создание переменной $MyVar с последующей установкой ее значения. После этого в примере используется команда echo для проверки значения созданной переменной. $ MyVar=555 $ echo $MyVar 555 $

Кавычки

Обратите внимание на то, что двойные кавычки также позволяют осуществлять раскрытие переменных в строке команды, в то время, как одинарные кавычки позволяют предотвратить такое раскрытие. $ MyVar=555 $ echo $MyVar 555 $ echo "$MyVar" 555 $ echo "$MyVar" $MyVar

Командная оболочка bash будет заменять переменные на их значения в строках, помещенных в двойные кавычки, но не будет осуществлять такую замену в строках, помещенных в одинарные кавычки. paul@laika:~$ city=Burtonville paul@laika:~$ echo "Сейчас мы находимся в городе $city." Сейчас мы находимся в городе Burtonville. paul@laika:~$ echo " Сейчас мы находимся в городе $city." Сейчас мы находимся в городе $city.

Команда set

Вы можете использовать команду set для вывода списка переменных окружения. В системах Ubuntu и Debian команда set также выведет список функций командной оболочки после списка переменных командной оболочки. Поэтому для ознакомления со всеми элементами списка переменных окружения при работе с данными системами рекомендуется использовать команду set | more .

Команда unset

Следует использовать команду unset для удаления переменной из вашего окружения командной оболочки. $ MyVar=8472 $ echo $MyVar 8472 $ unset MyVar $ echo $MyVar $

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

Переменная окружения $PS1 устанавливает формат приветствия вашей командной оболочки. При вводе строки форматирования вы можете использовать обратный слэш для экранирования таких специальных символов, как символ \u , предназначенный для вывода имени пользователя, или \w , предназначенный для вывода имени рабочей директории. На странице руководства командной оболочки bash представлен полный список специальных символов.

В примере ниже мы несколько раз изменяем значение переменной окружения $PS1 . paul@deb503:~$ PS1=приглашение приглашение приглашениеPS1="приглашение " приглашение приглашение PS1="> " > > PS1="\u@\h$ " paul@deb503$ paul@deb503$ PS1="\u@\h:\W$" paul@deb503:~$

Для того, чтобы избежать неисправимых ошибок, вы можете использовать зеленый цвет для приглашений командной оболочки, выводимых обычным пользователям, и красный цвет для приглашений командной оболочки, выводимых пользователю root. Добавьте следующие строки в ваш файл.bashrc для использования зеленого цвета в приглашениях, выводимых обычным пользователям. # цветное приглашение командной оболочки, созданное paul RED="\[\033" WHITE="\[\033" GREEN="\[\033" BLUE="\[\033" export PS1="${debian_chroot:+($debian_chroot)}$GREEN\u$WHITE@$BLUE\h$WHITE\w\$ "

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

Переменная окружения $PATH устанавливает директории файловой системы, в которых командная оболочка ищет бинарные файлы, необходимые для исполнения команд (за исключением тех случаев, когда команда является встроенной или представлена псевдонимом команды). Данная переменная содержит список путей к директориям с символами двоеточия в качестве разделителей. [$ echo $PATH /usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:

Командная оболочка не будет осуществлять поиск бинарных файлов, которые могут быть исполнены, в текущей директории. (Функция поиска исполняемых файлов в текущей директории являлась простейшим механизмом несанкционированного доступа к данным, хранящимся на компьютерах под управлением PC-DOS). В том случае, если вы хотите, чтобы командная оболочка осуществляла поиск исполняемых файлов в текущей директории, вам следует добавить символ. в конец строки, являющейся значением переменной $PATH вашей командной оболочки. $ PATH=$PATH:. $ echo $PATH /usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:. $

Значение переменной $PATH вашей командной оболочки может отличаться в случае использования команды su вместо команды su - , так как последняя команда позволяет дополнительно использовать значения переменных окружения целевого пользователя. К примеру, в представленный значением переменной $PATH список директорий пользователя root обычно добавляются директории /sbin . $ su Password: # echo $PATH /usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin # exit $ su - Password: # echo $PATH /usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin: #

Команда env

Команда env в случае использования без параметров выведет список экспортированных переменных окружения. Отличие данной команды от команды set с параметрами заключается в том, что команда set выводит список всех переменных окружения, включая те переменные, которые не экспортируются в дочерние командные оболочки.

Кроме того, команда env может также использоваться для запуска "чистой" командной оболочки (командной оболочки без наследования какого-либо окружения). Команда env -i позволяет очистить окружение дочерней командной оболочки.

При рассмотрении данного примера следует обратить внимание на то, что командная оболочка bash установит значение переменной окружения $SHELL при запуске. $ bash -c "echo $SHELL $HOME $USER" /bin/bash /home/paul paul $ env -i bash -c "echo $SHELL $HOME $USER" /bin/bash $

Вы можете использовать команду env для установки значения переменной $LANG или любой другой переменной окружения одного экземпляра командной оболочки bash в рамках одной команды. В примере ниже данная возможность используется для демонстрации влияния значения переменной $LANG на работу механизма поиска файлов по шаблонам (для получения дополнительной информации о данном механизме следует обратиться к главе, посвященной поиску файлов по шаблонам). $ env LANG=C bash -c "ls File" Filea Fileb $ env LANG=en_US.UTF-8 bash -c "ls File" Filea FileA Fileb FileB $

Команда export

Вы можете экспортировать переменные командной оболочки в другие командные оболочки с помощью команды export . В примере ниже с помощью данной команды осуществляется экспорт переменной окружения в дочерние командные оболочки. $ var3=три $ var4=четыре $ export var4 $ echo $var3 $var4 три четыре $ bash $ echo $var3 $var4 четыре

При этом с помощью данной команды переменная не экспортируется в родительскую командную оболочку (ниже приведено продолжение предыдущего примера). $ export var5=пять $ echo $var3 $var4 $var5 четыре пять $ exit exit $ echo $var3 $var4 $var5 три четыре $

Разграничения переменных

До текущего момента мы сталкивались с тем, что командная оболочка bash интерпретирует переменную начиная с символа доллара, продолжая интерпретацию до появления первого не алфавитно-цифрового символа, который не является символом подчеркивания. В некоторых ситуациях такое поведение может оказаться проблемой. Для решения этой проблемы могут использоваться фигурные скобки таким образом, как показано в примере ниже. $ prefix=Super $ echo Привет $prefixman и $prefixgirl Привет и $ echo Привет ${prefix}man и ${prefix}girl Привет Superman и Supergirl $

Несвязанные переменные

В примере ниже представлена попытка вывода значения переменной $MyVar , но она не является успешной ввиду того, что переменной не существует. По умолчанию командная оболочка не будет выводить ничего в том случае, если переменная не связана (ее не существует). $ echo $MyVar $

Однако, существует параметр командной оболочки nounset , который вы можете использовать для генерации ошибки в том случае, если используемой переменной не существует. paul@laika:~$ set -u paul@laika:~$ echo $Myvar bash: Myvar: unbound variable paul@laika:~$ set +u paul@laika:~$ echo $Myvar paul@laika:~$

В командной оболочке bash команда set -u идентична команде set -o nounset и, по аналогии, команда set +u идентична команде set +o nounset .

Практическое задание: переменные командной оболочки

2. Создайте переменную answer , значение которой равно 42.

3. Скопируйте значение переменной $LANG в значение переменной $MyLANG.

4. Выведите список используемых в данное время переменных командной оболочки.

5. Выведите список всех экспортируемых переменных командной оболочки.

6. Присутствует ли информация о вашей переменной в выводе команд env и set ?

7. Уничтожьте вашу переменную answer .

8. Создайте две переменные и экспортируйте одну из них.

9. Выведите значение экспортированной переменной в дочерней интерактивной командной оболочке.

10. Создайте переменную и присвойте ей значение "Dumb", после чего аналогичным образом создайте другую переменную с значением "do". Используйте команду echo и две созданные переменные для вывода слова "Dumbledore".

11. Найдите список экранированных с помощью обратного слэша управляющих символов на странице руководства командной оболочки bash. Добавьте управляющий символ в значение переменной PS1 для вывода времени в приветствии командной оболочки.

Корректная процедура выполнения практического задания: переменные командной оболочки

1. Используйте команду echo для вывода строки "Привет", после которой должно следовать ваше имя. (Используйте переменную командной оболочки bash!)

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

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

$HOME
Переменная содержит путь к домашнему каталогу текущего пользователя. $USER
Имя текущего пользователя $PATH
Список каталогов для поиска оболочкой исполняемых программ. $PWD
Путь к текущему рабочему каталогу (либо pwd ). Пример: dir_path=$(pwd) . $SHELL
Интерпретатор по умолчанию $RANDOM
Генерирует рандомное число 0..32767 при каждом доступе к переменной. $SECONDS
Время в сек. с момента запуска командной оболочки. $? Результат выполнения предыдущей команды. $HOSTNAME
Имя компьютера $HISTFILE
Путь к файлу истории интерпретатора $IFS
Список символов-разделителей команд, параметров, элементов массива (по умолчанию: пробел, таб, новая строка) $PS1
Шаблон строки приглашения интерпретатора.

Временная установка переменной окружения

Установка переменной окружения на период сессии:

# Для нового процесса env имя_переменной=значение [команда] # Для текущей оболочки и всех ее подпроцессов export имя_переменной=значение [команда]

Значение переменной сохраняется до перезагрузки системы.

Установка постоянного значения

Переменные окружения на уровне системы устанавливаются через файл /etc/environment:

ENVIRONMENT="dev"

Установка переменной окружения для конкретного пользователя через файл ~/ .bashrc или ~/.bash_profile:

PATH="${PATH}:/home/user/bin:"

Внимание!

Файл ~/.bash_profile будет выполнен при запуске интерпретатора с ключом -l. При локальном входе этот файл не читается!

Также нужно помнить, что изменения вступят в силу только после перезагрузки сеанса!

Просмотр значения переменной окружения

Для просмотра значения переменной окружения есть команда printenv:

Printenv <имя_переменной>

#shell, #bash, #environment

Переменные среды — это специальные переменные, которые определены в оболочке и необходимы программам или скриптам во время выполнения. Они могут быть определены системой или пользователем. Системно-определяемые переменные — это те, которые установлены системой.

Например команда PWD — очень распространенная системная переменная, которая используется для хранения текущего рабочего каталога. Пользовательские переменные обычно устанавливаются либо временно для текущей оболочки, либо постоянно. Вся концепция настройки и изменения параметров среды вращается вокруг некоторого набора файлов и нескольких команд и разных оболочек.

Если говорить более точно, то переменная среды может быть трех типов:

1. Локальная переменная среды

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

2. Пользовательская переменная среды

Это переменные, которые определены для конкретного пользователя и загружаются каждый раз, когда пользователь входит в систему с использованием сеанса локального терминала или если этот пользователь регистрируется с помощью сеанса удаленного входа в систему. Эти переменные обычно устанавливаются и загружаются из следующих файлов конфигурации: .bashrc , .bash_profile , .bash_login , .profile , которые присутствуют в домашнем каталоге пользователя.

3. Системные переменные среды

Это переменные среды, доступные в масштабе всей системы, то есть для всех пользователей, присутствующих в этой системе. Эти переменные присутствуют в общесистемных файлах конфигурации, представленных в следующих каталогах и файлах: /etc/environment , /etc/profile, /etc/profile.d/, /etc/bash.bashrc . Эти переменные загружаются каждый раз, когда система включается и в ней регистрируются пользователи, локально или удаленно.

Общие сведения об общих и общесистемных файлах конфигурации

Здесь мы кратко опишем различные файлы конфигурации, перечисленные выше, которые содержат переменные среды, как системные, так и пользовательские.

.bashrc

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

.bash_profile

Переменные среды, перечисленные в этом файле, вызывается каждый раз, когда пользователь регистрируется удаленно, то есть с помощью команды ssh . Если этого файла нет, система ищет файлы .bash_login или .profile .

/etc/environment

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

/etc/bash.bashrc

Системный файл bashrc . Этот файл загружается один раз для каждого пользователя, каждый раз, когда пользователь открывает сеанс локального терминала. Переменные среды, созданные в этом файле, доступны для всех пользователей, но только через сеанс локального терминала. Когда любой пользователь на этом компьютере будет удален через сеанс удаленного входа, эти переменные не будут видны.

/etc/profile

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

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

$ source

Установка или удаление локальных или сеансовых переменных среды в Linux

Локальные переменные среды могут быть созданы с использованием следующих команд:

$ var=value OR $ export var=value

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

1. Использование env

По умолчанию команда «env » перечисляет все текущие переменные среды. Но, если используется с ключом «-i », то тогда он временно очищает все переменные среды и позволяет пользователю выполнять команду в текущем сеансе в отсутствие всех переменных среды.

$ env –i … command args…

Здесь var = value соответствует любой локальной переменной окружения, которую вы хотите использовать только с этой командой.

$ env -i bash

Запускаем оболочку bash, в которой временно будут очищены все переменные среды. Но при выходе из оболочки все переменные будут восстановлены.

2. Использование отмены

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

$ unset

Где, var-name — это имя локальной переменной, которую вы хотите удалить или очистить.

3. Задайте имя переменной с помощью пустого значения

Другой менее популярный способ — присвоить имени переменной, которую вы хотите очистить, пустое значение, т.е. VAR=(после равняется ничего нет — нажать enter). Это позволит очистить значение локальной переменной для текущего сеанса, для которого она активна.

ПРИМЕЧАНИЕ . ВЫ МОЖЕТЕ ДЕЙСТВИТЕЛЬНО ИЗМЕНЯТЬ ПЕРЕМЕННЫЕ СИСТЕМЫ, НО ИЗМЕНЕНИЯ БУДУТ ОТРАЖАТЬСЯ ТОЛЬКО В ТЕКУЩЕЙ СЕССИИ И НЕ БУДУТ ПОСТОЯННЫМИ.

Узнайте, как создавать, пользовательские и системные переменные среды в Linux

В этом разделе мы рассмотрим, как установить или отключить локальные, пользовательские и системные переменные окружения в Linux с приведенными ниже примерами:

1. Установка и удаление локальных переменных в Linux.

а) Здесь мы создаем локальную переменную VAR1 и устанавливаем ее на любое значение. Затем мы используем unset и в конце эту переменную удаляем.

$ VAR1="TecMint is best Site for Linux Articles" $ echo $VAR1 $ unset VAR1 $ echo $VAR1

б) Другой способ создания локальной переменной — использовать команду export . Созданная локальная переменная будет доступна для текущего сеанса. Чтобы отключить переменную, просто установите пустое значение переменной.

$ export VAR="TecMint is best Site for Linux Articles" $ echo $VAR $ VAR= $ echo $VAR

в) Здесь мы создали локальную переменную VAR2 и установили ее значение. Затем, чтобы запустить команду, временно очистив все локальные и другие переменные среды, мы выполнили команду «env -i ». Эта команда здесь запустила оболочку bash , очистив все остальные переменные среды. После ввода «exit » в вызываемой оболочке bash все переменные будут восстановлены.

$ VAR2="TecMint is best Site for Linux Articles" $ echo $VAR2 $ env -i bash $ echo $VAR2

2. Установка и удаление пользовательских переменных окружения в Linux.

a) Измените файл .bashrc в своем домашнем каталоге, чтобы экспортировать или установить переменную среды, которую нужно добавить. После этого запустите файл, чтобы изменения вступили в силу. Тогда вы увидите переменную («CD» в моем случае), которая вступила в силу. Эта переменная будет доступна каждый раз, когда вы открываете новый терминал для этого пользователя, но не для сеансов удаленного входа.

$ vi .bashrc

.bashrc .

Export CD="This is TecMint Home"

Теперь запустите следующую команду, чтобы новые изменения вступили в силу и протестировать переменную.

$ source .bashrc $ echo $CD

Чтобы удалить эту переменную, просто удалите строку в файле.bashrc и перезайдите в оболочку.

б) Чтобы добавить переменную, которая будет доступна для сеансов удаленного входа, измените файл .bash_profile .

$ vi .bash_profile

Добавьте следующую строку в файл .bash_profile .

Export VAR2="This is TecMint Home"

Переменная будет доступна, когда выполните удаленный используя ssh вход для этого пользователя, но не во время открытия нового локального терминала.

$ source .bash_profile $ echo $ VAR2

Здесь VAR2 изначально не доступен, но при выполнении удаленного входа используя ssh пользователю на localhost, переменная становится доступной.

$ ssh $ echo $ VAR2

Чтобы удалить эту переменную, просто удалите строку в файле .bash_profile , которую вы добавили, и перечитайте файл.

ПРИМЕЧАНИЕ . Эти переменные будут доступны при каждом входе в систему для текущего пользователя, но не для других пользователей.

3. Установка и удаление системных переменных окружения в Linux.

а) Чтобы добавить системную переменную без входа (то есть та, которая доступна для всех пользователей, когда какой-либо из них открывает новый терминал, но не когда существует удаленный доступ любому пользователю к машине) добавьте эту переменную в файл /etc/bash.bashrc .

Export VAR="This is system-wide variable"

После этого перечитайте файл.

$ source /etc/bash.bashrc

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

$ echo $VAR $ sudo su $ echo $VAR $ su - $ echo $VAR

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

б) Если вы хотите, чтобы какая-либо переменная среды была доступна, когда какой-либо из пользователей на вашем компьютере выполнил удаленный вход, но не открывал какой-либо новый терминал на локальном компьютере, вам необходимо отредактировать файл — /etc/profile .

Export VAR1="This is system-wide variable for only remote sessions"

После добавления переменной просто перечитайте файл. Тогда переменная будет доступна.

$ source / etc / profile $ echo $ VAR1

Чтобы удалить эту переменную, удалите строку из файла /etc/profile и перечитайте ее.

в) Однако, если вы хотите добавить переменную в любую среду, в которой вы хотите быть доступны по всей системе, как для сеансов удаленного входа, так и для локальных сеансов для всех пользователей, просто экспортируйте переменную в /etc/environment.

Export VAR12="I am available everywhere"

После этого только перечитайте файл и изменения вступят в силу.

$ source /etc/environment $ echo $VAR12 $ sudo su $ echo $VAR12 $ exit $ ssh localhost $ echo $VAR12

Здесь, мы видим, что переменная среды доступна для обычного пользователя, пользователя root, а также для удаленного сеанса входа.

Чтобы очистить эту переменную, просто удалите запись в файле /etc/environment и перечитайте файл.

ПРИМЕЧАНИЕ . Изменения вступают в силу при перечитывании файла /etc/environment . Но, если нет, вам может понадобиться выйти из системы и снова войти в систему.

Вопросы по статье задавайте в комментариях ниже.

Спасибо за уделенное время на прочтение статьи!

Если возникли вопросы, задавайте их в комментариях.

Подписывайтесь на обновления нашего блога и оставайтесь в курсе новостей мира инфокоммуникаций!

Чтобы знать больше и выделяться знаниями среди толпы IT-шников, записывайтесь на курсы Cisco от Академии Cisco, курсы Linux от Linux Professional Institute

  • Спросим у вас об удобном времени для практик и подстроимся: понимаем, что времени учиться мало.
  • Если хотите индивидуальный график - обсудим и осуществим.
  • Выставим четкие дедлайны для самоорганизации. Личный куратор будет на связи, чтобы ответить на вопросы, проконсультировать и мотивировать придерживаться сроков сдачи экзаменов.
  • А еще поможем Вам:

    2.2. Переменные среды

    Операционная система поддерживает специальный вид ресурсов, называемых переменные среды (environment variables ). Эти переменные представляют собой пару ИМЯ - ЗНАЧЕНИЕ . Имя может начинаться с буквы и состоять из букв, цифр и символов подчеркивания.

    Для подстановки значения переменной в командную строку перед именем переменной ставится знак $:

    $ echo $USER guest

    В случае, если переменная не установлена, возвращается пустая строка.

    Для установки значения переменной используется оператор присваивания (в случае Bourne-подобных оболочек):

    $ TEST=test

    или встроенный оператор set (в случае С-подобных):

    $ set TEST=test

    Команда set без аргументов выводит список значений всех переменных, установленных в среде:

    $ set COLUMNS=197 CVS_RSH=ssh DIRSTACK=() EUID=1000 GROUPS=() G_BROKEN_FILENAMES=1 HISTFILE=/home/guest/.bash_history HISTFILESIZE=1000 HISTSIZE=1000 HOME=/home/guest HOSTNAME=myhost HOSTTYPE=i686 IFS=$" \t\n" INPUTRC=/etc/inputrc KDEDIR=/usr KDEDIRS=/home/guest/.local/ KDE_IS_PRELINKED=1 KDE_NO_IPV6=1 LANG=ru_RU.UTF-8 LESSOPEN="|/usr/bin/lesspipe.sh %s" LINES=65 LOGNAME=guest ....

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

    $ TEST=test1 sh -c "echo $TEST" test1

    Оценить содержимое набора переменных для сессии можно, вызвав встроенную команду интерпретатора env , в случае Bourne-подобных интерпретаторов (sh, ksh, bash, zsh, pdksh...), и printenv в случае использования интерпретаторов клона C-Shell (csh, tcsh...):

    $ env HOSTNAME=myhost TERM=xterm SHELL=/bin/bash HISTSIZE=1000 KDE_NO_IPV6=1 SSH_CLIENT=172.16.0.9 50487 22 QTDIR=/usr/lib/qt-3.3 QTINC=/usr/lib/qt-3.3/include SSH_TTY=/dev/pts/6 USER=guest MOZILLA_CERTIFICATE_FOLDER=/home/guest/.evolution/ KDEDIR=/usr MAIL=/var/spool/mail/guest PATH=/usr/games:/usr/local/bin:/bin:/usr/bin:/home/guest/bin INPUTRC=/etc/inputrc PWD=/home/guest KDE_IS_PRELINKED=1 LANG=ru_RU.UTF-8 KDEDIRS=/home/guest/.local/ SSH_ASKPASS=/usr/libexec/openssh/gnome-ssh-askpass SHLVL=1 HOME=/home/guest LOGNAME=guest QTLIB=/usr/lib/qt-3.3/lib CVS_RSH=ssh SSH_CONNECTION=172.16.0.9 50487 172.16.2.9 22 LESSOPEN=|/usr/bin/lesspipe.sh %s G_BROKEN_FILENAMES=1 _=/bin/env

    Наборы команд Shell могут компоноваться в командные файлы, называемые скриптами, где в первой строке в специального вида комментарии указывается командный интерпретатор для исполнения этого набора. Например, создадим в текстовом редакторе файл с названием test , следующего содержания:

    #!/bin/sh echo Переменная TEST: echo $TEST

    Данная программа будет выводить на стандартный вывод текстовое сообщение «Переменная TEST: » и значение переменной TEST, если оно задано. Запустить его из командной строки можно, передав его в качестве параметра командному интерпретатору:

    $ sh test Переменная TEST:

    Придать переменной глобальный характер можно при помощи оператора export (Bourne) или setenv (C-SHell):

    $ export TEST=test1 $ sh test Переменная TEST: test1

    Задать локальные значения переменных для выполнения данной программы можно, предварив ими вызов команд:

    $ TEST=test2 sh test Переменная TEST: test2

    Удаление переменных среды производится при помощи оператора unset.

    Устройства