Вопрос: Добавление каталога в $ PATH в CentOS?


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

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

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

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

Заранее спасибо!


68
2018-01-15 03:15


Источник




Ответы:


Редактировать /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 переменная.


98
2017-08-22 16:29



~/.profile это еще один допустимый вариант - Zypher
Да, для одного пользователя. Но вопрос заключался в изменении PATH для все пользователи. - Mike Conigliaro
@Mike Что это за команда? - Nickolai Leschov
@NickolaiLeschov Я почти уверен, что он просто добавляет путь к $ PATH. - Mike Conigliaro
@NickolaiLeschov это функция, которая определена в / etc / profile - CrazyPheel


Следуя советам 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. Это решило мою проблему.


9
2018-01-15 04:10



Может кто-нибудь объяснить, что "$EUID" = "0" означает в этом контексте? - Eli
EUID 0 означает, что пользователь root. - bbaja42
Вы должны были использовать /etc/profile.d. См. Мой ответ ниже. - Mike Conigliaro
Пожалуйста, подумайте о принятии ответа @MikeConigliaro как правильного. Его путь правильный. Он разработан таким образом. Взгляните на файлы в /etc/profile.d/ и вы заметите это. Кроме того, по его словам, обновление системы может отменить ваше решение. - Caio Cunha


«Запускается интерактивная оболочка входа в систему   после успешного входа в систему, используя   / 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, потому что это не только против общего соглашения, но и вы будете пропускать ваши varialbles bashrc при вызове терминала из графической среды рабочего стола.

Редхат в /etc/profile Я нашел этот комментарий:

«Системные псевдонимы и функции должны идти в / etc / bashrc.   переменные среды и программы запуска должны   ~ / .bash_profile. Личные псевдонимы и функции должны   ~ / .bashrc «.

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

Перейдем к .bash_profile Я читаю:

«Личные переменные среды и программы запуска.

Личные псевдонимы и функции должны идти в ~ / .bashrc. Широкая система   переменные среды и программы запуска находятся в / etc / profile.   Системные псевдонимы и функции находятся в / etc / bashrc. "

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

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


3
2017-11-08 21:34





Извините, неверно истолковал вопрос следующий asnwer для профиля USER оставляя это на случай, если это поможет кому-то

изменить .bash_profile

nano ~/.bash_profile

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

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

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

source ~/.bash_profile

или выйти из системы и снова войти в систему

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

echo $PATH

1
2017-10-31 08:53





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

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

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


0
2018-01-15 03:49