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

Опубликовано: 2022-09-29
Ноутбук Linux с приглашением bash
Фатмавати Ачмад Заэнури/Shutterstock.com

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

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

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

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

Что именно происходит, когда вы включаете компьютер?
СВЯЗАННЫЕ С : Что именно происходит, когда вы включаете компьютер?

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

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

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

 #!/бин/баш

echo -e "Привет, мир!\n"

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

СВЯЗАННЫЕ С: 9 примеров сценариев Bash, которые помогут вам начать работу в Linux

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

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

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

 [[ $- == *i* ]] && echo 'Интерактивный' || echo 'Неинтерактивный' 

Тест Bash для определения интерактивных и неинтерактивных сеансов оболочки

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

 псевдоним xc=кот
 эхо $PATH 

Установка псевдонима и повторение значения $PATH

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

 #!/бин/баш

хс ~/text.dat
эхо "Переменная=$PATH"

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

 chmod +x int.sh 

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

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

 ./int.sh 

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

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

СВЯЗАННЫЕ С: Как установить переменные среды в Bash в Linux

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

Существует два типа интерактивных оболочек входа в систему. Одним из них является оболочка, которая позволяет вам войти в свой компьютер. На настольных компьютерах это обычно оболочка, лежащая в основе вашей среды рабочего стола. Независимо от того, используете ли вы оконную или мозаичную среду рабочего стола, что-то должно аутентифицировать вас в системе 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»:

 # если запущен bash
если [-n "$BASH_VERSION"]; тогда
  # включить .bashrc, если он существует
  если [-f "$HOME/.bashrc"]; тогда
    . "$HOME/.bashrc"
  фи
фи

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

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

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

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

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

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

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

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

 # если запущен bash
если [-n "$BASH_VERSION"]; тогда
  # включить .bashrc, если он существует
  если [-f "$HOME/.bashrc"]; тогда
    . "$HOME/.bashrc"
  фи
фи

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

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

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

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

 # читать в моих псевдонимах
если [-f ~/.bash_aliases]; тогда
  . ~/.bash_aliases
фи

# читать в моих функциях оболочки
если [-f ~/.bash_functions]; тогда
  . ~/.bash_functions
фи 
Как создавать псевдонимы и функции оболочки в Linux
СВЯЗАННЫЕ Как создавать псевдонимы и функции оболочки в Linux

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

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

В итоге

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

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

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