Перейти к содержанию

Профили Bash: /etc/profile, /etc/bashrc и ~/.bashrc

Администратор должен различать настройки всей системы и настройки пользователя, иначе изменения в оболочке могут повлиять на скрипты, SSH-сессии и работу системных заданий.

Какие оболочки бывают

Сценарий Что это означает Как проверить
Интерактивная login-оболочка пользователь вошёл в сессию shopt -q login_shell
Интерактивная non-login Bash запущен из другой оболочки echo "$-" содержит i
Неинтерактивный сценарий запуск bash script.sh не рассчитывать на алиасы/profile
sh -c '...' интерпретатор /usr/bin/sh в НАЙС.ОС ссылку задаёт пакет Bash, но режим POSIX может отличаться

В изученном bash.spec /usr/bin/sh символически связывается с Bash. Это не делает любой /bin/sh-скрипт полноценным Bash-сценарием: при вызове как sh оболочка может менять поведение. Для специфичных возможностей Bash используйте #!/usr/bin/env bash.

Изменяем пользовательские настройки, не трогая RPM-файлы

Для одного пользователя:

cp -a ~/.bashrc ~/.bashrc.before-niceos-docs 2>/dev/null || true
nano ~/.bashrc

Например:

alias work='cd "$HOME/work"'
export EDITOR=vim

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

bash -n ~/.bashrc

Затем откройте новую интерактивную сессию. Для тестового перечитывания уже действующего файла можно выполнить source ~/.bashrc, но это исполнит весь код файла в текущей оболочке, поэтому сначала прочитайте и проверьте его содержимое.

Конфигурация PATH

В изученном /etc/profile НАЙС.ОС исходный PATH начинается с /usr/bin. Для root добавляется /usr/sbin; /bin и /sbin включаются только если соответствующие каталоги не символические ссылки. Обратите внимание: переменные рабочего окружения, полученные до чтения /etc/profile, могут быть перезаписаны логикой профиля.

printf '%s\n' "$PATH" | tr ':' '\n'
command -v ip
command -v systemctl

Если нужно добавить собственный каталог пользователя, делайте это аккуратно:

export PATH="$HOME/.local/bin:$PATH"

Включение каталогов, доступных на запись посторонним пользователям, в начало PATH повышает риск запуска подменённых программ.

История Bash

Исследованный SPEC задаёт HISTSIZE=10000, HISTFILESIZE=50000, формат временных меток и синхронизацию истории между интерактивными сессиями через PROMPT_COMMAND. Это удобно для работы, но история не является защищённым журналом аудита: её может изменить пользователь, а некоторые команды из неё исключаются. Секреты не вводите в командной строке, если они попадут в историю или список процессов.

Чего не делать

  • Не модифицируйте /etc/profile для единственного пользовательского алиаса.
  • Не используйте source ~/.bashrc в произвольном системном скрипте.
  • Не храните ключи API и пароли в общесистемных профилях.
  • Не ожидайте от команды rm в сценариях подтверждений rm -i: интерактивные алиасы могут не применяться.