bashでPATH変数が設定されている場所の完全な表示

bashでPATH変数が設定されている場所の完全な表示

PATH設定/etc/profileやホームディレクトリ.profileのファイルについていくつかの場所で読みました。

ルートが設定された唯一の場所ですか?もっとよく理解したいです。

/etc/profileドキュメントの下の説明に示すように"system-wide .profile file for the Bourne shell"。これは、設定ファイルがbashのデフォルト設定ファイルであることを意味しますか?

ファイルにPATHvarがまったく設定されていません。ホームディレクトリのファイルには.profile次の行があります。

PATH="$HOME/bin:$PATH"

PATHすでに設定されている$PATH文字列を正しい文字列に$HOME/bin:関連付けるので、シェイプでリセットされますか?しかし、が唯一のファイル設定の場合、そのコード行のファイルが で定義されていない場合、どこから来るのでしょうetc/profileか。~/.profilePATH$PATH/etc/profile

PATH経験豊富な人は、この変数について広範で詳細な説明を提供できますか?ありがとうございます!

答え1

PATH設定できる場所はたくさんあります。

プログラムはloginそれをデフォルト値に設定します。このデフォルト値の設定方法はシステムによって異なります。ほとんどの非埋め込みLinuxシステムでは、次のものからインポートされます。/etc/login.defs、rootユーザーと異なるユーザーに対して異なる値を持ちます。login(1)その機能については、システムのマニュアルを参照してください。

システムで使用ポリアクリルアミド具体的にpam_envモジュール、環境変数は、/etc/environmentシステム全体のファイルとユーザー固有のファイルで設定できます~/.pam_environment

これにより、ほとんどのログイン方法(クローンジョブを除く)が実行されます。ログインシェルシステム全体およびユーザー固有の構成ファイルを読み取ります。PATH通常、これらのファイルの値を変更してアイテムを追加することができますが、時には他の方法で変更することもできます。どのファイルを読み取るかは、ログインシェルが何であるかによって異なります。 Bourne / POSIXスタイルのシェルは、.Bashを読み取りますが、各ユーザーファイルに対して、および最初の既存のファイルのみを/etc/profile読み取ります。 Zshは、、、、およびを読み取ります。多くのGUIセッションがロードされ実行されるようにスケジュールされていますが、これはディスプレイマネージャ、デスクトップ環境、または他のセッション起動スクリプトと各ディストリビューションがどのように設定するかによって異なります。~/.profile/etc/profile~/.bash_profile~/.bash_login~/.profile/etc/zshenv~/.zshenv/etc/zprofile~/.zprofile/etc/zlogin~/.zlogin/etc/profile~/.profile

答え2

初期 PATH 変数は通常、次の位置に設定されます。/etc/profile 時には、システム管理者はPATH変数をソースに入れることもあります。/etc/profile.d

これは、ローカルに上書きされない限り、すべてのログインがデフォルトで継承されるシステムパス変数です。これは通常明確なパスを設定します/usr/bin。たとえば、私の職場では/optいくつかのカスタマイズされた場所を広く使用しているので、そのルートもそこに設定されます。

PATHは、各ユーザーログインのデフォルトアカウントで定義することもできます~/.profile。これにより、すべてのユーザーがアクセスできないものを定義できます。部署長はバイナリを実行できますが、/opt他のユーザーはそれを気にしないことがあります。ユーザーはこのファイルを直接変更することもできます。これはシェルに限定されないという利点があります.profile。ログインすると、そこにPATHが設定されます。

~/.bash_profileシェル固有のログインの場合、PATHは、、、~/.bashrcまたは.cshrc類似の名前で定義できます。ユーザーは、特定のシェルへの特定のパスが必要な場合、またはすべての個人設定をそこに維持したい場合は、ここでPATHを設定できます。

要約すると、/etc/profileと/etc/profile.dは伝統的なカスケード設定であり、通常はプライベートドットファイルに追加されます(ユーザーはそれを上書きすることを選択できます)。個人ポイントファイルは通常、ユーザーが設定します。

もちろん、シェルにも環境変数があるので、ローカル環境変数を構成ファイルのデフォルトのPATHに追加または上書きすることもできます。

答え3

他の答えに追加:

bashPATH環境に設定されていない場合は、ハードコーディングされたデフォルト値に設定されます。 Ubuntu Server 16.04.2 システムでは、次のようになります。

$ env -i bash -c 'echo $PATH'
/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:.

次のユーティリティを使用して、値が実際にハードコードされており、環境や一部のファイルから読み取られていないことを確認できますstrings

$ strings /bin/bash | grep /usr/sbin
/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:.

ただし、Arch Linux システムでは異なる結果が表示されます。

$ env -i bash -c 'echo $PATH'
/usr/local/sbin:/usr/local/bin:/usr/bin

bashそのため、使用されているOS /ディストリビューションに従ってバイナリをビルドするときにこのデフォルト値が選択されているように見えます。

答え4

https://askubuntu.com/questions/705912/where-is-my-path-variable-being-set

^^ 役に立ちますね。実際のディレクトリではなく、grep 'PATH=' または 'export PATH=' を使用して設定の場所を確認してください。

関連情報