В чем разница между .bashrc и .profile в Linux?
Опубликовано: 2022-09-29При входе в систему с Linux под управлением Bash считываются определенные файлы. Они настраивают среду вашей оболочки. Но какие файлы читаются и когда, может сбить с толку. Вот что происходит на самом деле.
Различные типы оболочки
Среда, которую вы получаете при запуске оболочки, определяется настройками, хранящимися в файлах конфигурации или профилей . Они содержат информацию, которая устанавливает такие вещи, как ваши цвета текста, вашу командную строку, псевдонимы и путь, который ищется для исполняемых файлов, когда вы вводите имя программы.
Эти настройки хранятся в нескольких разных файлах — в разных местах файловой системы. Но прежде чем мы перейдем к рассмотрению того, какие файлы считываются при запуске оболочки, нам нужно четко определить, какой тип оболочки вы используете.
Оболочка входа — это оболочка, в которую вы входите. Когда вы загружаете свой компьютер и входите в систему, под вашей графической средой рабочего стола появляется оболочка входа в систему. Если вы подключитесь к другому компьютеру через SSH-соединение, вы также войдете в оболочку входа.
Тип оболочки, которую вы получаете, когда открываете окно терминала, — это оболочка без входа в систему. Вам не нужно аутентифицироваться, чтобы запустить оболочку, когда вы уже вошли в систему. Оболочки для входа и без входа в систему являются интерактивными оболочками. Вы используете их, вводя инструкции, нажимая клавишу «Ввод» и читая ответы на экране.
Есть и неинтерактивные оболочки. Это тип оболочек, которые запускаются при выполнении скрипта. Скрипт запускается в новой оболочке. Шебанг #!/bin/bash
в верхней части скрипта указывает, какую оболочку следует использовать.
#!/бин/баш echo -e "Привет, мир!\n"
Этот скрипт будет запущен в неинтерактивной оболочке Bash. Обратите внимание, что даже если оболочка не интерактивна, сам сценарий может быть интерактивным. Этот сценарий выводит данные в окно терминала и может так же легко принимать пользовательский ввод.
СВЯЗАННЫЕ С: 9 примеров сценариев Bash, которые помогут вам начать работу в Linux
Неинтерактивные оболочки
Неинтерактивные оболочки не читают никаких файлов профилей при запуске. Они наследуют переменные среды, но ничего не знают о псевдонимах, например, независимо от того, определены ли они в командной строке или в файле конфигурации.
Вы можете проверить, является ли оболочка интерактивной, просмотрев параметры, которые были переданы ей в качестве параметров командной строки. Если в параметрах стоит «i», оболочка интерактивная. Специальный параметр Bash $-
содержит параметры командной строки для текущей оболочки.
[[ $- == *i* ]] && echo 'Интерактивный' || echo 'Неинтерактивный'
Давайте создадим псевдоним с именем xc
, который будет означать «кошка». Мы также проверим, установлена ли у нас $PATH
.
псевдоним xc=кот
эхо $PATH
Мы попробуем получить доступ к обоим из этого небольшого скрипта. Скопируйте этот скрипт в редактор и сохраните его как «int.sh».
#!/бин/баш хс ~/text.dat эхо "Переменная=$PATH"
Нам нужно будет использовать chmod
, чтобы сделать скрипт исполняемым.
chmod +x int.sh
Запустим наш скрипт:
./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 фи
Это позволяет легко перемещать псевдонимы и функции между компьютерами. Вам просто нужно добавить приведенные выше строки в файл «~/.bashrc» на каждом компьютере и скопировать файлы, содержащие ваши псевдонимы и функции оболочки, в свой домашний каталог на каждом компьютере.
Это означает, что вам не нужно копировать все определения из «~/.bashrc» на одном компьютере в файлы «~/.bashrc» на каждом из других компьютеров. Это также лучше, чем копировать весь файл «~/.bashrc» между компьютерами, особенно если они используют Bash в разных дистрибутивах.
В итоге
Файлы, о которых вам действительно нужно знать:
- /etc/profile : Общесистемные настройки конфигурации. Используется оболочками входа в систему.
- ~/.bash_profile : используется для хранения настроек для отдельных пользователей. Используется оболочками входа в систему.
- ~/.bashrc : используется для хранения настроек для отдельных пользователей. Используется интерактивными оболочками без входа в систему. Также может вызываться из вашего файла «~/.bash_profile» или «~/.profile» для оболочек входа в систему.
Один из удобных способов — поместить свои личные настройки в «~/.bashrc» и убедиться, что ваш файл «~./bash_profile» вызывает ваш файл «~/.bashrc». Это означает, что ваши личные настройки хранятся в одном файле. Вы получите единую среду оболочки для входа в систему и без входа в систему. Сочетание этого с сохранением ваших псевдонимов и функций оболочки в несистемных файлах является изящным и надежным решением.