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


26

rootユーザーを含むすべてのユーザーJAVA_HOMEに対して、システム全体の環境変数をセットアップしたいだけです。

要件:

  • 通常のユーザーがアクセス可能
  • ルートにアクセス可能
  • 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 / environmentになります

Red Hatに相当するものがわかりません。


1
/ etc / environmentは廃止されると信じています
パットジェームズ

@PatJamesこれについてもっと情報がありますか?/ etc / environmentを試してみましたが、マシンを再起動した後でもrootにロードされません。
ソリン

@SorinSbarneaいくつかの情報はここにあります: / etc / environmentが新しいリリースで使用されなくなったことを示すwiki.debian.org/Locale
Pat James

1
そのページでは、ロケール関連の変数ではなく、すべきであるとのみ述べています/etc/environmentserverfault.com/a/584072/26218
Flow

11

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


9

/etc/environmentこれは、Debianではもはや使用されていない、または使用されていないという回答があり、これは(バージョン7の時点で)誤りです。

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

引用されたウィキ(特にロケール1)は、ロケールベースの環境変数がにあることを意味していると述べているだけ/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つの特定の変数にそれを使用するだけでも、確かに過剰に設計されますが、いくつかのソフトウェアパッケージとその環境が必要になったら、すばらしい仕事をします。


1

/etc/profile動作するはずです。私は、確かに今テスト置きexport SOMETEST=1234/etc/profileし、再ロギングが後にecho $SOMETEST私を与えた1234予想通り。からもgnome-terminal



0

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

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

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.