Поиск по сайту:

В чем разница между .bashrc и .profile в Linux?


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

Различные типы оболочки

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

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

Оболочка входа — это оболочка, в которую вы входите. Когда вы загружаете свой компьютер и входите в систему, под вашей графической средой рабочего стола появляется оболочка входа в систему. Если вы подключитесь к другому компьютеру через SSH-соединение, вы также войдете в оболочку входа.

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

Есть и неинтерактивные оболочки. Это тип оболочек, которые запускаются при выполнении скрипта. Скрипт запускается в новой оболочке. Шебанг #!/bin/bash в верхней части скрипта указывает, какую оболочку следует использовать.

#!/bin/bash

echo -e "Hello, World!\n"

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

Неинтерактивные оболочки

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

Вы можете проверить, является ли оболочка интерактивной, просмотрев параметры, которые были переданы ей в качестве параметров командной строки. Если в параметрах стоит «i», оболочка интерактивная. Специальный параметр Bash $- содержит параметры командной строки для текущей оболочки.

[[ $- == *i* ]] && echo 'Interactive' || echo 'Non-interactive'

Давайте создадим псевдоним с именем xc, который будет означать «кошка». Мы также проверим, установлена ли у нас переменная PATH.

alias xc=cat
echo $PATH

Мы попробуем получить доступ к обоим из этого небольшого скрипта. Скопируйте этот скрипт в редактор и сохраните его как «int.sh».

#!/bin/bash

xc ~/text.dat
echo "Variable=$PATH"

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

chmod +x int.sh

Запустим наш скрипт:

./int.sh

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

Интерактивные оболочки входа

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

На серверах без установленной среды рабочего стола вы входите непосредственно в интерактивную оболочку. Вы можете сделать то же самое на настольном компьютере, если вы выйдете из среды рабочего стола и получите доступ к терминалу. В GNOME это можно сделать с помощью комбинации клавиш Ctrl+Alt+F3. Чтобы вернуться в сеанс GNOME, нажмите комбинацию клавиш Ctrl+Alt+F2. Оболочка, к которой вы подключаетесь через SSH, также является оболочкой входа в систему.

Вызываемые файлы профиля и конфигурации можно задать с помощью переменных среды, поэтому они могут различаться от дистрибутива к дистрибутиву. Кроме того, не все файлы используются каждым дистрибутивом. В стандартной установке Bash интерактивные оболочки входа читают файл «/etc/profile». Это содержит общесистемные параметры конфигурации оболочки. Если они существуют, этот файл также считывает такие файлы, как «/etc/bash.bashrc» и «/usr/share/bash-completion/bash_completion».

Затем Bash ищет файл «~/.bash_profile». Если он не существует, Bash ищет файл «~/.bash_login». Если этот файл не существует, Bash пытается найти файл «.profile». Как только один из этих файлов найден и прочитан, Bash прекращает поиск. Так что в большинстве случаев «~/.profile» вообще вряд ли будет прочитан.

Часто вы найдете что-то подобное в вашем «~/.bash_profile» или, как своего рода, в вашем файле «~/.profile»:

# if running bash
if [ -n "$BASH_VERSION" ]; then
  # include .bashrc if it exists
  if [ -f "$HOME/.bashrc" ]; then
    . "$HOME/.bashrc"
  fi
fi

Это проверяет, что активной оболочкой является Bash. Если это так, он ищет файл «~/.bashrc» и читает его, если он найден.

Интерактивные оболочки без входа в систему

Интерактивная оболочка Bash без входа в систему читает «/etc/bash.bashrc», а затем читает файл «~/.bashrc». Это позволяет Bash иметь общесистемные и пользовательские настройки.

Это поведение можно изменить с помощью флагов компиляции при компиляции Bash, но встреча с версией Bash, которая не извлекает и не читает файл «/etc/bash.bashrc», является редким и специфическим обстоятельством.

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

Где вы должны поместить свой код конфигурации?

Лучшее место для размещения вашего личного кода настройки — файл «~/.bashrc». Ваши псевдонимы и функции оболочки могут быть определены в «~/.bashrc», и они будут прочитаны и доступны вам во всех интерактивных оболочках.

Если ваш дистрибутив не читает ваш «~/.bashrc» в оболочках входа в систему, а вы хотели бы, добавьте этот код в свой файл «~/.bash_profile».

# if running bash
if [ -n "$BASH_VERSION" ]; then
  # include .bashrc if it exists
  if [ -f "$HOME/.bashrc" ]; then
    . "$HOME/.bashrc"
  fi
fi

Модульность лучше

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

На нашем тестовом компьютере псевдонимы хранятся в файле с именем «.bash_aliases», а файл с именем «.bash_functions» содержит функции оболочки.

Вы можете прочитать их из своего файла «~/.bashrc» следующим образом:

# read in my aliases
if [ -f ~/.bash_aliases ]; then
  . ~/.bash_aliases
fi

# read in my shell functions
if [ -f ~/.bash_functions ]; then
  . ~/.bash_functions
fi

Это позволяет легко перемещать псевдонимы и функции между компьютерами. Вам просто нужно добавить приведенные выше строки в файл «~/.bashrc» на каждом компьютере и скопировать файлы, содержащие ваши псевдонимы и функции оболочки, в свой домашний каталог на каждом компьютере.

Это означает, что вам не нужно копировать все определения из «~/.bashrc» на одном компьютере в файлы «~/.bashrc» на каждом из других компьютеров. Это также лучше, чем копировать весь файл «~/.bashrc» между компьютерами, особенно если они используют Bash в разных дистрибутивах.

В итоге

Файлы, о которых вам действительно нужно знать:

  • /etc/profile: общесистемные настройки конфигурации. Используется оболочками входа в систему.
  • ~/.bash_profile: используется для хранения настроек для отдельных пользователей. Используется оболочками входа в систему.
  • ~/.bashrc: используется для хранения настроек для отдельных пользователей. Используется интерактивными оболочками без входа в систему. Также может вызываться из вашего файла «~/.bash_profile» или «~/.profile» для оболочек входа в систему.

Один из удобных способов — поместить свои личные настройки в «~/.bashrc» и убедиться, что ваш файл «~./bash_profile» вызывает ваш файл «~/.bashrc». Это означает, что ваши личные настройки хранятся в одном файле. Вы получите единую среду оболочки для входных и не входных оболочек. Сочетание этого с сохранением ваших псевдонимов и функций оболочки в несистемных файлах является изящным и надежным решением.