Удаление переменных среды Linux
04.01.2022Если вы можете создать новую переменную среды, имеет смысл удалить и существующую переменную среды. Вы можете сделать это с помощью команды unset. Ссылаясь на переменную среды в команде unset, помните, что нельзя использовать знак доллара:
Может быть сложно вспомнить, когда использовать, а когда не использовать знак доллара с переменными среды. Просто запомните: если вы что-то делаете с переменной, используйте знак доллара. Если вы что-то делаете с переменной, не используйте знак доллара. Исключением из этого правила является использование printenv для отображения значения переменной.
При работе с глобальными переменными среды все становится немного сложнее. Если вы находитесь в дочернем процессе и отключили глобальную переменную среды, она применяется только к дочернему процессу. Глобальная переменная среды по-прежнему доступна в родительском процессе:
Как и при изменении переменной, вы не можете отключить ее в дочерней оболочке и сделать так, чтобы переменная не была установлена в родительской оболочке.
Установка переменной среды PATH
Когда вы вводите внешнюю команду в CLI оболочки, оболочка должна выполнить поиск в системе, чтобы найти программу. Переменная среды PATH определяет каталоги, в которых она ищет команды и программы. В этой системе Ubuntu Linux переменная среды PATH выглядит так:
Каталоги в PATH разделяются двоеточиями. И это показывает, что существует девять каталогов, в которых оболочка ищет команды и программы.
Если расположение команды или программы не включено в переменную PATH, оболочка не может найти ее без абсолютной ссылки на каталог. Если оболочка не может найти команду или программу, она выдает сообщение об ошибке:
Проблема в том, что иногда приложения помещают свои исполняемые программы в каталоги, которых нет в переменной среды PATH. Уловка состоит в том, чтобы гарантировать, что ваша переменная среды PATH включает все каталоги, в которых находятся ваши приложения.
Некоторые построители сценариев используют команду env в качестве первой строки в сценарии оболочки Bash, как показано ниже: #! /Usr/bin/env bash. Преимущество этого метода заключается в том, что утилита env ищет программу оболочки bash в каталогах $PATH, что делает сценарий более переносимым для других дистрибутивов Linux.
Добавив каталог в переменную среды PATH, теперь вы можете выполнять свою программу из любого места в структуре виртуальных каталогов:
Если вы хотите, чтобы местоположение вашей программы было доступно под-оболочкам, обязательно экспортируйте измененную переменную среды PATH.
Изменения в переменной PATH сохраняются только до выхода из системы или перезагрузки системы. Изменения непостоянны. В следующем разделе вы увидите, как сделать изменения в переменных среды постоянными.
Поиск переменных системного окружения
Система Linux использует переменные среды для многих целей. Теперь вы знаете, как изменять системные переменные среды и создавать свои собственные переменные. Уловка заключается в том, как сделать эти переменные среды постоянными.
Когда вы запускаете оболочку Bash, войдя в систему Linux, по умолчанию Bash проверяет несколько файлов на наличие команд. Эти файлы называются файлами запуска или файлами среды. Какие файлы запуска обрабатывает Bash, зависит от метода, который вы используете для запуска оболочки Bash. Вы можете запустить оболочку Bash тремя способами:
- Как оболочка входа по умолчанию во время входа в систему
- Как интерактивная оболочка, которая запускается путем создания подоболочки
- В качестве неинтерактивной оболочки для запуска скрипта
В следующих разделах описываются файлы запуска, которые оболочка Bash выполняет в каждом из этих методов запуска.
Понимание процесса оболочки входа в систему
Когда вы входите в систему Linux, оболочка Bash запускается как оболочка входа. Оболочка входа в систему обычно ищет пять разных файлов запуска для обработки команд из:
- /etc/profile
- $HOME/.bash_profile
- $HOME/.bashrc
- $HOME/.bash_login
- $HOME/.profile
Файл /etc/profile является основным файлом запуска по умолчанию для оболочки Bash в системе. Все пользователи системы запускают этот файл запуска при входе в систему.
Имейте в виду, что некоторые дистрибутивы Linux используют подключаемые модули аутентификации (PAM). В этом случае перед запуском оболочки Bash обрабатываются файлы PAM, в том числе те, которые могут содержать переменные среды. Примеры файлов PAM включают файл /etc/environment и файл $HOME/.pam_environment.
Остальные четыре файла запуска специфичны для каждого пользователя, расположены в домашнем каталоге ($HOME) и могут быть настроены в соответствии с требованиями отдельного пользователя. Давайте посмотрим на эти файлы более внимательно.
Просмотр файла /etc/profile
Файл /etc/profile является основным файлом запуска по умолчанию для оболочки Bash. Каждый раз, когда вы входите в систему Linux, Bash сначала выполняет команды из файла запуска /etc/profile. Различные дистрибутивы Linux помещают в этот файл разные команды. В этой системе Ubuntu Linux файл выглядит так:
Файл /etc/profile каждого дистрибутива имеет разные настройки и команды. Например, обратите внимание, что в файле /etc/profile этого дистрибутива Ubuntu упоминается файл с именем /etc/bash.bashrc. Он содержит системные переменные среды.
Однако в указанном файле /etc/profile этого следующего дистрибутива CentOS файл /etc/bash.bashrc не вызывается. Также обратите внимание, что он устанавливает и экспортирует некоторые системные переменные среды (HISTSIZE; HOSTNAME) внутри себя:
$ cat /etc/profile
# /etc/profile
# System wide environment and startup programs, for login setup
# Functions and aliases go in /etc/bashrc
# It’s NOT a good idea to change this file unless you know what you
# are doing. It’s much better to create a custom.sh shell script in
# /etc/profile.d/ to make custom changes to your environment, as this
# will prevent the need for merging in future updates.
pathmunge () {
case ‘:${PATH}:’ in
*:’$1′:*)
;;
*)
if [ ‘$2’ = ‘after’ ] ; then
PATH=$PATH:$1
else
PATH=$1:$PATH
fi
esac
}
if [ -x /usr/bin/id ]; then
if [ -z ‘$EUID’ ]; then
# ksh workaround
EUID=`id -u`
UID=`id -ru`
fi
USER=’`id -un`’
LOGNAME=$USER
MAIL=’/var/spool/mail/$USER’
fi
# Path manipulation
if [ ‘$EUID’ = ‘0’ ]; then
pathmunge /usr/sbin
pathmunge /usr/local/sbin
else
pathmunge /usr/local/sbin after
pathmunge /usr/sbin after
fi
HOSTNAME=`/usr/bin/hostname 2>/dev/null`
HISTSIZE=1000
if [ ‘$HISTCONTROL’ = ‘ignorespace’ ] ; then
export HISTCONTROL=ignoreboth
else
export HISTCONTROL=ignoredups
fi
export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE HISTCONTROL
# By default, we want umask to get set. This sets it for login shell
# Current threshold for system reserved uid/gids is 200
# You could check uidgid reservation validity in
# /usr/share/doc/setup-*/uidgid file
if [ $UID -gt 199 ] && ‘`id -gn`’ = ‘`id -un`’ ]; then
umask 002
else
umask 022
fi
for i in /etc/profile.d/*.sh /etc/profile.d/sh.local ; do
if [ -r ‘$i’ ]; then
if [ ‘${-#*i}’ != ‘$-‘ ]; then
. ‘$i’
else
. ‘$i’>/dev/null
fi
fi
done
unset i
unset -f pathmunge
if [ -n ‘${BASH_VERSION-}’ ] ; then
if [ -f /etc/bashrc ] ; then
# Bash login shells run only /etc/profile
# Bash non-login shells run only /etc/bashrc
# Check for double sourcing is done in /etc/bashrc.
. /etc/bashrc
fi
fi
$
Файлы / etc / profile обоих дистрибутивов используют определенную функцию. Это оператор for, который выполняет итерацию по любым файлам, расположенным в каталоге /etc/profile.d. Это предоставляет системе Linux место для размещения файлов запуска для конкретных приложений и / или настроенных администратором, которые выполняются оболочкой при входе в систему. В этой системе Ubuntu Linux следующие файлы находятся в каталоге /etc/profile.d каталог:
Вы можете видеть, что эта система CentOS имеет еще несколько файлов в /etc/profile.d:
Обратите внимание, что несколько файлов связаны с определенными приложениями в системе. Большинство приложений создают два файла запуска — один для оболочки Bash (с расширением .sh) и один для оболочки C (с расширением .csh).