Как установить и посмотреть переменные окружения linux
Содержание:
Установка переменных среды
Чтобы лучше показать разницу между переменными оболочки и среды, попробуем начать с установки переменных оболочки, а затем перейдем к переменным среды.
Создадим новую переменную оболочки с именем MY_VAR и значением Abuzov, для этого введём:
Вы можете проверить, что переменная установлена, используя echo $MY_VAR. Для фильтрации вывода команды set с помощью grep set | grep MY_VAR:
Используйте команду printenv, чтобы проверить, является ли эта переменная переменной среды:
Вывод окажется пустым — это говорит о том, что переменная не является переменной окружения. Также можно напечатать переменную в под-оболочке, и вы получите пустой вывод.
Команда export используется для установки переменных окружения. Чтобы создать переменную, просто экспортируйте переменную оболочки как переменную среды:
Теперь выполнение команды printenv MY_VAR выведет на экран значение Abuzov. Дополнительно, можно устанавливать переменные среды командой в одну строку:
Переменные среды, созданные таким образом, доступны только в текущем сеансе. Если вы откроете новую оболочку или выйдете из системы, все переменные будут потеряны.
Java dump options
The preferred mechanism for controlling the production of Java dumps is by using the option. However, these legacy environment variables are preserved and can still be used.
Environment Variable | Usage Information |
---|---|
Setting to is the equivalent of using and stops the default production of Java dumps. | |
The default location into which the Java dump is written. On z/OS, the environment variable is used instead. | |
By setting this environment variable to , you disable Java dumps for an out-of-memory exception. When not set, a Java dump is generated when an out-of-memory exception is thrown but not caught and handled by the application. Set to to generate a dump when an out-of-memory exception is thrown, even if it is handled by the application. Set to to disable Java dumps for an out-of-memory exception. | |
This variable specifies an alternative temporary directory. This directory is used only when Java dumps and Heap dumps cannot be written to their target directories, or the current working directory. The default is ( for Windows). |
Note: You can use the dump agent variable to control the conditions under which Java dumps are produced.
Переменные средЫ
Давайте поговорим о переменных среды. Данные переменные, заданы в и инициализируются при загрузке, либо при выполнении команды «. .файл_инициализации». Обычно, основные значения переменных среды следующие:
$BASH
В переменной $BASH содержится полный путь до исполняемого файла командной оболочки Bash.
$BASH_VERSION
В переменную $BASH_VERSION записывается версия Bash.
$CDPATH
Переменная, которая хранит пути поиска каталога. (используется при вводе команды cd имя_каталога без слэша)
$CLASSPATH
содержит список каталогов для поиска файлов классов Java и архивов Java.
$HOME
домашний каталог текущего пользователя.
$HOSTNAME
В переменной $HOSTNAME хранится имя компьютера.
$HISTSIZE
количество событий, хранимых в истории за 1 сеанс
$HISTFILE
Расположение файла истории событий
$HISTFILESIZE
количество событий, хранимых в истории между сеансами
$IFS
переменная хранит символы, являющиеся разделителями команд и параметров. (по умолчанию — пробел, табуляция и новая строка)
$LANG
текущая установка локализации, которая позволяет настроить командную оболочку для использования в различных странах и на различных языках.
Место, где храниться почта
$OSTYPE
В переменной $OSTYPE содержится описание операционной системы.
$PATH
список каталогов для поиска команд и приложений, когда полный путь к файлу не задан.
$PS1
PS1 используется как основная строка приглашения. (то самое #)
$PS2
PS2 используется как вторичная строка приглашения.
$PROMPT_COMMAND
Эта команда должна быть выполнена до отображения строки приглашения Bash.
$PWD
полный путь к текущему рабочему каталогу.
$SHELL
полный путь к текущей командной оболочке.
$USER
В переменной $USER содержится имя текущего пользователя.
Переменные среды́ UNIX
Основная статья: Переменная среды Unix
Переменные среды́ устанавливаются пользователем или сценариями оболочки. Начальный набор переменных задаётся стартовыми сценариями операционной системы и сценариями, запускаемыми при регистрации пользователя в системе, в частности, и .
Среда имеет большое значение в UNIX-системах, так как хранит множество настроек как системы в целом, так и отдельных программ
Важной особенностью является то, что при создании дочерний процесс получает локальную копию среды́ родительского процесса, а, значит, не может изменить напрямую глобальные установки.. Среда представляет собой набор пар «имя переменной» и «значение переменной», реализация управления которыми возложена обычно на командный интерпретатор
Так как существует достаточно большое количество интерпретаторов, синтаксис отличается в зависимости от используемого пользователем. Как «имя», так и «значение» чувствительны к регистру символов, «Имя» обычно указывается в верхнем регистре, использование пробелов недопустимо.
Среда представляет собой набор пар «имя переменной» и «значение переменной», реализация управления которыми возложена обычно на командный интерпретатор. Так как существует достаточно большое количество интерпретаторов, синтаксис отличается в зависимости от используемого пользователем. Как «имя», так и «значение» чувствительны к регистру символов, «Имя» обычно указывается в верхнем регистре, использование пробелов недопустимо.
В сценариях обычно используются объявления вида , но конкретный синтаксис зависит от используемого интерпретатора.
Для получения значения переменной необходимо перед её именем поставить символ доллара. Также иногда требуется заключить имя в скобки (например, в сценариях утилиты make).
Из командной строки управление переменными осуществляется с помощью export и env.
Установка переменных
На системном уровне
Большинство дистрибутивов Linux советуют изменять или добавлять переменные окружения в или других местах. Имейте в виду, что сразу множество файлов могут содержать переменные окружения и переопределять их. По сути, любой скрипт может быть использован для этого, однако, по принятым в UNIX соглашениям, следует использовать для этого только определенные файлы.
- устанавливает переменные только для командных оболочек. Он может запускать любые скрипты в оболочках, совместимых с Bourne shell.
- устанавливает переменные только для интерактивных оболочек. Он также запускает bash-скрипты.
- используется модулем PAM-env. Здесь можно указывать только пары .
Ниже приведен пример скрипта, который позволяет добавлять каталог пользователя в . Чтобы это сделать, просто поместите код в один из системных файлов инициализации окружения ( или ):
# If user ID is greater than or equal to 1000 & if ~/bin exists and is a directory & if ~/bin is not already in your $PATH # then export ~/bin to your $PATH. if [[ $UID -ge 1000 && -d $HOME/bin && -z $(echo $PATH | grep -o $HOME/bin) ]] then export PATH=$HOME/bin:${PATH} fi
На уровне пользователя
Вам не всегда нужно будет устанавливать переменные окружения на уровне системы. Например, вы можете добавить ваш каталог в , однако, не хотите, чтобы это затрагивало других пользователей системы. Переменные окружения пользователя можно устанавливать во многих других файлах:
- Файлы инициализации командной оболочки, например или .
- используется также многими оболочками, смотрите .
- пользовательский аналог файла , который используется модулем PAM-env. Смотрите подробнее в .
Например, чтобы добавить каталог в , поместите следующее в :
export PATH="${PATH}:/home/пользователь/bin"
Чтобы увидеть изменения перезайдите в командную оболочку, либо используйте команду source: .
Графические приложения
Чтобы установить переменные окружения для графических приложений, вы можете поместить ваши переменные в xinitrc, например:
~/.xinitrc
export PATH="${PATH}:~/scripts" export GUIVAR=value
На уровне сеанса
Иногда разумно установить переменную окружения только для текущего сеанса. Для этого вы можете создать в своем каталоге скрипт с нужными переменными, который можно будет запустить в любое время с помощью команды source, либо вводить команды для установки переменных окружения самостоятельно, используя команду export, например:
$ export PATH="${PATH}:/home/my_user/tmp/usr/bin"
Defining variables
Globally
Most Linux distributions tell you to change or add environment variable definitions in or other locations. Keep in mind that there are also package-specific configuration files containing variable settings such as . Be sure to maintain and manage the environment variables and pay attention to the numerous files that can contain environment variables. In principle, any shell script can be used for initializing environmental variables, but following traditional UNIX conventions, these statements should only be present in some particular files.
The following files should be used for defining global environment variables on your system: , and shell specific configuration files. Each of these files has different limitations, so you should carefully select the appropriate one for your purposes.
- is used by the pam_env module and is shell agnostic so scripting or glob expansion cannot be used. The file only accepts pairs. See and for details.
- Global configuration files of your shell, initializes variables and runs scripts. For example or .
- initializes variables for login shells only. It does, however, run scripts and can be used by all Bourne shell compatible shells.
In this example, we add directory to the for respective user. To do this, just put this in your preferred global environment variable config file ( or ):
# If user ID is greater than or equal to 1000 & if ~/bin exists and is a directory & if ~/bin is not already in your $PATH # then export ~/bin to your $PATH. if [[ $UID -ge 1000 && -d $HOME/bin && -z $(echo $PATH | grep -o $HOME/bin) ]] then export PATH="${PATH}:$HOME/bin" fi
Per user
Note: The dbus daemon and the user instance of systemd do not inherit any of the environment variables set in places like etc. This means that, for example, dbus activated programs like Gnome Files will not use them by default. See .
You do not always want to define an environment variable globally. For instance, you might want to add to the variable but do not want all other users on your system to have that in their too. Local environment variables can be defined in many different files:
- User configuration files of your shell, for example or .
To add a directory to the for local usage, put following in :
export PATH="${PATH}:/home/my_user/bin"
To update the variable, re-login or source the file: .
Graphical environment
Environment variables for Xorg applications can be set in xinitrc, or in xprofile when using a display manager, for example:
~/.xinitrc
export PATH="${PATH}:${HOME}/scripts" export GUIVAR=value
The factual accuracy of this article or section is disputed.
Applications running on Wayland may use instead, as Wayland does not initiate any Xorg related files:
~/.config/environment.d/envvars.conf
PATH=$PATH:$HOME/scripts GUIVAR=value
To set environment variables only for a specific application instead of the whole session, edit the application’s .desktop file. See for instructions.
Tip: KDE Plasma supports executing shell scripts at login and even before launching Plasma, they can be used to set environment variables. See .
Per session
Sometimes even stricter definitions are required. One might want to temporarily run executables from a specific directory created without having to type the absolute path to each one, or editing shell configuration files for the short time needed to run them.
In this case, you can define the variable in your current session, combined with the export command. As long as you do not log out, the variable will be using the temporary settings. To add a session-specific directory to , issue:
$ export PATH="${PATH}:/home/my_user/tmp/usr/bin"
List of Windows Environment Variables
is a list of default environment variables, which are built into Windows. Some examples are:
, , , and .
Like most names in Windows, these are case-insensitive.
Unix derivatives (FreeBSD, GNU / Linux, OS X)
Environment Variables in Linux are prefixed with a dollar sign ($) such as $HOME or $HOSTNAME. Many well-known and standard variables are spelled out in capital letters to signify just that. Keep in mind that variable names are case-sensitive, meaning that $User and $USER are entirely unrelated from the shell’s point of view.
Unix derivatives define system wide variables in shell scripts located mostly in the folder, but user-specific values may be given to those variables in scripts located in the home folder (e.g., , ). The file in the home folder is a common place to define user variables.
Setting variables
These files are regular shell scripts and can contain more than just environment variable declarations. To set an environment variable, use . To show your currently defined environment variables in a terminal, run .
The command is a standard way to define variables. The syntax is very intuitive. The outcome is identical for these two lines, but the first alternative is preferable in case portability to pre-POSIX Bourne shell is necessary.
The C shell and its descendants use a completely different syntax; there, the command is .
See the Linux documentation project, Path HOWTO for a more thorough discussion on this topic.
Perhaps contrary to common belief, OS X is more «Unix» than Linux. Additionally to the files already mentioned, $PATH can be modified in these files:
- contains all default directories that are added to the path, like and .
- Any file in — commonly used by installers to make the executable files they provide available from the shell without touching system-wide or user-specific configuration files. These files simply contain one path per line. e.g., /Programs/Mozilla/Calendar/bin.
Path
One of the most well-known is called on Windows, Linux and Mac OS X. It specifies the directories in which executable programs* are located on the machine that can be started without knowing and typing the whole path to the file on the command line. (Or in Windows, the Run dialog in the Start Menu or +R).
On Linux and Mac OS X, it usually holds all and directories relevant for the current user. On Windows, it contains at least the and directories — that’s why you can run or from the command line or Run dialog, but not . (Firefox is located in . For information on how to include Firefox, go here.)
For example, typing (the can be omitted) in the command line on Windows will start up the Windows Calculator.
* You can add support for file extensions other than by editing .
Переменные окружения везде или нет
На данный момент существует много споров между использованием переменных окружения, файлов, или их смеси: переменная окружения ссылается на файл конфигурации. Дело в том, что несмотря на то, что это считается лучшей практикой, переменные окружения не представляют больших преимуществ…
Но если правильно использовать, в приложении на Symfony, например, переменные окружения могут быть изменены «на лету» — без очистки какого-либо кеша, без обращения к файловой системе, без развертывания кода: просто перезапустив процесс, например.
Тенденция иметь только одну переменную, как , и читать её через для меня выглядит как заново изобретать старый добрый , если файл не управляется автоматически с помощью надежного инструмента (как AWS Secret Store). И также есть envkey.com, который позволяет управлять вашими переменными окружения из одного места, не возясь с файлами самостоятельно, мне нравится такой подход, т. к. это гораздо проще!
Утилиты
Пакет содержит программы и . Чтобы отобразить список текущих переменных окружения, используйте , которая отобразит имена и значения каждой переменной окружения:
$ printenv
Примечание: Некоторые переменные окружения относятся к конкретному пользователю в системе. Вы можете убедиться в этом, сравнив вывод команды для обычного пользователя и для суперпользователя.
Программа может быть использована для запуска команд с указанием нового значения переменной окружения. В следующем примере будет запущен xterm, для которого переменная окружения имеет значение . Такой вызов не затронет переменную окружения в текущем сеансе терминала.
$ env EDITOR=vim xterm
Чтобы увидеть переменные окружения конкретных процессов, откройте файл , где pid — числовой идентификатор интересующего процесса. Записи в этом файле разделены специальными символами , которые не отображаются на экране. Вы можете использовать следующую функцию, которая позволяет отобразить переменные окружения процесса, заменяя эти символы на переносы строки:
# envof() { sed 's/\x0/\n/g' /proc/${1}/environ; }
Например, для вывода переменных окружения процесса с , наберите:
# envof 1 TERM=linux
Список переменных среды
Наиболее часто используемая команда для отображения переменных среды — printenv. Если имя переменной передается в качестве аргумента команды, то отображается только значение этой переменной. Если же аргумент не указан, printenv выводит список всех переменных.
Например, чтобы отобразить значение переменной среды HOME, вы должны выполнить:
Вы также можете передавать команде printenv более одного аргумента:
Если вы запустите команду printenv или env без аргументов, тогда вы получите список всех переменных среды:
Ниже приведены несколько наиболее популярных имен переменных среды:
- USER — Текущий пользователь системы.
- HOME — Домашняя директория пользователя.
- EDITOR — Редактор по умолчанию. Это редактор, который будет использоваться при вводе edit в терминале.
- SHELL — Путь к оболочке текущего пользователя, такой как bash или zsh.
- LOGNAME — Имя текущего пользователя
- PATH — Список каталогов, которые нужно обойти при выполнении команд. Когда вы запускаете команду, система будет искать в этих каталогах исполняемый файл и использовать первый найденный.
- LANG — Настройки языка.
- TERM — Текущий терминал.
- MAIL — Местоположение, где хранится почта текущего пользователя.
Команды printenv и env выводят только переменные окружения. Если вы хотите получить список всех переменных, включая окружение, оболочку и переменные, а также функции оболочки, вы можете использовать команду set без аргументов:
Команда отобразит большой список всех переменных, поэтому правильнее будет направить вывод в команду less.
Конечно, можно использовать echo для вывода переменной оболочки. Например, чтобы вывести значение переменной BASH_VERSION выполните: