すべてのユーザーに共通の設定を使用できますか?
すべてのユーザーに共通の設定を使用できますか?
回答:
/etc/profile
他の人が言及したのと同様に、一部のLinuxシステムは現在ディレクトリを使用してい/etc/profile.d/
ます。.sh
そこにあるファイルはすべてによって供給され/etc/profile
ます。単に編集するよりも、カスタム環境をこれらのファイルに保持する方が少しきれい/etc/profile
です。
LinuxOSにこのファイルがある場合:
/etc/environment
これを使用して、すべてのユーザーの環境変数を永続的に設定できます。
抽出元:http : //www.sysadmit.com/2016/04/linux-variables-de-entorno-permanentes.html
すべてのログインサービスがPAMを使用し、すべてのログインサービスがsession required pam_env.so
それぞれの/etc/pam.d/*
構成ファイルにある場合、すべてのログインセッションにはいくつかの環境変数がpam_env
の構成ファイルで指定されたとおりに設定されます。
最近のほとんどのLinuxディストリビューションでは、これがデフォルトですべて揃っています。目的のグローバル環境変数をに追加するだけです/etc/security/pam_env.conf
。
これはユーザーのシェルに関係なく機能し、グラフィカルログインでも機能します(xdm / kdm / gdm / entrance /…がこのように設定されている場合)。
echo foo>/home/me/bar
再起動(そして再度ログイン)しても、そのファイルは作成されません。(おそらくこれをテストするためのよりエレガントな方法があるでしょうが、ここでコメントする前に確認したかったのです。)
驚くべきことに、UnixとLinuxには実際にはグローバル環境変数を設定する場所がありません。最善の方法は、特定のシェルがサイト固有の初期化を持つように調整することです。
あなたがそれをに入れれば/etc/profile
、ほとんどのposix互換のシェルユーザーのためにそれを処理します。これはおそらく、重要でない目的には「十分」です。
しかし、csh
またはtcsh
シェルを持つ誰もそれを見ることはありません、そして私はcsh
グローバル初期化ファイルを持っているとは思いません。
/etc/environment
実際には、rootユーザーとしても、環境変数を設定しているようです。私はそれ/etc/environment
がamazon linuxとubuntu上にあることを知っています。csh、tcsh、またはzshで機能するかどうかを確認できませんでした。
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
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
Linuxカーネルで実行されるすべてのプロセスは、親から継承する独自の固有の環境を受け取ります。この場合、親はシェル自体(サブシェルを生成)または「ログイン」プログラム(一般的なシステム)のいずれかになります。
各プロセスの環境は保護されているため、実行中のすべてのプロセスに環境変数を「注入」する方法はないため、デフォルトのシェルの.rc /プロファイルを変更しても、各プロセスが終了して再ロードされるまで、環境変数は有効になりません。その起動設定。
/ etc /を調べて、特定のシェルのデフォルトの起動変数を変更します。ユーザーが個々の設定でそれらを変更できる(そして頻繁に変更できる)ことを理解してください。
Unixは、制限内でユーザーに従うように設計されています。
注意:Bashはシステムの唯一のシェルではありません。/ bin / shシンボリックリンクが実際に指すものに注意してください。多くのシステムでは、これは実際にはダッシュである可能性があります(デフォルトでは、特別な呼び出しはありません)。したがって、両方のデフォルトを変更するように注意する必要があります。そうしないと、/ bin / shで始まるスクリプトはグローバルデフォルトを継承しません。同様に、bashだけが両方を編集するときに理解する構文、つまり別名を避けるように注意してくださいavoiding bashisms
。