Яке найкраще місце для налаштування змінних системних змінних середовища на Linux?


26

Я просто хочу встановити системну змінну середовища JAVA_HOMEдля всіх користувачів, включаючи root користувачів.

Вимоги:

  • доступні звичайним користувачам
  • доступний для кореня
  • завжди завантажується, не тільки для bash (gnome-terminal не запускає bash за замовчуванням)
  • для роботи над Ubuntu, Debian та необов'язково Red Hat
  • чудово, якщо додавання можна було легко прописати

Для інтерактивних оболонок перевірте цю запит у ubuntu .
швидкий зміна

Відповіді:


26

Оскільки тут ніхто не додав повної відповіді, це те, що я зараз вважаю найкращим, принаймні для ubuntu, але я готовий адаптувати відповідь для інших * nix платформ.

# **create**: /etc/profile.d/java.sh
export JAVA_HOME=/usr/lib/jvm/default-java

Інші варіанти, які вже були розглянуті, але виключені:

  • /etc/environment працює, але важче підтримувати, оскільки інші інструменти або люди можуть редагувати його.
  • /etc/profile - само, як і вище

11

На Debian / Ubuntu це буде / etc / середовище

Я не знаю еквівалента Red Hat.


1
Я вважаю, що тощо / оточення застаріле
Пат Джеймс

@PatJames У вас є додаткова інформація про це? Я спробував / etc / environment не завантажується для root навіть після перезавантаження машини.
sorin

@SorinSbarnea деяка інформація тут: wiki.debian.org/Locale із вказівкою / тощо / оточення більше не використовується в новіших випусках
Пат Джеймс

1
На цій сторінці йдеться лише про те, що не слід, а локальні змінні в /etc/environment. Дивіться також serverfault.com/a/584072/26218
Потік

11

Я не розумію, чому ви виключили / etc / profile. Це правильне розташування.


9

Декілька відповіли, що говорять про те, що /etc/environmentDeprinted та / або більше не використовується в Debian, і це (як у версії 7) помилково.

Файл насправді читається PAM - конкретно pam_env(8), через envfileпрапор за замовчуванням . На сторінці вказується також це значення за замовчуванням у розділі ФАЙЛИ.

Процитовані вікі (особливо локальні) просто стверджують, що зараз мають бути знаходяться змінні середовища, засновані на локалі /etc/profile. Їх твердження "(у старих версіях Debian, також / etc / Environment)" є розпливчастим і знаходиться в контексті локалів.

Швидкий перегляд /etc/pam.dшоу:

root@box:/etc/pam.d# grep pam_env.so *
atd:auth        required        pam_env.so
cron:session       required   pam_env.so
cron:session       required   pam_env.so envfile=/etc/default/locale
login:session       required   pam_env.so readenv=1
login:session       required   pam_env.so readenv=1 envfile=/etc/default/locale
sshd:auth       required     pam_env.so # [1]
sshd:auth       required     pam_env.so envfile=/etc/default/locale
su:session       required   pam_env.so readenv=1
su:session       required   pam_env.so readenv=1 envfile=/etc/default/locale

Ці рядки конфігурації є добавковими, і оскільки перший відсутній envfile, він, таким чином, за замовчуванням /etc/environment.

Все це, звичайно, покладається на те, що бінарні файли, які ви використовуєте ( crond, оболонки для входу тощо), складені проти PAM.

Нарешті, це означає, що інші системи, що використовують PAM (наприклад, RedHat), поводяться так само, як це можна побачити на відповідній сторінці.


2

Одна сторона зауваження: Погляньте на середовище Модулі . Я використовую це щоразу, коли мені потрібно запропонувати складне, розроблене, саморозширюване, стисле середовище UNIX десяткам чи сотням користувачів. В основному використовується у великих масштабах багатокористувацьких середовищ HPC. Просто використовувати його для однієї певної змінної, безумовно, це надмірна інженерія, але вона виконує приголомшливу роботу, коли вам потрібно більше кількох програмних пакетів та їх оточення.


1

/etc/profileповинен працювати. Я перевірив лише зараз, щоб бути впевненим, надійшов export SOMETEST=1234до /etc/profileта після повторного входу в систему echo $SOMETEST, 1234як мені було передбачено Також відgnome-terminal


1

/etc/enviromentне використовується в останньому стабільному випуску debian. Рекомендація - це створити власний *.shфайл /etc/profile.d/для цього парпуза, як сказав Сорін S. Дивіться https://wiki.debian.org/EnvironmentVariables


0

У цьому випадку ви не можете використовувати будь-які конкретні файли. так....

/etc/profileбуло б належним місцем для цього в цьому випадку. Поточні зареєстровані користувачі мають отримати новий сеанс входу, але це не повинно бути великою проблемою.

@ wk01: /etc/profileза замовчуванням не завантажується оболонкою без реєстрації. ваш .bashrc , ймовірно, завантажує його ...

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