команда env в linux

Фундаментальные основы Linux. Часть III. Раскрытие команд командной оболочкой

Глава 12. Переменные командной оболочки

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

Символ доллара ($)

Зависимость от регистра

Создание переменных

Кавычки

Команда set

Команда unset

Команда env

Команда export

Разграничения переменных

Несвязанные переменные

Практическое задание: переменные командной оболочки

1. Используйте команду echo для вывода строки «Привет», после которой должно следовать ваше имя. (Используйте переменную командной оболочки bash!)

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

5. Выведите список всех экспортируемых переменных командной оболочки.

8. Создайте две переменные и экспортируйте одну из них.

9. Выведите значение экспортированной переменной в дочерней интерактивной командной оболочке.

10. Создайте переменную и присвойте ей значение ‘Dumb’, после чего аналогичным образом создайте другую переменную с значением ‘do’. Используйте команду echo и две созданные переменные для вывода слова ‘Dumbledore’.

11. Найдите список экранированных с помощью обратного слэша управляющих символов на странице руководства командной оболочки bash. Добавьте управляющий символ в значение переменной PS1 для вывода времени в приветствии командной оболочки.

Корректная процедура выполнения практического задания: переменные командной оболочки

1. Используйте команду echo для вывода строки «Привет», после которой должно следовать ваше имя. (Используйте переменную командной оболочки bash!)

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

5. Выведите список всех экспортируемых переменных командной оболочки.

8. Создайте две переменные и экспортируйте одну из них.

9. Выведите значение экспортированной переменной в дочерней интерактивной командной оболочке.

10. Создайте переменную и присвойте ей значение ‘Dumb’, после чего аналогичным образом создайте другую переменную с значением ‘do’. Используйте команду echo и две созданные переменные для вывода слова ‘Dumbledore’.

11. Найдите список экранированных с помощью обратного слэша управляющих символов на странице руководства командной оболочки bash. Добавьте управляющий символ в значение переменной PS1 для вывода времени в приветствии командной оболочки.

Источник

Учебное пособие по команде env в Linux для начинающих (5 примеров)

Главное меню » Операционная система Linux » Учебное пособие по команде env в Linux для начинающих (5 примеров)

команда env в linux

Но прежде чем мы это сделаем, стоит отметить, что все команды и инструкции, упомянутые в данном руководстве, были протестированы на оболочке Bash, работающие на Ubuntu 16.04 LTS.

Команда env в Linux

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

И вот что страница man говорит о env:

Примеры должны дать вам лучшее представление о том, как эта команда работает:

Q1. Как получить доступ ко всем переменным окружения, используя команду env?

Bash среда, как вы уже знаете, состоит из записей VARNAME = VALUE. Чтобы получить доступ ко всем переменным окружения, а также значения, связанные с ними, выполните команду env без опции.

Вот вывод из приведенных выше команд в нашем случае:

Q2. Как временно изменить окружающую среду с помощью env?

Ключевая особенность env предлагает возможность временно изменить условия для процесса. Например, мы создали небольшой исполняемый процесс который отображает значение переменной окружения USER при выполнении.

Вот вывод в обычном сценарии:

Теперь, то что мы сделали, мы использовали команду ENV временно изменить значение переменной окружения USER c «destroyer» на «HTF» для исполняемого процесса. Ниже приводится команда, которую мы использовали в этом случае:

А вот выход производится в этом случае:

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

Q3. Как сделать, чтобы процесс игнорировал существующую среду с помощью env?

Если вы хотите, вы можете также сделать, чтобы процесс игнорировал существующую/унаследованную среду, и начать с пустой вместо этого. Это может быть сделано с помощью вариант -i или –ignore-environment.

Q4. Как сделать при помощи команды env использовать NUL вместо символа новой строки при выходе?

В первом примере выше, был вывод строк, полученные с помощью команды env разделяются символом новой строки. Тем не менее, если вы хотите, вы можете сделать env использовать символ NUL как разделитель. Эта функция может быть доступна с помощью опции –null в командной строке.

Ниже приведен пример экрана:

Q5. Как узнать ошибку, основываясь на состоянии команды вывода env?

Команда env производит следующие коды вывода: 0, 125, 126 и 127. Ниже приведены описания ошибок, связанных с ними:

В этом случае, если вы получите код ошибки, кроме упомянутых выше, то это состояние вывода возвращается в процессе/команде, которая была выполнена в модифицированной среде.

Вывод

Если вы полный новичок командной строки, есть вероятность, что вы не будете требовать этого инструмента на ежедневной основе. Тем не менее, это не значит, что это не стоит знать – на самом деле, env помогает во многих ситуациях. Примеры, которыми мы поделились в этой статье достаточно, чтобы дать вам понимание команды. Для получения дополнительной информации, используйте страницу man, или лучше, выполните следующую команду:

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Источник

Как читать и определять переменные окружения и оболочки на Linux

команда env в linux

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

Введение

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

Место, в котором оболочка держит пути всех этих настроек, называется окружением. Окружение — это место, которое оболочка определяет каждый раз, когда запускается сессия. В ней заключены переменные, созданные свойствами системы.

Как работает окружение и его переменные

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

Окружение реализовано как строка, состоящая из пары ключ-значение. Если определяется несколько значений, то они последовательно разделены знаком двоеточия. Каждая пара будет выглядеть как:

Если значение содержит пробелы, тогда используют кавычки

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

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

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

По правилам — эти типы переменных определяются, используя заглавные символы. Эта особенность помогает пользователям определять контекст употребления переменных.

Вывод переменных оболочки и окружения

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

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

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

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

Это были переменные окружения, но выглядят как переменные консольной оболочки.

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

Отображение будет до сих пор включать несколько переменных окружения, в связи с тем фактом, что set команда выводит значения в кавычках, в то время как команды printenv и env показывают значения, опуская их.

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

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

Общие переменные окружения и консольной оболочки

Некоторые переменные окружения и оболочки очень полезны и к ним часто обращаются. Здесь перечислены общие переменные окружения, которые зачастую используются:

TERM: указывает тип терминала, который эмулируется, когда запускается консольная оболочка. Могут эмулироваться различные терминалы для необходимых операционных требований.

USER: имя текущего пользователя оболочки.

PWD: переменная отображает значение текущей рабочей директории.

MAIL: отображает электронную почту текущего пользователя.

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

LANG: текущий язык и локализационные настройки, включая кодировку символов.

HOME: текущая домашняя директория пользователя.

_: отображает вывод последней запущенной команды.

В дополнение к этим переменным окружения, имеются некоторые переменные оболочки, которые также будут часто встречаться:

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

HISTFILESIZE: количество линий, хранящиеся в файле истории набранных команд.

HISTSIZE: количество линий, которые можно хранить в памяти.

HOSTNAME: имя компьютера системы на данный момент.

IFS: внутренний разделитель поля в командной строке. По умолчанию — это пробел.

PS1: строка приглашения на ввод. Эта переменная используется для того, чтобы определить, как будет выглядеть эта строка. Еще есть вторая строка PS2 которая используется, когда команда многострочная.

UID: идентификатор текущего пользователя.

Установка переменных окружения и оболочки

Для лучшего понимания различий между двумя видами переменных и представления синтаксиса их определения, мы покажем примеры этого процесса.

Создание переменной оболочки

Определение этой переменной будет происходить в пределах текущей сессии консольной оболочки.

Кавычки здесь используются, поскольку значение переменной содержит пробел. В дальнейшем будут использоваться одинарные кавычки — это позволит сделать так, что особые знаки в bash будут правильно отображаться.

Определенная выше переменная теперь доступна в текущей сессии, но в дочернем процессе она будет отсутствовать. Увидеть ее можно при помощи команды grep на вывод set :

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

Создание переменной окружения

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

Если создать новую дочернюю сессию, то можно увидеть, что в ней также существует эта переменная:

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

Отвязка переменный

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

Теперь, если посмотреть в окружение, то удаленная переменная там будет отсутствовать.

При этом она до сих пор существует в переменной оболочки:

Если возникает потребность окончательно сделать отвязку переменной из оболочки и окружения, то можно применить команду unset :

Проверить результат команды можно с помощью echo :

Отсутствует какое-либо возвращаемое значение, потому что переменная была отвязана.

Установка переменных окружения по логину

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

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

Различие между логин, не-логин, интерактивной и не-интерактивной сессией оболочки

Bash оболочка читает различные конфигурационные файлы в зависимости от того, какая сессия запущена.

Логин-сессия оболочки запускается по аутентификации пользователя. Если пользователь входит в сессию терминала или через SSH и аутентифицируется, тогда эта сессия оболочки будет определена как логин-оболочка.

Если начинается новая сессия bash-оболочки в пределах аутентифицированной сессии, подобно вызову команды bash из консоли, тогда такая оболочка определяется без логина и сразу запускается.

Помимо этих типов сессий, существуют интерактивный и не-интерактивный подход. Первый прикрепляется к терминалу, второй же — наоборот.

Таким образом сессии оболочки могут различаться по этим двум типам.

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

В независимости от того, какая сессия определена как логин или не-логин, существуют некоторые заявления, по которым происходит инициализация сессии оболочки.

Читаются исключительно файлы, которые располагаются в

В не-логин сессии оболочка читает файл /etc/bash.bashrc и пользовательский

/.bashrc файл для построения своего окружения.

Не-интерактивные оболочки читают переменную окружения под названием BASH_ENV и читают указанный файл, чтобы определить новое окружение.

Реализация переменных окружения

Как можно увидеть выше, существуют различные отдельные файлы для настроек.

Это обеспечивает гибкость, которая может помочь в особых ситуациях, где будут необходимы конкретные настройки для логин и не-логин оболочки. Хотя, обычно, настройки одинаковы в обоих ситуациях.

Большинство Linux-дистрибутивов производят конфигурацию файлов к источнику не-залогиненых конфигурационных файлов. Это значит, что можно определять окружение переменных внутри них. И они будут прочитаны в обоих случаях.

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

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

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

Заключение

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

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

Источник

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

Обновл. 23 Окт 2021 |

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

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

На этом уроке мы научимся работать с переменными окружения и оболочки.

Переменные окружения и переменные оболочки

Переменные можно разделить на две основные категории:

Переменные окружения (или «переменные среды») — это переменные, доступные в масштабах всей системы и наследуемые всеми дочерними процессами и оболочками.

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

Все переменные имеют следующий формат:

KEY=значение1
KEY=»Какое-то другое значение»
KEY=значение1:значение2

При этом также следует придерживаться определенных правил:

Имена переменных чувствительны к регистру, поэтому переменные окружения должны иметь имена в верхнем регистре.

Вокруг символа = не должно быть пробелов.

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

команда env — позволяет запускать другую программу в пользовательском окружении без изменения в текущем окружении. При использовании без аргумента выведет список переменных текущего окружения;

команда printenv — выводит список всех переменных окружения (или какую-то отдельно заданную переменную);

команда set — устанавливает переменные оболочки. При использовании без аргумента выведет список всех переменных, включая переменные окружения и переменные оболочки, а также функции оболочки;

команда unset — удаляет переменные оболочки и переменные окружения;

команда export — создает переменную окружения.

Поиск и вывод переменных окружения

В результате вы увидите путь к домашнему каталогу текущего пользователя:

команда env в linux

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

команда env в linux

Если вы запустите команду printenv или env без каких-либо аргументов, то они покажут список всех переменных окружения:

команда env в linux

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

USER — текущий пользователь.

PWD — текущая директория.

HOME — домашняя директория текущего пользователя.

SHELL — путь к оболочке текущего пользователя (например, bash или zsh).

LOGNAME — имя пользователя, используемое для входа в систему.

PATH — пути к каталогам, в которых будет производиться поиск вызываемых команд. При выполнении команды система будет проходить по данным каталогам в указанном порядке и выберет первый из них, в котором будет находиться исполняемый файл искомой команды.

LANG — текущие настройки языка и кодировки.

TERM — тип текущего эмулятора терминала.

MAIL — место хранения почты текущего пользователя.

LS_COLORS — задает цвета, используемые для выделения объектов (например, различные типы файлов в выводе команды ls будут выделены разными цветами).

Наиболее распространенные переменные оболочки:

BASHOPTS — список задействованных параметров оболочки, разделенных двоеточием.

BASH_VERSION — версия запущенной оболочки bash.

COLUMNS — количество столбцов, которые используются для отображения выходных данных.

HISTFILESIZE — максимальное количество строк для файла истории команд.

HISTSIZE — количество строк из файла истории команд, которые можно хранить в памяти.

HOSTNAME — имя текущего хоста.

IFS — внутренний разделитель поля в командной строке (по умолчанию используется пробел).

PS1 — определяет внешний вид строки приглашения ввода новых команд.

PS2 — вторичная строка приглашения.

UID — идентификатор текущего пользователя.

Команды printenv и env выводят только переменные окружения. Если вы хотите получить список всех переменных, включая переменные (и функции) оболочки, то можете использовать команду set :

команда env в linux

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

$ printenv | grep [ИМЯ_ПЕРЕМЕННОЙ]

Ниже представлен пример поиска переменных, в названии которых содержится строка USER :

команда env в linux

команда env в linux

Установка переменных оболочки

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

команда env в linux

команда env в linux

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

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

Установка переменных окружения

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

Для создания переменной окружения экспортируем нашу недавно созданную переменную оболочки:

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

команда env в linux

На этот раз, если вы попытаетесь отобразить переменную в новой оболочке, получите её значение:

Вы также можете использовать и следующую конструкцию для создания переменной окружения:

$ export MY_NEW_VAR=»My New Var»

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

Как сделать переменные окружения постоянными?

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

Чтобы установить постоянную переменную окружения для текущего пользователя, откройте файл .bashrc:

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

команда env в linux

Сохраните и закройте файл. Изменения будут применены после перезапуска оболочки. Если вы хотите применить изменения во время текущего сеанса, то используйте команду source :

Чтобы задать постоянные переменные окружения для всех пользователей, создайте .sh-файл в каталоге /etc/profile.d:

$ sudo nano /etc/profile.d/[имя_файла].sh

Синтаксис добавления переменных в файл такой же, как и в случае с файлом .bashrc:

команда env в linux

Сохраните и закройте файл. Изменения будут применены при следующем входе в систему.

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

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

команда env в linux

Заключение

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

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

Существует множество других распространенных сценариев, в которых вам нужно будет прочитать или изменить параметры/данные вашего окружения или оболочки. Теперь вы знаете как это можно сделать.

Источник

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

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