Где находится файл bash profile

Обновлено: 03.07.2024

Когда оболочка вызывается интерактивно с использованием параметра --login или когда она вызывается с помощью команды sh, командная оболочка считывает инструкции из файла /etc/profile . В этом файле обычно устанавливаются значения переменных PATH , USER , MAIL , HOSTNAME и HISTSIZE .

В некоторых системах в файле /etc/profile задается значение umask; в других системах в этом файле находятся ссылки на другие конфигурационные файлы, например:

  • на /etc/inputrc , общесистемный файл инициализации программы Readline, в котором можно настраивать реакцию клавиатуры;
  • на директорий /etc/profile.d , в котором находятся конфигурационные файлы, определяющие общую системную настройку некоторых конкретных программ.

В этом файле должны быть все настройки, которые вы хотите применить к пользовательской среде. Файл может выглядеть следующим образом:

В этом конфигурационном файле устанавливаются значения для некоторых основных переменных среды окружения, а также некоторые переменные, которые необходимы пользователю, запускающему в своем веб браузере поддержку языка Java и/или использующие Java-приложения. Смотрите раздел "Переменные".

Дополнительную информацию об условном операторе if, используемом в этом файле, смотрите в главе 7 "Условные инструкции"; в главе 9 "Повторяющиеся задания" обсуждаются циклы, использующие конструкцию for.

В исходных кодах Bash есть примеры файлов profile , предназначенные для общего или индивидуального использования. Но для того, чтобы эти файлы и пример файла, приведенный выше, работали в вашей среде, их надо модифицировать!

/etc/bashrc

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

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

Вы также можете обнаружить, что в файле /etc/profile в вашей системе хранятся настройки только командной оболочки и настройки программ, тогда как в файле /etc/bashrc хранятся общесистемные определения функций оболочки и алиасов. На файл /etc/bashrc/ > можно ссылаться из файла /etc/profile или из отдельных пользовательских файлов, предназначенных для инициализации командной оболочки.

В исходных кодах есть примеры файла bashrc , либо вы можете найти его копию в /usr/share/doc/bash-2.05b/startup-files . Ниже приведена часть файла bashrc , которая поставляется вместе с документацией по Bash:

Кроме алиасов общего назначения, в нем определяются алиасы, благодаря которым можно выполнять команды даже в тех случаях, когда при наборе команд делаются опечатки. Мы будем обсуждать алиасы в разделе "Создание и удаление алиасов". В этом файле есть функция pskill; функции будут подробно изучены в главе 11 "Функции".

Конфигурационные файлы индивидуальных пользователей

Первоначально у вас в вашем домашнем директории этих файлов может не быть, создайте их в случае необходимости.

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

Этот пользователь сконфигурировал использование символа Backspace для входа в другие операционные системы. Кроме того, выполняется чтение файлов .bashrc и .bash_login .

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

В случае, когда отсутствует файл

/.bash_profile , будет читаться этот файл.

Если отсутствуют файлы

/.bash_login , будет читаться файл

/.profile . В него можно поместить те же конфигурационные настройки, которые затем также будут доступны в других командных оболочках. Помните, что другие командные оболочки не могут понимать синтаксис Bash.

В настоящее время чаще пользуются командными оболочками, при входе в которые не нужна аутентификация, например, когда аутентификация уже выполнена в графическом терминале X. При открытии такого окна, пользователю не нужно указывать имя пользователя и пароль, проверка подлинности не выполняется. Когда это происходит, Bash ищет файл

/.bashrc , а поскольку на этот файл также делаются ссылки в файлах, которые читаются при входе в систему, это означает, что вам не нужно указывать одни и те же настройки в нескольких файлах.

В следующем пользовательском файле .bashrc определяется пара алиасов и после того, как будет прочитан общесистемный файл /etc/bashrc , устанавливаются значения переменных, используемых в конкретных программах:

Дополнительные примеры можно найти в пакете Bash. Помните, что чтобы файлы с примерами работали в вашей среде, в них нужно вносить изменения.

Алиасы рассматриваются в разделе "Алиасы".

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

Изменение конфигурационных файлов командной оболочки

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


Рис.3.1. Различные строки приглашения для различных пользователей

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

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

Обратите внимание, что source resourcefile это то же самое, что и .Resourcefile .

Если вы заблудились во всех этих конфигурационных файлах и обнаружили, что столкнулись с настройками, которые вам непонятны, воспользуйтесь инструкциями echo точно также, как и при отладке скриптов; смотрите раздел "Отладка скрипта по частям". Вы можете добавлять инструкции, например, следующим образом:

Я хочу добавить новые псевдонимы для моего .bash_profile файл, но я не могу найти этот файл.
Где это должно быть?

Это скрытый файл, расположенный в вашей домашней папке:

расширяется до вашего домашнего каталога. Если ваше имя пользователя user результат будет: /home/user/.bash_profile ).

Поскольку это скрытый файл, вы должны сделать его видимым. Для этого в Nautilus перейдите в меню "Вид" и отметьте "Показать скрытые файлы" (или нажмите сочетание клавиш Ctrl + H ).

Если вы используете Kubuntu с Dolphin, вы должны нажать Ctrl + . переключать видимость файлов.

/.bash_profile это не то место, где можно разместить псевдонимы и функции. Они должны войти в

Удобно поместить все ваши псевдонимы в

/.bash_aliases в домашнем каталоге пользователя. Это то, что предлагается в

/.bashrc файл в комментариях.

Вы обычно не имеете .bash_profile в Ubuntu вы также не должны создавать этот файл. Как говорит jpezz, он будет находиться в вашем домашнем каталоге в вашей системе Ubuntu, что

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

когда bash запускается как оболочка входа в систему, в WSL или иначе 1 , она запускает первый из .bash_profile , .bash_login , или же .profile который существует в вашем домашнем каталоге. Если у вас есть bash команды, которые вы хотите запускать при входе в систему, но только когда bash это ваша оболочка - вы можете положить их в .bash_profile , Но само существование .bash_profile помешает .profile от использования.

Итак, вы хотели бы источник .profile от .bash_profile при условии, что вы хотели, чтобы эти команды также выполнялись, что вы почти всегда делаете. Вы можете сделать это, поместив эту команду в .bash_profile :

/.profile Это хорошо.)

. Встроенный источник файла, то есть он запускает все команды из файла в текущей оболочке. Откройте интерактив bash оболочка и бег help . для дополнительной информации.

Причина, по которой вы обычно не имеете .bash_profile на Ubuntu, даже если у вас есть bash -конкретные команды, которые вы хотите запустить при входе в систему, заключается в том, что по умолчанию .profile файлы содержат код, который проверяет, является ли текущая оболочка bash , затем вызывает такие команды для запуска.

Есть еще один ответ на вопрос, где файлы, такие как .profile или же .bash_profile являются. Версии этих файлов по умолчанию существуют в /etc/skel каталог. Файлы в этом каталоге копируются в домашние каталоги Ubuntu при создании учетных записей пользователей в системе Ubuntu, включая учетную запись пользователя, которую вы создаете в процессе установки Ubuntu. Если вы посмотрите в этот каталог, вы заметите, что есть файл с именем .profile - а также некоторые другие файлы, такие как .bashrc - но нет файла с именем .bash_profile , Вот почему - или, действительно, как - нет .bash_profile существует в вашем домашнем каталоге Ubuntu, если вы сами его не создали.

Наконец, вы не должны помещать псевдонимы в .profile вообще не является .bash_profile хорошее место для них, как правильно говорит гейра. Это потому, что вы хотите, чтобы ваши псевдонимы работали в интерактивных оболочках, независимо от того, являются ли они оболочками входа в систему. Вместо этого определите свои псевдонимы в .bashrc или лучше, .bash_aliases (как указывает гостья), которое по умолчанию .bashrc источники. См. Как мне создать постоянный псевдоним Bash?

По умолчанию .profile файл проверит, если вы работаете .bash оболочка и источник .bashrc если ты:

Между тем по умолчанию .bashrc выйдет наверх без каких-либо действий, если будет работать в неинтерактивной оболочке, поэтому команды в нем не будут выполняться, если он получен .profile в неинтерактивной оболочке входа в систему и в других более неясных сценариях 2 :

Так что, если вы положите псевдонимы в .bashrc или в .bash_aliases вы получите их для интерактивных оболочек входа в систему (где .profile используется), а также интерактивные не входящие в систему оболочки (где .bashrc используется). Это то, что вы хотите. Просто не ставьте ничего выше проверки интерактивности, если только вы действительно не знаете, что делаете.

1 Этот ответ первоначально был написан для вопроса, связанного с WSL, но этот вопрос был закрыт как дубликат, и этот ответ также полностью применим здесь, поэтому я немного расширил его и вместо этого разместил здесь.

2 Когда bash обнаруживает, что он, вероятно, работает как начальная оболочка удаленного входа в систему, которая не является оболочкой входа в систему - например, когда вы используете ssh запустить одну команду на удаленном компьютере - он запускает команды из .bashrc , (См. 6.2 Файлы запуска Bash в руководстве по GNU Bash.)

Я не могу найти .bash_profile в Ubuntu 14.04 в моем /home/user каталоге. Я использовал ls -a команду, чтобы увидеть .bash_profile , но такого файла нет.

/.profile вместо этого.

Довольно часто отсутствует какой-либо файл конфигурации (или даже каталоги). В этом случае программное обеспечение, которое должно их читать, будет использовать конфигурацию по умолчанию и / или читать другие источники для получения конфигурации. Если вы хотите изменить несуществующий файл конфигурации, просто сначала создайте его.

Вы можете создать свой .bash_profile в Ubuntu, но тогда .profile не будет читаться.

Если мы читаем .profile содержание:

Так что используйте

.profile не работает для меня. Я должен был отредактировать .bashrc vim Использование .bash_profile не работает в Ubuntu. В качестве оболочки входа в систему с графическим интерфейсом используется Dash, а не Bash, поэтому bash_profile не читается. Если вы редактируете свой .profile, вам необходимо выйти и снова войти, чтобы увидеть изменения.

При вызове оболочки оболочки bash ищет свои конфигурационные файлы в следующем порядке:

После нахождения первого, он перестает искать других, поэтому, если есть .bash_profile в моем $HOME bash, не будет искать .bash_login и .profile больше.

Из этих трех имен файлов, Ubuntu по умолчанию использует, .profile вы можете переименовать его, .bash_profile если хотите:

Теперь , если мы открываем новую Баш оболочку , используя bash -l , su - $USER , sudo -u $USER -i или любые другие команды , которая работает Баш как шелл,

/.bash_profile получат источники.

Важно отметить:

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

Ubuntu использует в gdm3 качестве диспетчера отображения, если мы посмотрим: /etc/gdm3/Xsession мы видим, что ни один из файлов не будет получен, кроме .profile :

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

Я думаю, что лучший вариант - создать символическую ссылку на .profile :

Теперь ваши данные живут .profile , gdm ничего не пропускают, bash загружает, .bash_profile что на самом деле .profile , и редактируя каждую из них, вы получаете тот же результат.



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

$ fortune
No amount of careful planning will ever replace dumb luck.

(приложение fortune может быть не установлено, запустите установку в пакетном менеджере вашего дистрибутива, например apt-get install fortune — прим. пер.)

.bash_profile

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

fortune

Попробуйте выйти из системы и зайдите обратно. До запуска менеджера дисплея, такого как например xdm, gdm или kdm, вы увидите веселое приветствие, когда войдете:

Оболочка входа.

При запуске bash проходит файл .bash_profile в вашей домашней директории, запуская каждую строчку как будто набирая ее в командной строке. Это называется интерпретацией файла (file sourcing).

Bash может работать различным образом в зависимости от того, как он запущен. Если он запущен как оболочка входа, то будет работать, как описано выше — сначала обработая общесистемный /etc/profile, а затем ваш личный

Существуют два способа запуска bash в качестве оболочки входа. Первый используется когда вы впервые входите в систему: bash запускается с именем процесса -bash. Можно увидеть это в выводе списка процессов:

$ ps u
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
chouser 404 0.0 0.0 2508 156 tty2 S 2001 0:00 -bash

Вы, вероятно, увидите более длинный список, но но в нем будет как минимум одна строка с чертой перед именем вашей оболочки, как -bash в примере выше. Эта черта используется оболочкой, чтобы определить, была ли она запущена при авторизации.

Понимание --login

Второй способ запустить bash как оболочку входа — при помощи опции —login. Время от времени эта возможность используется эмуляторами терминала (вроде xterm) чтобы их сессия bash выглядела как при изначальном входе в системе.

После авторизации можно запустить много копий вашей оболочки. У тех из них которые запущены без опции --login или не имеют черточки перед именем процесса, поведение будет иным нежели при запуске с авторизацией. Они предоставляют вам командную строку, однако, называются они интерактивными оболочками. Если bash запущена интерактивно, без авторизации, она проигнорирует /etc/profile и

/.bash_profile вместо этого обработает

Проверка на интерактивность

/.bashrc не будучи запущенным интерактивно, например при использовании команд типа rsh или scp. Это важно помнить потому как вывод текста, как в примере с командой fortune выше, может испортить эти неинтерактивные сессии bash. Хорошей идеей является использование переменной PS1 для проверки факта интерактивности текущей сессии перед выводом текста:

/etc/profile и /etc/skel

Как системный администратор, вы отвечаете за файл /etc/profile. Так как им руководствуются все кто впервые входят в систему, важно держать его в рабочем состоянии. Это также очень мощный инструмент, используемый для того чтобы заставить вещи работать правильно для новых пользователей сразу после того как они войдут используя свою новую учетную запись.

Однако, существует вариант, при котором, настройки с одной стороны, могут быть выставлены в значения по-умолчанию для новых пользователей, а с другой, могут быть легко ими изменены при необходимости. Как раз для этого и существует директория /etc/skel. При использовании команды useradd для создания новой учетной записи, все файлы из /etc/skel копируются в домашний каталог нового пользователя. Это означает, что вы можете положить, например, .bash_profile и .bashrc в /etc/skel для более комфортного начала работы нового пользователя.

export

Переменные в bash могут быть помечены таким образом, что они будут устанавливаться во всех вновь запускаемых командных оболочках. Это означает, что они обозначены как внешние (export). Вы можете заставить bash отобразить список всех таким образом обозначенных внешних переменных в вашей сессии bash:

$ export
declare -x EDITOR="vim"
declare -x HOME="/home/chouser"
declare -x MAIL="/var/spool/mail/chouser"
declare -x PAGER="/usr/bin/less"
declare -x PATH="/bin:/usr/bin:/usr/local/bin:/home/chouser/bin"
declare -x PWD="/home/chouser"
declare -x TERM="xterm"
declare -x USER="chouser"

Экспортирование переменных

Если переменная не отмечена на экспорт, её значение не будет задано для новых запускаемых оболочек. Но вы можете отметить переменную на экспорт, передав её встроенной команде export:

$ FOO=foo
$ BAR=bar
$ export BAR
$ echo $FOO $BAR
foo bar
$ bash
$ echo $FOO $BAR
bar

В этом примере были заданы обе переменные FOO и BAR, но только BAR была помечена для экспорта. Когда был запущен новый bash он потерял значение переменной FOO. Если вы выйдите из этого нового bash, вы увидите что первоначальные значения обоих переменных FOO и BAR не изменились.

$ exit
$ echo $FOO $BAR
foo bar

Export и set -x


В связи с вышеописанным поведением, переменные могут быть указаны в

/.bash_profile или /etc/profile и помечены для экспорта, для того, чтобы в дальнейшем не было необходимости указывать их снова. Но есть несколько опций которые не могут быть экспортированы, и поэтому они должны быть заданы в

/.bashrc и в вашем профиле последовательно. Эти опции настраиваются при помощи встроенной команды set:

$ set -x

Опция -x заставляет bash вывести на экран каждую команду, которую он собирается выполнить:

$ echo $FOO
$ echo foo
foo

Это может быть очень полезно для понимания непредвиденного поведения команд при использовании кавычек или похожих странностей. Чтобы выключить опцию -x, используйте set +x. Обратитесь к странице документации man за всеми опциями встроенной команды set.

Установка переменных с «set»

Команда set может также использоваться для задания значений переменных, но при этом указание самой этой команды не является обязательным. Команда в bash «set FOO=foo» делает то же самое, что и «FOO=foo». Сброс значения переменной осуществляется встроенной unset:

$ FOO=bar
$ echo $FOO
bar
$ unset FOO
$ echo $FOO

Unset vs. FOO=

Это не то же самое, что установка переменной пустым значением, хотя порой это сложно объяснить. Один из способов эту разницу заметить — вызвать команду set без параметров, чтобы вывести список всех текущих переменных:

$ FOO=bar
$ set | grep ^FOO
FOO=bar
$ FOO=
$ set | grep ^FOO
FOO=
$ unset FOO
$ set | grep ^FOO

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

Экспортирование переменных для изменения поведения программ.

Часто поведение команд можно изменить установкой переменных окружения. Так же, как в случае новых сессий bash, запускаемые программы из вашей командной строки будут видеть только переменные окружения, помеченные на экспорт. Например, команда man проверяет переменную PAGER, чтобы выяснить какую программу использовать для постраничного просмотра текста.

$ PAGER=less
$ export PAGER
$ man man

Когда переменная PAGER установлена в less, вы будете видеть сначала одну страницу, а нажатие пробела будет перемещать вас а следующую страницу. Если вы измените переменную PAGER в cat, то весь текст отобразится сразу, без остановок на страницах.

$ PAGER=cat
$ man man

Использование «env»

К сожалению, если вы позабудете установить PAGER обратно в less, программа man (как и некоторые другие программы) будет продолжать вывод весь запрошенный текст без остановок. Если вы хотели задать PAGER значение cat только на один раз, то могли бы воспользоваться командой env:

$ PAGER=less
$ env PAGER=cat man man
$ echo $PAGER
less

В этом примере переменная PAGER была использована со значением cat в программе man, но сама по себе переменная окружения PAGER осталась неизменной в сессии bash.

Итоги и ссылки

Итоги

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

Ссылки

Не забудьте посмотреть ресурсы c Linux документацией, использованные в этом руководстве, в особенности Linux Documentation Project, где сможете найти различные гайды, FAQ, а так же бесценные страницы мана. Не забудьте также о Linux Weekly News.

The Linux System Administrators guide является хорошим дополнением к этому руководству. Также вы можете найти в интернете весьма полезную статью Эрика Рэймонда "Unix and Internet Fundamentals HOWTO".

  • Bash by example, Part 1: Fundamental programming in the Bourne-again shell (перевод планируется)
  • Bash by example, Part 2: More bash programming fundamentals (перевод планируется)
  • Bash by example, Part 3: Exploring the ebuild system. (перевод планируется)

Для знакомства с редактором Emacs, смотрите руководство «the developerWorks», "Living in Emacs".

Продолжение следует.

Об авторах

Daniel Robbins

Дэниэль Роббинс — основатель сообщества Gentoo и создатель операционной системы Gentoo Linux. Дэниэль проживает в Нью-Мехико со свой женой Мэри и двумя энергичными дочерьми. Он также основатель и глава Funtoo, написал множество технических статей для IBM developerWorks, Intel Developer Services и C/C++ Users Journal.

Chris Houser

Крис Хаусер был сторонником UNIX c 1994 года, когда присоединился к команде администраторов университета Тэйлора (Индиана, США), где получил степень бакалавра в компьютерных науках и математике. После он работал во множестве областей, включая веб-приложения, редактирование видео, драйвера для UNIX и криптографическую защиту. В настоящий момент работает в Sentry Data Systems. Крис также сделал вклад во множество свободных проектов, таких как Gentoo Linux и Clojure, стал соавтором книги The Joy of Clojure.

Читайте также: