サーバー上のすべてのユーザーにPATH変数を設定する方法 の手順は、すべての「通常の」ユーザーにPATHを設定するために機能します。ただし、Sudo -s
を実行してからprintenv PATH
を実行すると、更新されたパスは表示されません。たとえば ルートのTeX Liveパスを設定する を見てきましたが、Windowsのバックグラウンドから来ているので、これは意味をなさないようです。本当にシステム全体のパスを設定する方法はありますか。そのため、システムで実行されているすべてのプロセスにエントリが完全に継承されますか?
更新:
グローバル環境変数の設定は/etc/environment
で実行する必要がありますが、指摘したように、Sudo -s
を使用すると、これらの変数の効果は「消滅」します。
その理由は、Sudo
がEnvironmentのリセットおよびsecure pathの設定のポリシーを持っているためです。デフォルトで有効になっています。
/etc/sudoers:
Defaults env_reset
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
したがって、パスの/etc/environment
に設定されているものは、Sudo
によってオーバーライドされます。
sudoers
のマニュアルページには次のように記載されています。
env_reset If set, Sudo will reset the environment to only contain
the LOGNAME, MAIL, Shell, USER, USERNAME and the Sudo_*
variables. Any variables in the caller's environment
that match the env_keep and env_check lists are then
added. The default contents of the env_keep and
env_check lists are displayed when Sudo is run by root
with the -V option. If the secure_path option is set,
its value will be used for the PATH environment
variable. This flag is on by default.
回避策として、Sudo su
を使用して、シェルにルート権限を提供しますが、正しいPATHが含まれます。
元の回答
/etc/environment
で設定する必要があります。
Sudo YOUR_TEXT_EDITOR /etc/environment
を試してください(最初にバックアップを作成してください)。
システム全体の環境変数
システム全体(特定のユーザーではなく)に影響する環境変数設定は、システムまたはデスクトップセッションの読み込み時に実行される多くのシステムレベルスクリプトのいずれにも配置しないでください。ただし、
/etc/environment
-このファイルは、特にシステム全体の環境変数設定用です。スクリプトファイルではなく、1行に1つずつ割り当て式で構成されています。具体的には、このファイルにはシステム全体のロケールとパス設定が保存されます。非推奨:
/etc/profile
-このファイルは、bashログインシェルが入力されるたびに(たとえば、コンソールまたはssh経由でログインするとき)、デスクトップセッションがロードされるときにDisplayManagerによって実行されます。これはおそらく、ベテランのUNIXシステム管理者に環境変数について尋ねるときに参照されるファイルです。ただし、Ubuntuでは、このファイルは/etc/bash.bashrcファイルを呼び出すだけで済みます。
/etc/bash.bashrc
-これは、システム全体のバージョンの〜/ .bashrcファイルです。 Ubuntuは、ユーザーがシェルまたはデスクトップ環境に入るたびにこのファイルを実行するようにデフォルトで設定されています。
Sudo -i
は(Sudo su -
と同様の方法で)ログインをシミュレートし、これらの環境変数を提供します。