PATH
設定/etc/profile
やホームディレクトリ.profile
のファイルについていくつかの場所で読みました。
ルートが設定された唯一の場所ですか?もっとよく理解したいです。
/etc/profile
ドキュメントの下の説明に示すように"system-wide .profile file for the Bourne shell"
。これは、設定ファイルがbashのデフォルト設定ファイルであることを意味しますか?
ファイルにPATH
varがまったく設定されていません。ホームディレクトリのファイルには.profile
次の行があります。
PATH="$HOME/bin:$PATH"
PATH
すでに設定されている$PATH
文字列を正しい文字列に$HOME/bin:
関連付けるので、シェイプでリセットされますか?しかし、が唯一のファイル設定の場合、そのコード行のファイルが で定義されていない場合、どこから来るのでしょうetc/profile
か。~/.profile
PATH
$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
他の答えに追加:
bash
PATH
環境に設定されていない場合は、ハードコーディングされたデフォルト値に設定されます。 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=' を使用して設定の場所を確認してください。