Додавання каталогу в $ PATH в CentOS?


84

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

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

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

Що було б правильним підходом до постійного додавання цього каталогу до $ PATH для всіх користувачів . На даний момент я увійшов як root.

Спасибі заздалегідь!

Відповіді:


115

Недоцільно редагувати /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змінну.


1
~/.profileще один дійсний варіант
Zypher

4
Так, для одного користувача. Але питання стосувалося зміни PATH для всіх користувачів.
Майк

2
@Mike Що це за команда pathmunge?
Микола Лещів

@NickolaiLeschov Я впевнений, що він просто додає шлях до $ PATH.
Майк

@NickolaiLeschov це функція, визначена в / etc / profile
CrazyPheel

11

Дотримуючись порад 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. Це вирішило моє питання.


Може хтось пояснить, що "$EUID" = "0"означає в цьому контексті?
Елі

EUID 0 означає, що користувач має root.
bbaja42

6
Ви мали використовувати /etc/profile.d. Дивіться мою відповідь нижче.
Майк

Будь ласка, прийміть відповідь на @MikeConigliaro як правильну. Його шлях правильний. Це розроблено для роботи таким чином. Погляньте на файли в /etc/profile.d/папці, і ви це помітите. Також, за його словами, оновлення системи може скасувати ваше рішення.
Caio Cunha

4

"Інтерактивна оболонка входу запускається після успішного входу, використовуючи / bin / login, зчитування файлу / etc / passwd. Цей виклик оболонки зазвичай читає / etc / profile та його приватний еквівалент ~ / .bash_profile при запуску.

Інтерактивна оболонка без входу зазвичай запускається в командному рядку за допомогою програми оболонки (наприклад, [підказка] $ / 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. Тепер кожен користувач може скористатися доповненням вкладок, щоб знайти кореневі програми та при необхідності підняти права.

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


2

SORRY неправильно трактував питання, наступний asnwer - для профілю USER, залишаючи його, якщо він допомагає комусь

змінити .bash_profile

nano ~/.bash_profile

то десь у файлі додайте / змініть свої контури, відокремлені:

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

потім перезавантажте свій профіль

source ~/.bash_profile

або вийдіть із системи та увійдіть знову

якщо ви перевірите PATH, він повинен включати ваші щойно додані шляхи

echo $PATH

1

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

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

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.