Мы только что установили наш новый сервер (ы), и мы запускаем 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
уже были на моем пути раньше, но были удалены по какой-то причине после того, как я отредактировал этот файл. Так что добавьте эти два каталога на всякий случай.