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

Когда мы входим в систему, запускается программа 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 для дочерних процессов этой оболочки.