Основные конфигурационные файлы linux

Utilities

The package contains the programs printenv and env. To list the current environmental variables with values:

$ printenv

Note: Some environment variables are user-specific. Check by comparing the outputs of printenv as an unprivileged user and as root.

The env utility can be used to run a command under a modified environment. The following example will launch xterm with the environment variable set to . This will not affect the global environment variable .

$ env EDITOR=vim xterm

Each process stores their environment in the file. This file contains each key value pair delimited by a nul character (). A more human readable format can be obtained with sed, e.g. .

Переменные со значением по умолчанию

Не объявленные переменные могут принимать значения по умолчанию.

Если переменная не объявлена, то с помощью оператора —  мы можем задать ей начальное значение.

Рассмотрим пример установки значения по умолчанию.

var_default.sh

ZSH

#!/bin/bash
# Объявляем переменную $planet и присваиваем ей значение
planet=»Earth»
# Сбрасываем значение переменной $planet
unset planet
echo «\$planet:= ${planet:=Mars}»
echo «\$planet:= ${planet:=Venus}»
echo «\$planet: ${planet}»
planet=»Jupiter»
echo «\$planet: ${planet}»

1
2
3
4
5
6
7
8
9
10

#!/bin/bash
# Объявляем переменную $planet и присваиваем ей значение

planet=»Earth»

# Сбрасываем значение переменной $planet

unset planet

echo»\$planet:= ${planet:=Mars}»

echo»\$planet:= ${planet:=Venus}»

echo»\$planet: ${planet}»

planet=»Jupiter»

echo»\$planet: ${planet}»

Значение по умолчанию можно задать только один раз.

Постоянные переменные среды

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

/etc/environment — используйте этот файл для настройки общесистемных переменных окружения. Переменные в этом файле задаются в следующем формате:
FOO=bar VAR_TEST=»Test Var»
/etc/profile — переменные, установленные в этом файле, загружаются при каждом входе в оболочку bash. При объявлении переменных окружения в этом файле вам нужно использовать команду export :
export JAVA_HOME=»/path/to/java/home» export PATH=$PATH:$JAVA_HOME/bin
Конфигурационные файлы для отдельных пользовательских оболочек. Например, если вы используете Bash, вы можете объявить переменные в ~/.bashrc :
export PATH=»$HOME/bin:$PATH»

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

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

Скрыть рекламу в статье

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

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

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

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

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

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

Упражнение 4.4. Функции и

1. Первые несколько строк после объявления функции гарантируют корректный вызов программы environ.c с только одним или двумя аргументами:

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

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

4. В заключение вы узнаете новое значение переменной, вызвав функцию getenv еще раз:

Когда вы выполните эту программу, то сможете увидеть и задать переменные окружения:

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

Оглавление книги

Создание переменной среды в Windows

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

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

Проделайте следующее:

  1. В окне «Переменные среды» выберите одну из групп переменных: пользовательские или системные переменные.
  2. Нажмите на кнопку «Создать…».

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

  1. В окне «Изменение пользовательской переменной» добавьте имя переменной, а в поле «Значение переменной:» введите полный путь к исполняемому файлу.

  1. В окне переменных сред добавилась новая переменная. Нажмите на кнопку «ОК» для применения изменений.

  1. В диалоговом окне «Выполнить» введите «%Имя_переменной%», в нашем случае, «%TeamViewer%», нажмите на кнопку «ОК».

  1. На Рабочем столе компьютера откроется окно запущенной программы.

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

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

Вам также может быть интересно:

  • Команды командной строки Windows: список
  • Команды «Выполнить» в Windows: полный список

Если добавить в переменную среды Path Windows путь к директории с исполняемым файлом, например, для браузера Google Chrome: , то программа запустится из командной строки, после выполнения команды «chrome», без ввода полного пути к исполняемому файлу.

При необходимости, пользователь может удалить ненужную переменную из операционной системы Windows.

Conclusion

Environmental and shell variables are always present in your shell sessions and can be very useful. They are an interesting way for a parent process to set configuration details for its children, and are a way of setting options outside of files.

This has many advantages in specific situations. For instance, some deployment mechanisms rely on environmental variables to configure authentication information. This is useful because it does not require keeping these in files that may be seen by outside parties.

There are plenty of other, more mundane, but more common scenarios where you will need to read or alter the environment of your system. These tools and techniques should give you a good foundation for making these changes and using them correctly.

<div class=“author”>By Justin Ellingwood</div>

Setting Shell and Environmental Variables

To better understand the difference between shell and environmental variables, and to introduce the syntax for setting these variables, we will do a small demonstration.

Creating Shell Variables

We will begin by defining a shell variable within our current session. This is easy to accomplish; we only need to specify a name and a value. We’ll adhere to the convention of keeping all caps for the variable name, and set it to a simple string.

Here, we’ve used quotations since the value of our variable contains a space. Furthermore, we’ve used single quotes because the exclamation point is a special character in the bash shell that normally expands to the bash history if it is not escaped or put into single quotes.

We now have a shell variable. This variable is available in our current session, but will not be passed down to child processes.

We can see this by grepping for our new variable within the output:

We can verify that this is not an environmental variable by trying the same thing with :

No output should be returned.

Let’s take this as an opportunity to demonstrate a way of accessing the value of any shell or environmental variable.

As you can see, reference the value of a variable by preceding it with a sign. The shell takes this to mean that it should substitute the value of the variable when it comes across this.

So now we have a shell variable. It shouldn’t be passed on to any child processes. We can spawn a new bash shell from within our current one to demonstrate:

If we type to spawn a child shell, and then try to access the contents of the variable, nothing will be returned. This is what we expected.

Get back to our original shell by typing :

Creating Environmental Variables

Now, let’s turn our shell variable into an environmental variable. We can do this by exporting the variable. The command to do so is appropriately named:

This will change our variable into an environmental variable. We can check this by checking our environmental listing again:

This time, our variable shows up. Let’s try our experiment with our child shell again:

Great! Our child shell has received the variable set by its parent. Before we exit this child shell, let’s try to export another variable. We can set environmental variables in a single step like this:

Test that it’s exported as an environmental variable:

Now, let’s exit back into our original shell:

Let’s see if our new variable is available:

Nothing is returned.

This is because environmental variables are only passed to child processes. There isn’t a built-in way of setting environmental variables of the parent shell. This is good in most cases and prevents programs from affecting the operating environment from which they were called.

The variable was set as an environmental variable in our child shell. This variable would be available to itself and any of its child shells and processes. When we exited back into our main shell, that environment was destroyed.

Examples

The following section lists a number of common environment variables used by a Linux system and describes their values.

DE indicates the Desktop Environment being used. xdg-open will use it to choose more user-friendly file-opener application that desktop environment provides. Some packages need to be installed to use this feature. For GNOME, that would be libgnomeAUR; for Xfce this is exo. Recognised values of DE variable are: gnome, kde, xfce, lxde and mate.

The environment variable needs to be exported before starting the window manager. For example:
~/.xinitrc
export DE="xfce"
exec openbox
This will make xdg-open use the more user-friendly exo-open, because it assumes it is running inside Xfce. Use exo-preferred-applications for configuring.

DESKTOP_SESSION is similar to DE, but used in LXDE desktop environment: when DESKTOP_SESSION is set to LXDE, xdg-open will use pcmanfm file associations.

PATH contains a colon-separated list of directories in which your system looks for executable files. When a regular command (e.g. ls, systemctl or pacman) is interpreted by the shell (e.g. bash or zsh), the shell looks for an executable file with the same name as your command in the listed directories, and executes it. To run executables that are not listed in PATH, a relative or absolute path to the executable must be given, e.g. ./a.out or /bin/ls.

Note: It is advised not to include the current working directory () into your for security reasons, as it may trick the user to execute vicious commands.

HOME contains the path to the home directory of the current user. This variable can be used by applications to associate configuration files and such like with the user running it.

PWD contains the path to your working directory.

OLDPWD contains the path to your previous working directory, that is, the value of PWD before last cd was executed.

TERM contains the type of the running terminal, e.g. xterm-256color. It is used by programs running in the terminal that wish to use terminal-specific capabilities.

ftp_proxy and http_proxy contains FTP and HTTP proxy server, respectively:

ftp_proxy="ftp://192.168.0.1:21"
http_proxy="http://192.168.0.1:80"

MANPATH contains a colon-separated list of directories in which man searches for the man pages.

Note: In , there is a comment that states «Man is much better than us at figuring this out», so this variable should generally be left unset. See .

INFODIR contains a colon-separated list of directories in which the info command searches for the info pages, e.g., /usr/share/info:/usr/local/share/info

TZ can be used to to set a time zone different to the system zone for a user. The zones listed in /usr/share/zoneinfo/ can be used as reference, for example TZ=»:/usr/share/zoneinfo/Pacific/Fiji». When pointing the TZ variable to a zoneinfo file, it should start with a colon per the GNU manual.

Default programs

SHELL contains the path to the user’s preferred shell. Note that this is not necessarily the shell that is currently running, although Bash sets this variable on startup.

PAGER contains command to run the program used to list the contents of files, e.g., /bin/less.

EDITOR contains the command to run the lightweight program used for editing files, e.g., /usr/bin/nano. For example, you can write an interactive switch between gedit under X or nano, in this example:

export EDITOR="$(if ]; then echo 'gedit'; else echo 'nano'; fi)"

VISUAL contains command to run the full-fledged editor that is used for more demanding tasks, such as editing mail (e.g., vi, vim, emacs etc).

BROWSER contains the path to the web browser. Helpful to set in an interactive shell configuration file so that it may be dynamically altered depending on the availability of a graphic environment, such as X:

if ; then
    export BROWSER=firefox
else 
    export BROWSER=links
fi

Using pam_env

The PAM module loads the variables to be set in the environment from the following files: , and .

  • must consist of simple pairs on separate lines, for example:

    EDITOR=nano
  • and share the same following format:

    VARIABLE [DEFAULT=value] [OVERRIDE=value]

    and are special variables that expand to what is defined in . The following example illustrates how to expand the environment variable into another variable:

    XDG_CONFIG_HOME   DEFAULT=@{HOME}/.config

    Note: The variables and are not linked to the and environment variables, they are not set by default. The format also allows to expand already defined variables in the values of other variables using , like this:

    GNUPGHOME        DEFAULT=${XDG_CONFIG_HOME}/gnupg

    pairs are also allowed, but variable expansion is not supported in those pairs. See for more information.

Note: These files are read before other files, in particular before , and .

Description

setenv is a built-in function of the C shell (csh). It is used to define the value of environment variables.

If setenv is given no arguments, it displays all environment variables and their values. If only VAR is specified, it sets an environment variable of that name to an empty (null) value. If both VAR and VALUE are specified, it sets the variable named VAR to the value VALUE. setenv is similar to the set command, which also sets an environment variable’s value. However, unlike set, setenv also «exports» this environment variable to any subshells. In this way, it is the equivalent of the bash command export.

For instance, if you are inside the c shell, and you use setenv to set the following variable:

setenv MYVAR myvalue

We can then use the echo command to view the value of that variable:

echo "$MYVAR"
myvalue

Our value, «myvalue«, was returned. Now let’s run bash as a subshell:

bash

and see if it knows the value of our variable MYVAR:

echo "$MYVAR"
myvalue

As you can see, the value of MYVAR was passed on to bash.

Now, let’s see how set is different. Let’s go back to csh by exiting the bash subshell:

exit

…and use set to set another environment variable, MYVAR2:

set MYVAR2=myvalue2

(The syntax of set, as you can see, is slightly different. It uses an equals sign to assign a value.) Now let’s check the value of MYVAR2:

echo "$MYVAR2"
myvalue2

And now let’s go back to bash:

bash

…and check the value of MYVAR2:

echo "$MYVAR2"

This time, no value is reported, because the variable was not «exported» to the subshell. So, when you are using csh, if you want environment variables to remain local to only the current shell, use set. If you want them to carry over to subshells as well, use setenv.

Виды переменных окружения

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

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

Имя Описание
HOME Определяет путь к домашнему каталогу текущего пользователя
PWD Определяет текущий активный каталог
OLDPWD Предыдущий активный каталог
SHELL Определяет программу-командную оболочку
TERM Содержит имя текущей запущенной программы-терминала
PAGER Определяет программу для постраничного вывода страниц справочных руководств
EDITOR Определяет программу для редактирования текстовых файлов
VISUAL Определяет программу для редактирования текстовых файлов с расширенными возможностями (vim, emacs)
MAIL Определяет путь к каталогу, в котором должны храниться файлы входящей электронной почты.
BROWSER Определяет веб-браузер, запускаемый по-умолчанию
ftp_proxy

http_proxy

Определяют, соответственно адреса для прокси-серверов по FTP и HTTP протоколам
MANPATH
Определяет каталог, в котором содержатся подкаталоги, содержащие man-страницы справочных руководств системной справки для команды man

INFODIR
Определяет список каталогов для поиска info-страниц для команды info

TZ
Определяет временную зону. Доступные временные зоны хранятся в /usr/share/zoneinfo

Системные переменные

Согласно стандартам Linux переменные окружения для организации системной среды хранятся в нескольких файлах:

  • /etc/bash.bashrc – хранение переменных для командных оболочек;
  • /etc/profile – хранение переменных для интерактивных оболочек;
  • /etc/environment – переменные из этого файла используются модулем

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

Пользовательские переменные

Для систем, ориентированных на многопользовательский доступ, например на хостинговых площадках, конкретному пользователю полезно иметь возможность гибко настраивать своё собственное рабочее окружение, создавая новые переменные или дополняя их новыми значениями. К примеру, владельцу сайта, для его виртуального хоста, обслуживающего сайт на CMS Drupal, захотелось установить утилиту drush, которая облегчает и ускоряет обслуживание CMS. В этом случае достаточно после локальной установки (в каком-нибудь подкаталоге домашнего каталога) drush, дополнить переменную PATH значением, содержащим путь к утилите drush в файле

/.bashrc. В результате командная оболочка сможет запускать команду drush для данного пользователя.

По стандартам соглашений для Linux-систем конфигурация для пользовательского окружения должна храниться в следующих файлах:

/.bashrc – для хранения параметров инициализации выбранной командной оболочки для пользователя;

/.profile – для инициализации доступных пользователю командных оболочек;

/.pam_environment – для использования модулем

Временные или переменные сеанса

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

Или же устанавливать их вручную командой export.

How the Environment and Environmental Variables Work

Every time a shell session spawns, a process takes place to gather and compile information that should be available to the shell process and its child processes. It obtains the data for these settings from a variety of different files and settings on the system.

Basically the environment provides a medium through which the shell process can get or set settings and, in turn, pass these on to its child processes.

The environment is implemented as strings that represent key-value pairs. If multiple values are passed, they are typically separated by colon (:) characters. Each pair will generally look something like this:

<pre>
<span class=“highlight”>KEY</span>=<span class=“highlight”>value1</span>:<span class=“highlight”>value2<span>:<span class=“highlight”>…<span>
</pre>
If the value contains significant white-space, quotations are used:
<pre>
<span class=“highlight”>KEY</span>=“<span class=»highlight”>value with spaces</span>“
</pre>

The keys in these scenarios are variables. They can be one of two types, environmental variables or shell variables.

Environmental variables are variables that are defined for the current shell and are inherited by any child shells or processes. Environmental variables are used to pass information into processes that are spawned from the shell.

Shell variables are variables that are contained exclusively within the shell in which they were set or defined. They are often used to keep track of ephemeral data, like the current working directory.

By convention, these types of variables are usually defined using all capital letters. This helps users distinguish environmental variables within other contexts.

Примеры

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

DE содержит имя окружения рабочего стола (Desktop Environment). xdg-open использует это значение для выбора наиболее удобного приложения для открытия файлов, которое предоставляет окружение. Для использования этой возможности может потребоваться установить некоторые пакеты. Для GNOME необходимо установить libgnomeAUR; в Xfce — exo. Типичные значения переменной окружения: gnome, kde, xfce, lxde и mate.

Переменная окружения должна быть экспортирована перед запуском оконного менеджера, например:
~/.xinitrc
export DE="xfce"
exec openbox
Это позволит 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, необходимо указывать полный путь к файлу, например /bin/ls.

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

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

PWD содержит путь к рабочему каталогу.

OLDPWD содержит путь к предыдущему рабочему каталогу, то есть, значение PWD перед последним вызовом cd.

SHELL содержит имя текущей командной оболочки, например, bash.

TERM содержит имя запущенной программы-терминала, например xterm.

PAGER указывает команду для запуска программы постраничного просмотра содержимого текстовых файлов, например, /bin/less.

EDITOR содержит команду для запуска программы для редактирования текстовых файлов, например /usr/bin/nano. Также можно задать специальную команду, которая будет выбирать редактор в зависимости от окружения, например, gedit в X или nano в терминале, как в этом примере:

export EDITOR="$(if ]; then echo 'gedit'; else echo 'nano'; fi)"

VISUAL позволяет указать имя продвинутого текстового редактора для более сложных задач, например, редактирования почты. Это могут быть vi, vim, emacs и т. д.

MAIL содержит путь к каталогу, где сохраняется входящая почта. Обычно имеет значение /var/spool/mail/$LOGNAME.

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

if ; then
    export BROWSER=firefox
else 
    export BROWSER=links
fi

ftp_proxy и http_proxy содержат адреса прокси-серверов для протоколов FTP и HTTP соответственно, например:

ftp_proxy="ftp://192.168.0.1:21"
http_proxy="http://192.168.0.1:80"

MANPATH содержит список каталогов, которые использует man для поиска man-страниц. Стандартным значением является /usr/share/man:/usr/local/share/man.

INFODIR, аналогично MANPATH, содержит список каталогов, в которых команда info производит поиск info-страниц. Стандартным значением является /usr/share/info:/usr/local/share/info.

TZ может использоваться для установки временной зоны. Доступные временные зоны можно найти в /usr/share/zoneinfo/, например TZ=»/usr/share/zoneinfo/Pacific/Fiji».

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Adblock
detector