Файлы /etc/profile и ~/.bash_profile#

profile - это файлы, содержащие настройки среды пользователя во время входа в систему. Функции и псевдонимы при этом содержатся в /etc/bashrc (подробнее см. в «Файл bashrc»).

Расположение:

/etc/profile
~/.bash_profile
$HOME/.profile

Пользователи, у которых в качестве команды для входа используется shell, sh, выполняют команды из этих файлов как часть последовательности сценария входа в систему.

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

$HOME/.profile используется для настройки экспортируемых пользователем переменных среды и режимов работы терминала.

Примеры записей#

  • Скрипт управления переменной окружения PATH - добавление новых путей без дублирования в соответствии с заданными условиями:

    pathmunge () {
        case ":${PATH}:" in
            *:"$1":*)
                ;;
            *)
                if [ "$2" = "after" ] ; then
                    PATH=$PATH:$1
                else
                    PATH=$1:$PATH
                fi
        esac
    }
    
  • Скрипт определения текущего пользователя и его среды (идентификатор, переменная имени пользователя USER и имени в системе LOGNAME, переменная пути к почтовому ящику MAIL):

    if [ -x /usr/bin/id ]; then
        if [ -z "$EUID" ]; then
            # ksh workaround
            EUID=`/usr/bin/id -u`
            UID=`/usr/bin/id -ru`
        fi
        USER="`/usr/bin/id -un`"
        LOGNAME=$USER
        MAIL="/var/spool/mail/$USER"
    fi
    
  • Скрипт управления переменной окружения PATH в зависимости от привилегий пользователя ("$EUID" = "0" соответствует root-пользователю):

    if [ "$EUID" = "0" ]; then
        pathmunge /usr/sbin
        pathmunge /usr/local/sbin
    else
        pathmunge /usr/local/sbin after
        pathmunge /usr/sbin after
    fi
    
  • Строки, используемые для определения имени хоста:

    HOSTNAME=$(/usr/bin/hostnamectl --transient 2>/dev/null) || \
    HOSTNAME=$(/usr/bin/hostname 2>/dev/null) || \
    HOSTNAME=$(/usr/bin/uname -n)
    
  • Скрипт для настройки истории команд в оболочке (размер 1000 элементов, игнорирование определенных команд):

    HISTSIZE=1000
    if [ "$HISTCONTROL" = "ignorespace" ] ; then
        export HISTCONTROL=ignoreboth
    else
        export HISTCONTROL=ignoredups
    fi
    
  • Строка экспорта определенных переменных окружения для их доступности всем последующим командам и скриптам, выполняемым в текущей сессии оболочки конкретного пользователя:

    export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE HISTCONTROL
    
  • Скрипт чтения и выполнения всех скриптов, заканчивающихся на «.sh», из директории /etc/profile.d/ в безопасном режиме:

    for i in /etc/profile.d/*.sh /etc/profile.d/sh.local ; do
        if [ -r "$i" ]; then
            if [ "${-#*i}" != "$-" ]; then
                . "$i"
            else
                . "$i" >/dev/null
            fi
        fi
    done
    
  • Строки удаления переменной и определенной функции:

    unset i
    unset -f pathmunge
    
  • Скрипт загрузки начальных скриптов в зависимости от того, является ли bash оболочкой входа; при этом bash входа в систему запускается только с помощью /etc/profile, прочие bash запускаются только с помощью /etc/bashrc, проверка на наличие двойного источника выполняется в /etc/bashrc:

    if [ -n "${BASH_VERSION-}" ] ; then
            if [ -f /etc/bashrc ] ; then
                    . /etc/bashrc
        fi
    fi
    

Важно

Не рекомендуется вносить изменения напрямую в файл /etc/profile. Для внесения пользовательских изменений в среду и предотвращения необходимости объединения в будущих обновлениях создайте пользовательский shell-скрипт custom.sh в /etc/profile.d/.