Загрузочные файлы среды окружения

Когда мы входим в систему, запускается программа bash и считывает конфигурационные скрипты, называемые загрузочными файлами. Они задают изначальные значения переменных среды, которые являются общими для всех пользователей. После считываются другие загрузочные файлы в домашней директории, задающие персональные настройки среды окружения. Точная последовательность зависит от того, как был начат сеанс работы с Linux Shell. Есть два типа: login shell и non-login shell.

Когда мы входим в систему с запросом логина и пароля от учетной записи, то это login shell.

Когда мы открываем окно командной строки в графическом интерфейсе, мы не вводим логин и пароль, а сразу получаем доступ к командной строке Linux — это non-login shell.

Login shell использует следующие загрузочные файлы:

  • /etc/profile — глобальный скрипт конфигурации, который используется для всех пользователей
  • ~/.bash_profile — персональный загрузочный файл пользователя. Может использоваться для расширения или изменения конфигурации заданной в глобальном скрипте
  • ~/.bash_login — используется при отсутствии ~/.bash_profile
  • ~/.profile — используется при отсутствии ~/.bash_profile и ~/.bash_login. Этот файл используется в системах на основе Debian, например в Ubuntu.

Non-login shell использует следующие загрузочные файлы:

  • /etc/bash.bashrc — глобальный скрипт конфигурации, который используется для всех пользователей
  • ~/.bashrc — персональный загрузочный файл пользователя. Может использоваться для расширения или изменения конфигурации заданной в глобальном скрипте

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

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

Наиболее важный файл ~/.bashrc. Non-login shell считывает его всегда. А также он обычно подключается для чтения в загрузочных файлах login shell.

Что такое загрузочный файл?

Посмотрим на содержание типичного файла .bash_profile. Он выглядит примерно так:

Строки, которые начинаются с символа «#» — комментарии. Они игнорируются оболочкой и предназначены только для человека. Первая интересная инструкция начинается на четвертой строке и состоит из кода:

Эта инструкция является условным оператором if, о котором подробно будет рассказано далее в разделе написания Shell-скриптов. А сейчас просто переведем конкретный фрагмент кода на русский язык:

С помощью данного кода login shell получается содержание файла «.bashrc». Следующая инструкция загрузочного файла делает что-то с переменной PATH.

Никогда не задумывались, откуда оболочка знает, где искать программы при вводе их имен в командной строке? Например, при вводе ls, оболочка не ищет по всему компьютеру, чтобы найти полный путь к программе /bin/ls. Вместо этого, она ищет в списке директорий, которые указаны в переменной среды окружения PATH.

Переменная PATH очень часто (но не всегда, в зависимости от дистрибутива) задается в загрузочном файле /etc/profile кодом:

Значение переменной PATH изменяется для добавления директории $HOME/bin в конец списка с помощью развертывания строк. Для демонстрации как это работает рассмотрим следующий пример:

Данная техника позволяет нам легко добавлять текст в конец содержания переменной.

Добавляя строку $HOME/bin в конец переменной окружения PATH, директория $HOME/bin добавляется в список директорий, в которых происходит поиск при вводе имени программы. Это значит, что когда мы захотим создать директорию внутри домашней директории для хранения личных программ, оболочка уже снабдила нас этой возможностью. Мы только должны назвать эту директорию bin и все готово.

В последней строке .bash_profile записана инструкция:

Команда export делает доступным содержание переменной PATH для дочерних процессов этой оболочки.

Окружающая среда

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

Что же такое окружающая среда?

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

Исследование среды

Чтобы посмотреть, что хранится в среде, можно воспользоваться командой set, которая встроена в bash, либо программой printenv. Команда set выведет и переменные оболочки и переменные окружения, а printenv только переменные окружения. Так как список содержания среды слишком длинный, то удобнее его перенаправить в программу less, которая позволит перемещаться по нему как при просмотре файла.

При выполнении этой команды мы получим примерно следующее.

Результат printenv внутри less

Мы видим список переменных окружения и их значения. Например, переменная с названием USER имеет значение «mikhail». С помощью printenv можно также получить значение только определенной переменной.

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

При выполнении этой команды результат будет примерно следующим.

Результат set внутри less

Также можно узнать содержание переменной с помощью команды echo и развертывания строк используя символ $ перед именем переменной.

Псевдонимы, они же aliases, также являются частью среды но не выводятся командами set или echo. Чтобы из увидеть можно воспользоваться командой alias.

Некоторые интересные переменные

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

  • DISPLAY — имя экрана при использовании графического пользовательского интерфейса. Обычно совпадает с «:0», что обозначает имя первого экрана, которое создана графическим интерфейсом X Server.
  • EDITOR — имя программы, которая используется для редактирования текста.
  • SHELL — имя программы, используемой как Linux Shell.
  • HOME — путь к домашней директории пользователя.
  • LANG — текущий язык и кодировка.
  • OLD_PWD — путь к предыдущей рабочей директории.
  • PAGER — имя программы, используемой для постраничного вывода текста.
  • PATH — разделенный двоеточием список директорий, используемый для поиска программы при вводе ее имени без указания полного пути
  • PS1 — строка приветствия 1. Определяет содержания строки приветствия Linux Shell.
  • PWD — путь к текущей рабочей директории
  • TERM — имя эмулятора терминала.
  • TZ — Текущий часовой пояс.
  • USER — имя пользователя.