- Environment variables (Русский)
- Contents
- Утилиты
- Установка переменных
- На системном уровне
- На уровне пользователя
- Графические приложения
- На уровне сеанса
- Примеры
- Программы по умолчанию
- Использование pam_env
- Руководство про переменные в среде Linux
- Глобальные переменные окружения
- Локальные переменные среды
- Установка переменных среды
- Настройка переменных локальной среды
- Настройка глобальных переменных окружения
- Удаление переменных среды
- Переменные среды Shell по умолчанию
- Переменные Bash Shell Bourne:
- Переменные среды Shell bash:
- Вывод
Environment variables (Русский)
Переменные окружения — именованные переменные, содержащие текстовую информацию, которую могут использовать запускаемые программы. Такие переменные могут содержать общие настройки системы, параметры графической или командной оболочки, данные о предпочтениях пользователя и многое другое. Значением такой переменной может быть, например, место размещения исполняемых файлов в системе, имя предпочитаемого текстового редактора или настройки системной локали. Новые в Linux пользователи часто находят такой способ хранения настроек неудобным. Однако, переменные окружения позволяют простым и надежным способом передавать настройки сразу для множества приложений.
Contents
Утилиты
Пакет coreutils содержит программы printenv и env . Чтобы отобразить список текущих переменных окружения, используйте printenv , которая отобразит имена и значения каждой переменной окружения:
Программа env может быть использована для запуска команд с указанием нового значения переменной окружения. В следующем примере будет запущен xterm, для которого переменная окружения EDITOR имеет значение vim . Такой вызов не затронет переменную окружения EDITOR в текущем сеансе терминала.
Встроенная в Bash команда set позволяет вам устанавливать значения переменных окружения в текущем сеансе терминала, а также отображать имена и значения переменных окружения текущего сеанса. Для получения дополнительной информации, смотрите документацию по команде set.
Чтобы увидеть переменные окружения конкретных процессов, откройте файл /proc/pid/environ , где pid — числовой идентификатор интересующего процесса. Записи в этом файле отделены друг от друга нулевым байтом ( \x0 ), который обычно не виден в терминале. Вы можете использовать например sed для отображения переменных окружения процесса в более читабельном формате, заменив нулевые байты на переносы строки: sed ‘s:\x0:\n:g’ /proc/$PID/environ
Установка переменных
На системном уровне
Большинство дистрибутивов Linux советуют изменять или добавлять переменные окружения в /etc/profile или других местах. Имейте в виду, что сразу множество файлов могут содержать переменные окружения и переопределять их, вроде /etc/locale.conf . По сути, любой скрипт может быть использован для этого, однако, по принятым в UNIX соглашениям, следует использовать для этого только определенные файлы.
Следующие файлы следует использовать для установки переменных окружения на уровне системы: /etc/profile , /etc/environment и настройки, специфичные для командных оболочек. Каждый из этих файлов имеет свои ограничения, поэтому следует внимательно выбирать тот, который подходит для ваших целей.
- /etc/environment используется модулем PAM-env. Он не привязан к командным оболочкам, поэтому скрипты или glob-выражения использовать здесь нельзя. Здесь можно указывать только пары имя=значение . Подробнее смотрите pam_env(8) и pam_env.conf(5) .
- /etc/profile устанавливает переменные только при логине в командные оболочки. Он может запускать любые скрипты в оболочках, совместимых с Bourne shell.
- Файлы настроек, специфичные для конкретных командных оболочек — глобальные файлы для вашей командной оболочки, инициализирует переменные и запускает скрипты. Например, Bash (Русский)#Файлы настроек или Zsh (Русский)#Файлы Запуска/Завершения.
Ниже приведен пример скрипта, который позволяет добавлять каталог
/bin пользователя в PATH . Чтобы это сделать, просто поместите код в один из системных файлов инициализации окружения ( /etc/profile или /etc/bash.bashrc ):
На уровне пользователя
Вам не всегда нужно будет устанавливать переменные окружения на уровне системы. Например, вы можете добавить ваш каталог /home/пользователь/bin в PATH , однако, не хотите, чтобы это затрагивало других пользователей системы. Переменные окружения пользователя можно устанавливать во многих других файлах:
/.pam_environment пользовательский аналог файла /etc/security/pam_env.conf , который используется модулем PAM-env. Смотрите подробнее в pam_env(8) и pam_env.conf(5) .
- systemd может загружать переменные окружения из
Например, чтобы добавить каталог в PATH , поместите следующее в
Чтобы увидеть изменения перезайдите в командную оболочку, либо используйте команду source: $ source
/.bashrc . Это означает, что, например, активируемые через dbus программы вроде Gnome Files не будут использовать их по умолчанию. Смотрите systemd (Русский)/User (Русский)#Переменные окружения.
Чтение
/.pam_environment объявлено устаревшим, и эта возможность будет удалена в будущем.
Графические приложения
Чтобы установить переменные окружения для графических приложений, вы можете поместить ваши переменные в xinitrc или в xprofile если используется экранный менеджер, например:
The factual accuracy of this article or section is disputed.
/.config/environment.d/ в Wayland-сеансе является поведением, специфичным для GDM. (Discuss in Talk:Environment variables (Русский))
Приложения, работающие в Wayland, могут использовать systemd user environment variables, так как Wayland не использует Xorg-специфичные файлы:
Чтобы установить переменные окружения только для определённого приложения вместо целого сеанса, измените .desktop файл этого приложение. Смотрите Desktop entries (Русский)#Изменение переменных среды.
На уровне сеанса
Иногда разумно установить переменную окружения только для текущего сеанса. Для этого вы можете создать в своем каталоге скрипт с нужными переменными, который можно будет запустить в любое время с помощью команды source, либо вводить команды для установки переменных окружения самостоятельно, используя команду export, например:
Примеры
В этом разделе описываются типовые переменные окружения, используемые в Linux.
- DE означает имя окружения рабочего стола (Desktop Environment). xdg-open использует это значение для выбора наиболее удобного приложения для открытия файлов, которое предоставляет окружение. Для использования этой возможности может потребоваться установить некоторые пакеты. Для GNOME необходимо установить libgnomeAUR ; в Xfce — exo . Типичные значения переменной окружения: gnome , kde , xfce , lxde и mate .
Переменная окружения DE должна быть экспортирована перед запуском оконного менеджера, например: Это позволит xdg-open использовать более удобный exo-open, так как он будет полагать, что запущен в Xfce. Используйте exo-preferred-applications для настройки.
- DESKTOP_SESSION . В среде рабочего стола LXDE, когда у DESKTOP_SESSION установлено значение LXDE , xdg-open будет использовать файловые предпочтения из pcmanfm.
- PATH содержит список каталогов, разделённых двоеточиями, в которых система ищет исполняемые файлы. Когда обычная команда, например, ls , rc-update или emerge , интерпретируется командной оболочкой (такой как bash или zsh ), оболочка ищет исполняемый файл с указанным именем в этом списке, и, если находит, запускает файл, передав ему указанные аргументы командной строки. Чтобы запускать исполняемые файлы, пути к которым не находятся в PATH , необходимо указывать относительный или абсолютный путь к файлу, например ./a.out или /bin/ls .
- HOME содержит путь к домашнему каталогу текущего пользователя. Эта переменная может использоваться приложениями для определения расположения файлов настроек пользователя, который их запускает.
- PWD содержит путь к рабочему каталогу.
- OLDPWD содержит путь к предыдущему рабочему каталогу, то есть, значение PWD перед последним вызовом cd.
- TERM содержит тип запущенного терминала, например xterm-256color . Это используется некоторыми программами, которые хотят знать возможности текущего терминала.
- MAIL содержит путь к каталогу, где сохраняется входящая почта. Обычно имеет значение /var/spool/mail/$LOGNAME .
- ftp_proxy и http_proxy содержат адреса прокси-серверов для протоколов FTP и HTTP соответственно:
- MANPATH содержит список каталогов, которые использует man для поиска man-страниц.
- INFODIR , аналогично MANPATH , содержит список каталогов, в которых команда info производит поиск info-страниц, например /usr/share/info:/usr/local/share/info .
- TZ может использоваться для установки временной зоны. Доступные временные зоны можно найти в /usr/share/zoneinfo/ , например TZ=»/usr/share/zoneinfo/Europe/Moscow» . When pointing the TZ variable to a zoneinfo file, it should start with a colon per the GNU manual.
Программы по умолчанию
- SHELL содержит путь к предпочитаемой командной оболочке текущего пользователя. Имейте в виду, что это не обязательно совпадает с текущей работающей оболочкой, хотя обычно Bash прописывает эту переменную при своём запуске.
- PAGER указывает команду для запуска программы постраничного просмотра содержимого текстовых файлов, например, /bin/less .
- EDITOR содержит команду для запуска программы для редактирования текстовых файлов, например /usr/bin/nano . Также можно задать специальную команду, которая будет выбирать редактор в зависимости от окружения, например, gedit в X или nano в терминале, как в этом примере:
- VISUAL позволяет указать имя продвинутого текстового редактора для более сложных задач, например, редактирования почты. Это могут быть vi , vim, emacs и т. д.
- BROWSER содержит команду для запуска веб-браузера. Может быть полезно устанавливать это значение в зависимости от наличия графического окружения:
Использование pam_env
PAM-модуль pam_env(8) загружает переменные для прописывания в окружение из следующиех файлов: /etc/security/pam_env.conf , /etc/environment и
- /etc/environment должен содержать только простые пары вида ПЕРЕМЕННАЯ=значение на отдельных строках, наприммер:
- /etc/security/pam_env.conf и
/.pam_environment имеют одинаковый формат: @
Источник
Руководство про переменные в среде Linux
Главное меню » Операционная система Linux » Руководство про переменные в среде Linux
Значениями переменной среды может быть редактор по умолчанию, который будет использоваться, например, расположение всех файлов, которые могут быть выполнены в системе или локальные настройки для системы. Для начинающих Linux это немного сложно, но переменная окружения – отличный способ совместного использования настроек конфигурации между несколькими приложениями и процессами.
В пакете Coreutils размещены программы env и printenv. Чтобы перечислить все переменные среды, которые в настоящее время имеют значение, просто введите:
В оболочке bash существуют два типа переменных среды:
- Глобальные переменные
- Местные переменные
Глобальные переменные окружения
Из сеанса оболочки отображаются глобальные переменные окружения, и любые дочерние процессы, которые генерирует оболочка.
С другой стороны, локальные переменные могут быть доступны в оболочке только при их создании. Это делает глобальные переменные среды полезными в приложениях, которые требуют информации из родительского процесса и порождают дочерние процессы.
По умолчанию система Linux устанавливает определенные глобальные переменные среды при запуске сеанса bash. Переменные системной среды каждый раз используют все заглавные буквы, чтобы отличать их от обычных переменных среды пользователя.
Локальные переменные среды
Поскольку их имя указывает, что переменные локальной среды могут отображаться только в локальном процессе, в котором они определены. Не смешивайте, хотя и о переменных локальной среды, они одинаково важны как глобальные переменные среды. Фактически, система Linux также по умолчанию будет определять стандартные локальные переменные среды для вас. Это становится сложно, когда вы пытаетесь увидеть список переменных локальной среды. К сожалению, для нас нет команды, которая будет отображать только локальные переменные среды. Существует команда, которая отображает все переменные среды, заданные для определенного процесса. Обратите внимание, что это также включает глобальные переменные окружения.
Установка переменных среды
Вы можете создавать свои собственные переменные среды прямо из оболочки bash. В следующем разделе мы покажем вам, как создавать собственные переменные среды и ссылаться на них из вашей интерактивной программы оболочки или оболочки.
Настройка переменных локальной среды
После запуска оболочки bash (или появления сценария оболочки) вам разрешено создавать локальные переменные, которые видны внутри вашего shell-процесса. Вы можете присвоить переменную окружения переменной string или numeric с помощью знака равенства, которому присваивается значение переменной:
Поздравляем, вы только что создали свою первую переменную. Просто помните, что в любое время вам нужно ссылаться на значение переменной среды andreyex_test, просто ссылайтесь на нее по имени $ andreyex_test.
Если вам нужно назначить строку значений, содержащих пробелы, вам нужно будет использовать один кавычек, чтобы указать начало и конец строки:
Если оставить его без одиночных кавычек, оболочка bash предполагает, что следующий символ – это еще одна команда для обработки.
Обратите внимание, что для переменной локального окружения, которую мы определили, мы использовали строчные буквы, переменные системной среды, которые мы видели до сих пор, использовали все прописные буквы.
В оболочке bash это стандартное соглашение. Если вы настраиваете новые переменные среды, это не требуется, но рекомендуется использовать строчные буквы. Это помогает дифференцировать ваши личные переменные среды из результатов переменных системной среды.
ПРИМЕЧАНИЕ . Очень важно, чтобы между именем переменной среды, знаком равенства и значением не было пробелов. Если вы помещаете какие-либо пробелы в присваивание, оболочка bash интерпретирует значение как отдельную команду:
Установленная локальная переменная среды в вашем процессе оболочки будет доступна для использования в любом месте вашего shell-процесса. Но если вы создаете другую оболочку, она недоступна в дочерней оболочке:
В этом случае мы начали дочернюю оболочку. Как вы можете заметить, переменная среды andreyex_test недоступна в дочерней оболочке (она содержит пустое значение). После того как мы оставили дочернюю оболочку и вернулись к исходной оболочке, переменная локальной среды все еще была доступна.
Аналогично, если вы установите локальную переменную окружения в дочернем процессе после того, как вы покинете дочерний процесс, переменная локальной среды перестает быть доступной:
Переменная среды andreyex_test, установленная в дочерней оболочке, не существует, когда мы возвращаемся к родительской оболочке.
Настройка глобальных переменных окружения
Глобальные переменные окружения видны из всех процессов дочернего процесса, созданных процессом, который устанавливает глобальную переменную среды. Метод, используемый для создания глобальной переменной окружения, заключается в создании локальной переменной среды, а затем ее экспорта в глобальную среду.
Это выполняется с помощью команды export:
После того, как мы используем экспорт команды в локальной переменной среды andreyex_test, мы начали новый процесс оболочки и просмотрели значение переменной среды andreyex_test. На этот раз команда export сделала глобальную переменную среды глобальной, поэтому она сохранила свою ценность.
Удаление переменных среды
Очевидно, что если вы можете создать новую переменную среды, было бы разумно, что вы также можете удалить существующую переменную среды. Это можно сделать, используя команду unset:
Если вы ссылаетесь на переменную среды в команде unset, имейте в виду не использовать знак доллара.
При работе с глобальными переменными среды все становится немного сложнее. Если вы находитесь в дочернем процессе и отключите глобальную переменную окружения, она применима только к дочернему процессу. Глобальная переменная среды остается доступной в родительском процессе:
В этом примере мы устанавливаем локальную переменную среды, называемую andreyex_test, затем экспортируем ее, чтобы сделать ее глобальной переменной окружения. Затем мы начали процесс дочерней оболочки и были проверены, чтобы убедиться, что глобальная переменная среды andreyex_test все еще доступна. Затем, еще находясь в дочерней оболочке, мы использовали команду unset для удаления глобальной переменной среды andreyex_test, а затем вышли из дочерней оболочки. Теперь вернемся к исходной родительской оболочке, мы проверили значение переменной среды andreyex_test, и оно все еще действует.
Переменные среды Shell по умолчанию
Существуют конкретные переменные среды, которые bash shell использует для определения системной среды. Вы всегда можете подсчитать эти переменные, которые будут использоваться в вашей системе Linux. Поскольку оболочка bash является производной исходной оболочки Unix Bourne, она также включает переменные среды, первоначально определенные в этой оболочке.
Следующие примеры показывают, что переменные среды, предоставляемые оболочкой bash, совместимы с исходной оболочкой Unix Bourne.
До сих пор наиболее ценной переменной среды в этом списке является переменная среды PATH.
Когда вы вводите команду в командной оболочке оболочки (интерфейс командной строки), оболочка должна искать систему, чтобы найти программу. Каталоги, которые он ищет в поисках команд, определяются переменной среды PATH. В системе Linux переменная среды PATH должна выглядеть примерно так:
В этом случае показано, что существует восемь каталогов, в которых оболочка ищет команды. Каждый каталог разделяется двоеточием, и в конце переменной PATH нет и конца списка каталогов. Вы всегда можете добавить дополнительные каталоги в PATH, добавив новый каталог и добавив еще один двоеточие. PATH также демонстрирует запрос, в котором он ищет заказы.
В дополнение к стандартным переменным среды Bourne, оболочка bash также предоставляет несколько переменных, как показано:
Переменные Bash Shell Bourne:
CDPATH: список каталогов, разделенных двоеточиями, используемых в качестве пути поиска для команды cd.
HOME: домашний каталог текущего пользователя.
IFS: список символов, которые разделяют поля, используемые оболочкой для разделения текстовых строк.
MAIL: имя файла для почтового ящика текущего пользователя. Оболочка bash проверяет этот файл для новой почты.
MAILPATH: список из нескольких имен файлов для почтового ящика текущего пользователя. Оболочка bash проверяет каждый файл в этом списке для новой почты.
OPTARG: значение последнего аргумента параметра, обрабатываемого командой getopts.
OPTIND: значение индекса последнего аргумента параметра, обработанного командой getopts.
PATH: список каталогов, разделенных двоеточиями, где оболочка ищет команды.
PS1: строка приглашения командной строки основной командной строки.
PS2: строка приглашения интерфейса командной строки вторичной оболочки.
Переменные среды Shell bash:
BASH: полное имя пути для выполнения текущего экземпляра оболочки bash.
BASH_ENV: при установке каждый сценарий bash пытается запустить файл запуска, определенный этой переменной перед запуском.
BASH_VERSION: номер версии текущего экземпляра оболочки bash.
BASH_VERSINFO: массив переменных, содержащий отдельные основные и младшие номера версий текущего экземпляра оболочки bash.
COLUMNS: содержит ширину терминала терминала, используемую для текущего экземпляра оболочки bash.
COMP_CWORD: индекс в переменной COMP_WORDS, который содержит текущую позицию курсора.
COMP_LINE: текущая командная строка.
COMP_POINT: индекс текущей позиции курсора относительно начала текущей команды.
COMP_WORDS: переменный массив, содержащий отдельные слова в текущей командной строке.
COMPREPLY: переменный массив, содержащий возможные коды завершения, генерируемые функцией оболочки.
DIRSTACK: массив переменных, содержащий текущее содержимое стека директорий.
EUID: эффективный идентификатор пользователя текущего пользователя.
FCEDIT: редактор по умолчанию, используемый командой fc.
FIGNORE: список суффиксов, разделенных двоеточиями, для игнорирования при выполнении завершения имени файла.
FUNCNAME: имя исполняемой в данный момент функции оболочки.
GLOBIGNORE: список разделенных двоеточиями шаблонов, определяющих набор имен файлов, которые следует игнорировать, расширяя имя файла.
GROUPS: переменный массив, содержащий список групп, членом которого является текущий пользователь.
histchars: до трех символов, которые управляют расширением истории.
HISTCMD: номер истории текущей команды.
HISTCONTROL: Управляет тем, какие команды вводятся в списке истории оболочки.
HISTFILE: имя файла для сохранения списка истории оболочки (по умолчанию – история .bash).
HISTFILESIZE: максимальное количество строк для сохранения в файле истории.
HISTIGNORE: список шаблонов, разделенных двоеточием, используемый для определения того, какие команды игнорируются для файла истории.
HISTSIZE: максимальное количество команд, хранящихся в файле истории.
HOSTFILE: содержит имя файла, который должен быть прочитан, когда оболочке необходимо заполнить имя хоста.
HOSTNAME: имя текущего хоста.
HOSTTYPE: Строка, описывающая машину bash-shell, работает.
IGNOREEOF: количество последовательных символов EOF, которые должна получить оболочка перед выходом. Если это значение не существует, по умолчанию оно равно единице.
INPUTRC: имя файла инициализации Readline (по умолчанию – .inputrc).
LANG: категория локали для оболочки.
LC_ALL: переопределяет переменную LANG, определяя категорию локали.
LC_COLLATE: устанавливает порядок сортировки, используемый при сортировке строковых значений.
LC_CTYPE: Определяет интерпретацию символов, используемых при расширении имени файла и сопоставлении с образцом.
LC_MESSAGES: определяет параметр локали, используемый при интерпретации строк с двойными кавычками, которым предшествует знак доллара.
LC_NUMERIC: указывает локальную настройку, используемую для форматирования чисел.
LINENO: номер строки в исполняемом скрипте.
LINES: Определяет количество линий, доступных на терминале.
MACHTYPE: строка, определяющая тип системы в формате cpu-company-system.
MAILCHECK: как часто оболочка должна проверять (по умолчанию 60 секунд) для новой почты.
OLDPWD: предыдущий рабочий каталог, используемый в оболочке.
OPTERR: если установлено значение 1, оболочка bash отображает ошибки, сгенерированные командой getopts.
OSTYPE: Строка, определяющая операционную систему, в которой работает оболочка.
PIPESTATUS: переменный массив, содержащий список значений статуса выхода из процессов процесса переднего плана.
POSIXLY_CORRECT: если установлено, bash запускается в режиме POSIX.
PPID: идентификатор процесса (PID) родительского процесса оболочки bash.
PROMPT_COMMAND: если установлено, команда для выполнения перед отображением первичного приглашения.
PS3: приглашение использовать команду select.
PS4: подсказка, отображаемая до того, как командная строка будет эхом, если используется параметр bash -x.
PWD: текущий рабочий каталог.
RANDOM: возвращает случайное число от 0 до 32767. Присвоение значения этой переменной сгенерирует генератор случайных чисел.
REPLY: переменная по умолчанию для команды чтения.
SECONDS: количество секунд с момента запуска оболочки. Присвоение значения сбрасывает таймер на значение.
SHELLOPTS: список разрешенных опций оболочки bash, разделенных двоеточием.
SHLVL: указывает уровень оболочки, увеличивающийся на единицу при каждом запуске новой оболочки bash.
TIMEFORMAT: формат, определяющий, как оболочка отображает значения времени.
TMOUT: значение того, как долго (в секундах) команды выбора и чтения должны ждать ввода. Значение по умолчанию, равное нулю, означает, что нужно ждать бесконечно.
UID: реальный идентификатор пользователя текущего пользователя.
Вы можете заметить, что после использования команды set отображаются не все переменные среды по умолчанию. Объяснением этого может быть то, что хотя это переменные среды по умолчанию, не все из них должны содержать значение.
Вывод
В этом руководстве мы рассмотрели мир переменных среды Linux. Глобальные переменные окружения часто получают доступ к любому дочернему процессу, порожденному процессом, в котором они определены. Локальные переменные окружения будут доступны только из процесса, в котором они определены.
Система Linux использует каждую глобальную и локальную переменные среды для хранения информации о системной среде. Вы сможете получить доступ к этой информации из интерфейса командной строки оболочки, а также для внутренних сценариев оболочки. Оболочка bash использует переменные системной среды, определенные в исходной оболочке UNO Bourne, также как и множество новых переменных среды. Переменная среды PATH определяет шаблон поиска, который принимает оболочка bash для поиска исполняемой команды. Вы сможете изменить переменную среды PATH, чтобы добавить свои собственные каталоги или, возможно, текущий символ каталога, чтобы упростить работу с вашими программами. Вы также можете создавать свои собственные глобальные и локальные переменные среды для собственного использования. После создания переменной среды она доступна для всего сеанса оболочки.
Существует много файлов запуска, которые запускают оболочку bash после ее запуска. Эти файлы запуска могут содержать определения переменных среды для установки стандартных переменных среды для каждого сеанса bash. После входа в систему Linux оболочка bash обращается к файлу запуска /etc/profile, а также к трем локальным файлам запуска для каждого пользователя, $HOME/.bash, $HOME/.bash login и $HOME/.profile.
Пользователи будут настраивать эти файлы для включения переменных среды и сценариев запуска для собственного использования. Оболочка bash дополнительно предоставляет переменные массивы окружения. Эти переменные среды могут содержать несколько значений в одной переменной. Вы сможете получить доступ к значениям индивидуально, указав значение индекса или в целом, указав полное имя массива переменных среды. Наконец, в этом руководстве мы должны упомянуть использование командных псевдонимов. Хотя не переменные среды, псевдонимы команд ведут себя почти как переменные среды. Они позволяют вам определять псевдоним для команды вместе с ее параметрами. Вместо того, чтобы вводить очень длинную команду и параметры, вы сможете просто присвоить ей простой псевдоним и использовать псевдоним в любое время в сеансе оболочки.
Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.
Источник