web-dev-qa-db-ja.com

/ etc / environment vs .profileでのPATH変数の設定

PATH envvarを設定するのに適した場所はどこですか?

~/.profileまたは/etc/environment

PATHが両方の場所で設定されている場合はどうなりますか?最終結果は、これらの2つの場所で設定された両方の値の連結ですか?

55
pkaramol

要約:

  • コンピューターのすべてのユーザーではなく、現在のユーザーのみのPATH変数にパス(たとえば/your/additional/path)を追加する場合は、通常~/.profileの最後に追加しますこれらの2つの例のいずれかです。

    PATH="/your/additional/path:$PATH"
    PATH="$PATH:/your/additional/path"
    

    パスの優先順位は左から右に降順であるため、最初のパスの優先順位が最も高いことに注意してください。 $PATHの左側にパスを追加すると、そのパスの優先度が最も高くなり、その場所の実行可能ファイルが他のすべてをオーバーライドします。右側にパスを追加すると、優先度が最も低くなり、他の場所からの実行可能ファイルが優先されます。

  • ただし、すべてのユーザーにその環境変数を設定する必要がある場合、/etc/environmentをタッチすることはお勧めしませんが、.shで終わるファイル名が/etc/profile.d/であるファイルを作成することをお勧めします。 /etc/profileスクリプトと/etc/profile.d内のすべてのスクリプトは、各ユーザーの個人的な~/.profileとグローバルに同等であり、初期化中にすべてのシェルによって通常のシェルスクリプトとして実行されます。


詳細:

  • /etc/environmentはシステム全体の構成ファイルです。つまり、すべてのユーザーが使用します。ただし、rootが所有しているため、管理ユーザーであり、Sudoを使用して変更する必要があります。

  • ~/.profileは、ユーザー独自のシェル初期化スクリプトの1つです。すべてのユーザーが1つを持ち、他のユーザーに影響を与えることなくファイルを編集できます。

  • /etc/profileおよび/etc/profile.d/*.shは、各ユーザーの~/.profileと同等のグローバル初期化スクリプトです。ただし、グローバルスクリプトはユーザー固有のスクリプトの前に実行されます。メイン/etc/profileは、終了直前に*.sh内のすべての/etc/profile.d/スクリプトを実行します。


  • /etc/environmentファイルには通常、次の行のみが含まれます。

    PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games"
    

    システム上のすべてのユーザーのPATH変数をこのデフォルト値に設定しますが、大きな変更はしないでください。少なくとも/bin/sbin/usr/bin/usr/sbinなどの重要なパスを削除しないでください。

    このファイルは、すべてのユーザーのすべてのシェルによって最初の構成ファイルの1つとして読み取られます。シェルスクリプトではないことに注意してください。これは、何らかの方法で解析され、環境変数の割り当てのみを含む可能性のある単なる構成ファイルです!

  • ~/.profileファイルには多くのものを含めることができます。デフォルトでは、~/binディレクトリが存在するかどうかをチェックし、これをユーザーの既存のPATH変数に追加します。 16.04より前のリリース-新しいリリースでは無条件に追加されます):

    # set PATH so it includes user's private bin if it exists
    if [ -d "$HOME/bin" ] ; then
        PATH="$HOME/bin:$PATH"
    fi
    

    PATHの古い値はここで再利用され、新しいパスはすべてを上書きするのではなく、先頭にのみ追加されることがわかります。手動で新しいパスを追加する場合は、常に新しい文字列のどこかに古い$PATH値を保持する必要があります。

    この初期化スクリプトは、それが属するユーザーのシェルによってのみ読み取られますが、別の条件があります。

    # ~/.profile: executed by the command interpreter for login shells.
    # This file is not read by bash(1), if ~/.bash_profile or ~/.bash_login
    # exists.
    

    したがって、デフォルトのBashシェルを使用する場合、~/.bash_profileの変更をユーザーに反映させるには、~/.bash_loginまたは~/.profileがないことを確認する必要があります。


環境変数の完全な理解については、以下を参照してください。 https://help.ubuntu.com/community/EnvironmentVariables


関連質問: bash.bashrcと/ etc/environmentファイルの違い

65
Byte Commander

/ etc/environment fileはそこでエクスポートを使用できないスクリプトファイルではなく、$ HOMEタイプの変数展開をサポートしていません。simplevariable= valueペアのみです。そのため、そのファイルを使用するには、既存の定義にパスを単に追加する必要があります。これは、特にシステム全体の環境変数設定用です。 1行に1つ。具体的には、このファイルにはシステム全体のロケールとパス設定が保存されます。

〜/ .profile-このファイルは、bashシェルが実行されるたびに実行されます。通常は環境変数に推奨されますが、ログインシェルによってのみ呼び出されるという欠点があるため、有効にするには、ログアウトしてから再度ログインする必要があります-少なくとも、新しいログインシェルを起動します。

3
eGhoul

環境変数を設定する好ましい場所は、いくつかの事項に依存します:

  1. コンピュータを使用しているのはあなただけですか:
    • この場合、_不正なアクセスの危険がないため、設定するのに最適な場所は/etc/environmentです。
  2. システムが多くの人によって使用されている場合
    • variablesに全員がアクセスする必要がある場合、場所は/etc/environmentになりますが、
    • 個々のユーザーがそれらへのアクセスを選択する必要がある場合、それぞれが~/.profile各ユーザーのホームディレクトリにあるため、システムの各ユーザーに関連しています。

システムは/etc/environmentを読み取る前に~/.profileを読み取ります。いいえ連結は発生せず、のようにアレックスPは最後のassignmentが優先されます。

~/.profile/etc/environmentが他のそのような場所でどのようにプレイするかを決定する要因の詳細については、これらの要因がそうであるように here および here に進んでくださいこれらの場所の使用方法に影響を与えます。

1
George Udosen