全員のグローバル環境変数を設定する


17

変数をに設定した場合/etc/environment、それは管理者にのみ適用されるようsudo suです。

すべての人に適用する変数を取得するにはどうすればよいですか?特に彼らがターミナルにいるとき?設定は/etc/enviromentbashに適用されませんか?

回答:


13

/etc/environment更新が唯一の次のセッションでは動作しますが、それが自動的に再ロードではないです。

つまり、他のユーザーに対して既に開始されているセッションでは変更できません。

内容を「リロード」/etc/environmentするには、次のコマンドが必要です。

source /etc/environment

ただし、これも現在のセッションでのみ機能します。他のユーザーは、新しいセッションを開始するか、独自のセッションで上記のコマンドを実行するまで影響を受けません。


4

TL; DR

これらの構成ファイルは、グローバル/etc/environment/etc/profile)またはユーザー固有~/.profile~/.bashrc)に関係なく、次のログイン/セッションでのみ処理されます。

グローバルなファイルは、すべてのユーザー(だけでなく、根)に適用されます...しかし、あなたは、環境に反映された変更を確認するためにログインセッションを再起動する必要があります。これは、su観察したとおりに呼び出すか、ログアウト/ログインまたは再起動することで発生します。あなたは可能性su、root以外のユーザーに、あなたは、彼らはまた、環境の変化を持って見ること。

グローバル環境を取得するために再起動または再度ログインする必要がある理由は、環境が親プロセスから継承され、実行する他のすべてのルートプロセスがログインシェルであるためです...ログインシェルにない場合環境...その後、ログインシェル内でプロセスが開始されません。もちろん、個々のプロセスの起動時に環境を設定/更新できますが、変更を確認するには、ログインシェルの環境を設定し、すべてのサブプロセスを再起動する必要があります。

地球環境

言及した他の誰かとして、あなたはへの変更のため、再起動またはログアウト/ログインを必要とし/etc/profile/etc/profile.d/*.shかつ/etc/environmentピックアップされます。

これは、これらのファイルはグローバル環境を指定しますが、ログイン時に一度だけ実行されるため、既存のログイン/セッションにはこれらのファイルへの変更が反映されないためです。再起動すると、全員のログインが「リセット」され、新しい環境が強制的に取得されます。

独自のログインセッションではsource /etc/profile、再起動やログアウト/ログインなしで変更を取得できますが、それは自分のセッションとセッション内で実行されている新しいプロセスにのみ影響します。

には変数展開がないことも/etc/environment(それはスクリプトではありません)あなたのようなものを行うことはできませんので、PATH="$PATH:/my/custom/path"そこに。

注意また、その/etc/profile/etc/profile.d/*.sh(あなたがデーモンプロセスのためにそのログインシェル外実行環境変数を設定しようとしている場合はIE)を唯一のログインセッションのために実行され、環境が設定されて、システムの非ログインアカウントに利用可能ではありません。

bashrc全体のログインシェルのためではなく、bashのシェルとサブプロセスの環境を設定するために有用ではありません...ので、真の「グローバル」または「ユーザーグローバル」のためにあなたは、おそらく中にご使用の環境の設定を置きたいと思う/etc/profile/etc/profile.d/my-custom-env.shまたは~/.profile。他のシェル(zshなど)には独自の設定ファイルもあるため、bashrcの非bash固有の環境設定は、シェルを切り替える(または、システム上の他のユーザーに別のシェルを使用させる)場合に問題または混乱を引き起こします。

新しいプログラムをインストールし、それを適切に実行するために何らかの環境を指定する必要があることはよくある問題です。グローバル環境は一つの答えですが、多くの場合、サーバーや自動プロビジョニング/ユースケースの構成には理想的ではない再起動が必要になります。これが本当にシステム上のすべてのユーザーとプログラムが必要とする変数なのか、それとも特定のユーザーまたはプログラムが利用できるようにする必要があるだけなのかを自問する必要があります。

特定のユーザー向け

~/.profile ~/.bashrc対話型、ログインシェル、bash専用などでこれを使用するかどうかに応じて、ユーザーのホームディレクトリのプロファイルまたはbashrcに環境を含めることを検討します(例)。

ユーザーのログインセッション内のすべてのプロセスで環境の変更を使用できるようにするには、再起動またはログアウト/ログインも必要になることに注意してください。ユーザーはsource ~/.profile...しかし、それは端末内で行われ、その端末セッションと子プロセス内の環境のみを更新します...必ずしもユーザーのログイン環境全体に対してではありません。

特定のプログラムには、いくつかのオプションがあります。

1つは、コマンドの実行時に環境を提供することです。

VAR_NAME="VAR VALUE" VAR2_NAME="VAR2_VALUE" /path/to/program --opt1 --op2

あなたはまた、下ユニット/サービス・ファイル内の環境を指定することができますsystemdに使用している場合[Service]Environment=VAR_NAME="VAR VALUE" VAR2_NAME="VAR2_VALUE

プログラムを実行するたびに環境を指定する必要があるため、このオプションは不格好に感じるかもしれませんが、環境が本当にそのプログラムでのみ必要な場合...これは本当に最善の方法であり、すべてにダンプするのではなく、それに慣れる必要がありますbashrcまたはプロファイルファイルに。

systemdまたはinitを使用して環境をセットアップしてプログラムを実行しない場合は、もちろん、プログラムの実行をbashスクリプトでラップして、環境セットアップを含む完全なコマンドを便利に保存することもできます。

参照:

ここに非常に詳細な回答もありますので、お読みください:https : //askubuntu.com/a/247769/824160


3

下にカスタムシェルスクリプトを作成します

/etc/profile.d/

作成したスクリプト内にグローバル環境変数を追加し、マシンを再起動すると、すべてのユーザーが使用できるようになります。


パッケージが更新されるとファイルが変更される可能性があるため、これは/ etc / environmentファイルを編集するよりも信頼性の高いアプローチだと思います。
phreed

2

に変数を追加すると/etc/environmentうまくいきました。

ただし/etc/environment、変更を有効にするには、変更後に再起動する必要がありました。ターミナルウィンドウを閉じて再度開くだけでは不十分でした。


3
いつでもsource /etc/environmentリロードすることができます。
パントロ

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