web-dev-qa-db-ja.com

Linuxでシステム全体の環境変数を設定するのに最適な場所はどこですか?

システム全体の環境変数Java_HOMErootを含むすべてのユーザーユーザーに設定したいだけです。

要件:

  • 通常のユーザーがアクセスできます
  • ルートにアクセス可能
  • bashだけでなく常に読み込まれる(gnome-terminalはデフォルトではbashを起動しません)
  • ubuntu、Debian、およびオプションでRed Hatで作業する
  • 追加が簡単にスクリプト化できれば素晴らしい
26
sorin

Ubuntu、およびその他の* nixプラットフォームの場合は、/etc/profile.dという名前の新しいスクリプトをJava.shに追加します。

echo "export Java_HOME=/usr/lib/jvm/default-Java" > /etc/profile.d/Java.sh

除外されたその他の考慮事項:

  • /etc/environment-機能しますが、他のツールを使用して維持するのは困難です(または他のツールで編集します)。そして
  • /etc/profile-/etc/environmentと同じ欠点
26
sorin

Debian/Ubuntuでは / etc/environment

Red Hatに相当するものは知りません。

12
objectified

/ etc/profileを除外した理由がわかりません。それが正しい場所です。

11
dmourati

_/etc/environment_は廃止されているか、Debianで使用されていないという回答があり、これは(バージョン7の時点では)誤りです。

ファイルは実際にはPAMによって読み取られます。具体的には、envfileフラグのデフォルトを介してpam_env(8)です。マンページのFILESセクションにもこのデフォルトが記載されています。

引用されたウィキ(特にロケール1)は、ロケールベースの環境変数が_/etc/profile_に含まれることを意味していると単に述べています。彼らの声明((Debianの古いバージョンでは/ etc/environmentも))は曖昧で、ロケールの文脈にあります。

_/etc/pam.d_を介して簡単にgrepを実行すると、次のようになります。

_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など)も同じように動作することを意味します(それぞれのマンページで確認できます)。

9
lingfish

補足: モジュール環境 をご覧ください。何十、何百ものユーザーに、複雑でバージョン管理された、自己拡張可能な簡潔なUNIX環境を提供する必要があるたびに、これを使用します。主に、大規模なマルチユーザーHPC環境で使用されます。 1つの特定の変数にそれを使用するだけでも確かに過剰設計されますが、いくつかのソフトウェアパッケージとその環境以上が必要になると、素晴らしい仕事をします。

2
pfo

/etc/enviromentは、最後のdebian安定版リリースでは使用されていません。 Sorin Sが言っているように、このポープースのために*.shに独自の/etc/profile.d/ファイルを作成することをお勧めします。 https://wiki.debian.org/EnvironmentVariables を参照してください

1
cape

/etc/profileが機能するはずです。念のためにテストしましたが、export SOMETEST=1234/etc/profileに入れて、再ログインした後、echo $SOMETEST1234を期待どおりに提供しました。また、gnome-terminalから

1
wk.

この場合、特定のファイルを使用することはできません。そう....

この場合、/etc/profileが適切な場所になります。ただし、現在ログインしているユーザーは新しいログインセッションを取得する必要がありますが、これはそれほど大きな問題ではありません。

@ wk01:/etc/profileは、デフォルトでは非ログインシェルによってロードされません。あなたの.bashrcはおそらくそれをロードしています...

0
mober