Назад | Перейти на главную страницу

Добавление каталога в $ PATH в CentOS?

Мы только что установили наш новый сервер (ы), и мы запускаем CentOS на всех них. После успешной установки Ruby Enterprise Edition я хотел бы добавить REE / bin (расположенный по адресу /usr/lib/ruby-enterprise/bin), чтобы сделать его интерпретатором Ruby по умолчанию на сервере.

Я пробовал следующее, которое только добавляет его в текущий сеанс оболочки:

export PATH=/usr/lib/ruby-enterprise/bin:$PATH

Каким был бы правильный подход к постоянно добавление этого каталога в $ PATH для все пользователи. В настоящее время я вошел в систему как root.

Редактировать - не лучшая идея /etc/profile для таких вещей, потому что вы потеряете все свои изменения всякий раз, когда CentOS опубликует обновление для этого файла. Это именно то, что /etc/profile.d для:

# echo 'pathmunge /usr/lib/ruby-enterprise/bin' > /etc/profile.d/ree.sh
# chmod +x /etc/profile.d/ree.sh

Войдите в систему и наслаждайтесь (безопасно) обновленным PATH:

# echo $PATH
/usr/lib/ruby-enterprise/bin:/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
# which ruby
/usr/lib/ruby-enterprise/bin/ruby

Вместо того, чтобы снова входить в систему, вы можете перезагрузить профиль:

# . /etc/profile

Это обновит $PATH переменная.

Следуя совету fmonk, я проверил /etc/bashrc, где я заметил, что написано, что «окружающая среда находится в / etc / profile». Я начал смотреть в /etc/profile, Я видел это:

pathmunge () {
    if ! echo $PATH | /bin/egrep -q "(^|:)$1($|:)" ; then
       if [ "$2" = "after" ] ; then
          PATH=$PATH:$1
       else
          PATH=$1:$PATH
       fi
    fi
}

[...]

# Path manipulation
if [ "$EUID" = "0" ]; then
    pathmunge /sbin
    pathmunge /usr/sbin
    pathmunge /usr/local/sbin
fi

Чтобы решить свою проблему, я просто добавил pathmunge /usr/lib/ruby-enterprise/bin под оператором if. Это решило мою проблему.

"Интерактивная оболочка входа в систему запускается после успешного входа в систему с использованием / bin / login, путем чтения файла / etc / passwd. Этот вызов оболочки обычно читает / etc / profile и его частный эквивалент ~ / .bash_profile при запуске.

Интерактивная оболочка без входа в систему обычно запускается из командной строки с помощью программы оболочки (например, [prompt] $ / bin / bash) или с помощью команды / bin / su. Интерактивная оболочка без входа в систему также запускается с помощью терминальной программы, такой как xterm или konsole, из графической среды. Этот тип вызова оболочки обычно копирует родительскую среду, а затем читает пользовательский файл ~ / .bashrc для получения дополнительных инструкций по настройке запуска ". http://www.linuxfromscratch.org/blfs/view/6.3/postlfs/profile.html

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

На Redhat в /etc/profile Я нашел этот комментарий:

«Общесистемные псевдонимы и функции должны находиться в / etc / bashrc. Персональные переменные среды и запускаемые программы должны находиться в ~ / .bash_profile. Персональные псевдонимы и функции должны находиться в ~ / .bashrc».

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

Переходя к .bash_profile Я читаю:

«Переменные личного окружения и программы автозагрузки.

Персональные псевдонимы и функции должны находиться в ~ / .bashrc. Общесистемные переменные среды и программы запуска находятся в / etc / profile. Общесистемные псевдонимы и функции находятся в / etc / bashrc ".

Вывод
Если вы хотите, чтобы только root мог видеть программы, находящиеся, например, в /sbin Я бы добавил этот путь к корневому .bash_profile файл. Но если вы хотите, чтобы каждый пользователь видел, какие программы для root установлены на вашем компьютере, я бы поставил /sbin в /etc/.profile. Теперь каждый пользователь может использовать завершение табуляции для поиска программ, специфичных для root, и при необходимости повышать права.

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

ИЗВИНЕНИЯ, неверно истолковал вопрос, следующий ответ относится к профилю ПОЛЬЗОВАТЕЛЯ, оставив его на случай, если он кому-то поможет

изменить .bash_profile

nano ~/.bash_profile

затем где-нибудь в файле добавьте / измените свои пути, разделенные:

 PATH=$PATH:$HOME/bin:/your/path
 export PATH

затем перезагрузите свой профиль

source ~/.bash_profile

или выйдите и войдите снова

если вы отметите PATH, он должен включать ваши недавно добавленные пути

echo $PATH

Вы можете установить переменные среды в файле .rc; для оболочек bash (я считаю наиболее распространенными и используемыми по умолчанию в CentOS) каждый пользователь имеет файл с именем .bashrc в своем домашнем каталоге.

Добавьте в этот файл команду PATH = / usr / lib / ruby-enterprise / bin: $ PATH, чтобы установить ее для любого конкретного пользователя.

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

Почему все забывают о /etc/environment. Этот файл предназначен для установки переменных среды для всех пользователей. Просто добавьте пару имя-значение переменной окружения в одну строку. Не используйте переменные.

/ etc / окружающая среда

PATH=:/usr/lib/ruby-enterprise/bin:/usr/bin:/usr/local/bin:

Это добавит каталоги /usr/lib/ruby-enterprise/bin /usr/bin и /usr/local/bin в вашу переменную PATH для всех пользователей после выхода из системы или перезапуска.

/usr/bin и /usr/local/bin уже были на моем пути раньше, но были удалены по какой-то причине после того, как я отредактировал этот файл. Так что добавьте эти два каталога на всякий случай.