Удаление переменных среды Linux

04.01.2022 Автор: Mohira Абдукаримова

Если вы можете создать новую переменную среды, имеет смысл удалить и существующую переменную среды. Вы можете сделать это с помощью команды 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).

relojes imitacion replique montre replika klockor