私のLinuxシステムで全員の環境変数を設定するにはどうすればよいですか?


132

すべてのユーザーに共通の設定を使用できますか?


2
それは輸出ですか?それを追加し、それはグローバルですか?
TIMEX、

私はそれが現在のセッションにのみ追加されると思います、ターミナルで新しいセッションを開くと、それは消えます
Haryono Sariputra

回答:


103

/etc/profile他の人が言及したのと同様に、一部のLinuxシステムは現在ディレクトリを使用してい/etc/profile.d/ます。.shそこにあるファイルはすべてによって供給され/etc/profileます。単に編集するよりも、カスタム環境をこれらのファイルに保持する方が少しきれい/etc/profileです。


4
一部のユーザーがzshなどの別のシェルを使用している場合はどうなりますか?
Matthieu Napoli

70
これはグローバルではありません...シェルに制限されています..残念ですが、これは最も受け入れられる回答です
mmm

1
zshは/etc/profile.d/内の.shファイルをソースします。これは/ etc / zshrc @Matthieu Napoli
Bily

4
ROOTユーザーにはスクリプトは使用されません。
Val


38

man 8 pam_env

man 5 pam_env.conf

すべてのログインサービスがPAMを使用し、すべてのログインサービスがsession required pam_env.soそれぞれの/etc/pam.d/*構成ファイルにある場合、すべてのログインセッションにはいくつかの環境変数がpam_envの構成ファイルで指定されたとおりに設定されます。

最近のほとんどのLinuxディストリビューションでは、これがデフォルトですべて揃っています。目的のグローバル環境変数をに追加するだけです/etc/security/pam_env.conf

これはユーザーのシェルに関係なく機能し、グラフィカルログインでも機能します(xdm / kdm / gdm / entrance /…がこのように設定されている場合)。


1
+1 pam_env.confに変数を追加した後に再起動する必要もあります。即座に即座に発生します$ echo $ variablenameが表示されません

9
再起動する必要はありません。再ログインする必要があります。(私にとって重要なサーバーを再起動する必要はありません)
リンドンホワイト

これは私のディストリビューションMint 17.2には当てはまらないようです。プレインストールされたファイルは完全にコメント化されており、のようなものを追加してecho foo>/home/me/bar再起動(そして再度ログイン)しても、そのファイルは作成されません。(おそらくこれをテストするためのよりエレガントな方法があるでしょうが、ここでコメントする前に確認したかったのです。)
マイケル・シェパー2015

16

驚くべきことに、UnixとLinuxには実際にはグローバル環境変数を設定する場所がありません。最善の方法は、特定のシェルがサイト固有の初期化を持つように調整することです。

あなたがそれをに入れれば/etc/profile、ほとんどのposix互換のシェルユーザーのためにそれを処理します。これはおそらく、重要でない目的には「十分」です。

しかし、cshまたはtcshシェルを持つ誰もそれを見ることはありません、そして私はcshグローバル初期化ファイルを持っているとは思いません。


8
/etc/environment実際には、rootユーザーとしても、環境変数を設定しているようです。私はそれ/etc/environmentがamazon linuxとubuntu上にあることを知っています。csh、tcsh、またはzshで機能するかどうかを確認できませんでした。
ジョーダンスチュワート

使用しているシェルに固有ではなく、本当にグローバルです
Xerus

9

bashマンページからの興味深い抜粋:

bashが対話型ログインシェルとして、または--loginオプション付きの非対話型シェルとして呼び出されると、/etc/profileファイルが存在する場合は、最初にファイルからコマンドを読み取って実行します。そのファイルを読んだ後、それは探し~/.bash_profile~/.bash_login、および~/.profile、そのためには、および読み込み、存在し、読み取り可能である最初のものから実行するコマンドを。この--noprofileオプションは、シェルの起動時にこの動作を禁止するために使用できます。
...
ログインシェルではないインタラクティブシェルが開始されると、bash は、これらのファイルが存在する場合、/etc/bash.bashrcおよびからコマンドを読み取り、実行します ~/.bashrc。これは、--norcオプションを使用することによって禁止される場合があります。の--rcfileファイルのオプションは、ファイルからコマンドを読み込み、実行するためにはbashを強制代わりのだろう/etc/bash.bashrc~/.bashrc

だから、見ている/etc/profileか、/etc/bash.bashrcこれらのファイルはグローバル設定のための右の場所です。それらに次のようなものを入れて、環境変数を設定します。

export MY_VAR=xxx

従来のUnixシステムでは、BourneシェルとKornシェルの両方が/ etc / profileも読み取ることに注意してください。これは、おそらくシステム環境設定で最も広く使用されている場所です。Cシェルの一部のバージョンは、ユーザーごとの場所だけでなく、/ etc / csh.cshrcおよび/etc/csh.loginも検索します。その他は、システム環境設定ファイルを使用しません。
ジョナサンレフラー、

すごい、ログインしていないシェルユーザーの環境を設定するために私が探していたもの。
David Mann

申し訳ありませんが、しばらくの間矢印が表示されないときに誤ってこれに反対票を投じたようです...反対票を削除できるように、これを編集してください(たとえば、最後から2行目の「環境」と入力します)。
ベンジャミンW.

4

PAMの使用は優れています。

# modify the display PAM
$ cat /etc/security/pam_env.conf 
# BEFORE: $ export DISPLAY=:0.0 && python /var/tmp/myproject/click.py &
# AFTER : $ python $abc/click.py &
DISPLAY  DEFAULT=${REMOTEHOST}:0.0 OVERRIDE=${DISPLAY}
abc   DEFAULT=/var/tmp/myproject

2

Linuxカーネルで実行されるすべてのプロセスは、親から継承する独自の固有の環境を受け取ります。この場合、親はシェル自体(サブシェルを生成)または「ログイン」プログラム(一般的なシステム)のいずれかになります。

各プロセスの環境は保護されているため、実行中のすべてのプロセスに環境変数を「注入」する方法はないため、デフォルトのシェルの.rc /プロファイルを変更しても、各プロセスが終了して再ロードされるまで、環境変数は有効になりません。その起動設定。

/ etc /を調べて、特定のシェルのデフォルトの起動変数を変更します。ユーザーが個々の設定でそれらを変更できる(そして頻繁に変更できる)ことを理解してください。

Unixは、制限内でユーザーに従うように設計されています。

注意:Bashはシステムの唯一のシェルではありません。/ bin / shシンボリックリンクが実際に指すものに注意してください。多くのシステムでは、これは実際にはダッシュである可能性があります(デフォルトでは、特別な呼び出しはありません)。したがって、両方のデフォルトを変更するように注意する必要があります。そうしないと、/ bin / shで始まるスクリプトはグローバルデフォルトを継承しません。同様に、bashだけが両方を編集するときに理解する構文、つまり別名を避けるように注意してくださいavoiding bashisms

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