PATH
envvar を設定するのに適した場所はどこですか?
~/.profile
または/etc/environment
?
PATH
両方の場所に設定されている場合はどうなりますか?最終結果は、これらの2つの場所で設定された両方の値の連結ですか?
PATH
envvar を設定するのに適した場所はどこですか?
~/.profile
または/etc/environment
?
PATH
両方の場所に設定されている場合はどうなりますか?最終結果は、これらの2つの場所で設定された両方の値の連結ですか?
回答:
概要:
あなたはパス(たとえばを追加したい場合は/your/additional/path
、あなたに)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
無条件にそれを追加している- - Ubuntuは16.04前にリリース高齢に(このように、変数と18.04を上、「〜/ .local / bin」も追加されます):
# 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を参照して ください。
~/.profile
の存在をチェックしません~/bin
が、それは単にラインを持っている:PATH="$HOME/bin:$HOME/.local/bin:$PATH"
/etc/skel/.profile
16.04には、私が言及した行があります。以前のリリースでユーザーを作成したようです。
この答えは、主に、さまざまな構成ファイルで指定された場合のような環境変数
PATH
が割り当てられる順序に関するものです。また、通常それらを設定する場所についても説明しますが、以下のリストでは、ファイルの使用を検討すべき順序でファイルをリストしていません。PATH
Ubuntu での設定およびその他の環境変数に関する一般的な情報については、EnvironmentVariablesおよびこの質問に対するその他の回答を読むこともお勧めします。
設定PATH
する場所は、設定する必要があるユーザーと、いつどのように設定するかによって異なります。決定の一部は、環境変数をすべてのユーザーに設定するか、ユーザーごとに設定するかです。不明な場合は、システム全体ではなく、1人のユーザー(アカウントなど)のみに設定することをお勧めします。
以下のようAlexPは言う、PATH
環境変数は、それがされた値になります割り当てられた最新のを。実際には、ほとんどの場合、を設定すると、以前のエントリが保持されるように、新しい値に古い値PATH
を含めます。PATH
したがって、実際にPATH
は、複数のファイルから設定される場合、通常はすべてのファイルで指定されたエントリが含まれます。しかし、それは、最初のPATH
変数を除いて、それを設定するすべてのファイルが通常変数自体を参照し、その古い値が新しい値を含むためにのみ起こります。
したがって、実際には、PATH
さまざまなファイルの設定が有効になる順序を尋ねています。
設定PATH
する一般的な汎用の場所を、ユーザーがログインするときに有効になる順序で以下にリストします。通常使用することを検討する順序ではありません。下記に記載されている場所は、それぞれ設定するための合理的な選択であるPATH
にいくつかの状況が、唯一のいくつかは、ほとんどの時間は良い選択です。
以下のリストには、などのディレクトリ名が表示され~/.profile
ます。チルダの展開に慣れていない場合~/
、現在のユーザーのホームディレクトリを参照します。主にコンパクト化のためにこの構文を使用します。シェルスクリプトではサポートされていますが、PAM構成ファイルではサポートされていません。
/etc/environment
UbuntuのPAM/etc/environment
は、そのファイルが存在する場合、デフォルトで設定されている環境変数を設定します。これが、すべてのユーザーの環境変数が最も一般的に設定される方法です。
$ cat /etc/environment
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games"
ユーザーアカウントだけでなく、すべてのユーザーアカウントに環境変数を設定する必要がある場合は、おそらくそのファイルを変更するのが最善の選択です。最初にバックアップすることをお勧めします。このファイルをバックアップする1つの方法は、次を実行することです。
sudo cp /etc/environment /etc/environment.orig
.orig
あなたが混乱したり、すでに使用されていないのですバックアップファイルは何も命名についての良い感じることができる-拡張子は特に必要ありません。(加えて.orig
、.old
、.backup
および.bak
一般的です。)
あなたは、rootユーザー(と他のファイルを編集可能性のいずれかの方法でこのファイルを編集することができsudoedit /etc/enviromnment
、sudo nano -w /etc/environment
、gksudo gedit /etc/environment
、など)
/etc/environment
変数の古い値を自動的に含めることはサポートしていません。しかし、これは通常は不要です。ほとんどの場合、編集してすべてのユーザーに環境変数を設定する/etc/environment
ので、ユーザーがログインするときにそれを初期値にする必要があります。ユーザーは、必要に応じて変更できます。通常、ユーザーがこれを実行できると便利です。
/etc/security/pam_env.conf
PAMは、ユーザー/etc/security/pam_env.conf
ごとの~/.pam_environment
ファイルで使用されるのと同じ構文で指定されたから、すべてのユーザーの環境変数を読み取ります(以下を参照)。
同じ環境変数の両方に設定されている場合/etc/environment
と/etc/security/pam_env.conf
、の値pam_env.conf
に使用される-その値は以下のように指定されていてもDEFAULT
ではなくOVERRIDE
。
あなたがラインに取って代わるときしかし、environment
中1でpam_env.conf
、あなたは取って代わら値の内容を含めることができます。詳細については、以下のセクションを参照し.pam_environment
てください(同じ構文を使用しているため)。
通常、編集する必要はありません。その場合、非常に注意する必要がpam_env.conf
あります。通常、不正な形式の行により、通常のユーザーアカウントがすべてログインできなくなるためです。たとえば、デフォルトにpam_env.conf
は次の行が含まれます。
#PATH DEFAULT=${HOME}/bin:/usr/local/bin:/bin\
#:/usr/bin:/usr/local/bin/X11:/usr/bin/X11
これは、いくつかの例の1つとして提示されています。それが説明するものの1つは、複数の行に割り当てを分割する方法\
です。最初の行のコメントを外したが、2行目のコメントを外すのを忘れたとします。
PATH DEFAULT=${HOME}/bin:/usr/local/bin:/bin\
#:/usr/bin:/usr/local/bin/X11:/usr/bin/X11
これをしないでください!
私は偶然に自分自身をテストしましたが、ユーザーが正常にログインできませんでした。修正するには、リカバリモードで起動して、元に戻す必要がありました。(幸いなことに、これはテストにのみ使用する仮想マシンで実行したため、問題は発生しませんでした。)
.pam_environment
ユーザーのホームディレクトリ内単一のユーザーに環境変数を設定する方法の1つは、そのユーザー.pam_environment
がホームディレクトリで編集(または作成)することです。このファイルに設定された値は、グローバル/etc/environment
ファイルに設定された値よりも優先されます。
.pam_environment
ユーザーアカウントが最初に作成されたときにユーザーのホームフォルダーにコピーされるファイルのスケルトンの一部ではありません。ただし、そのファイルをホームディレクトリに作成する場合、それを使用してなどの環境変数を設定できますPATH
。/etc/environment
(ただし/etc/security/pam_env.conf
)とは異なり、ユーザーごとの.pam_environment
ファイルは、環境変数の古い値を新しい値に拡張することをサポートします。ただし、これらはシェルスクリプトではないため、これを実現するには特別な構文を使用する必要があります。これは、などのファイルで使用する構文とは多少異なります.profile
。
たとえばbin2
、ホームディレクトリにの最後に追加したいディレクトリがある場合PATH
、次の行を.pam_environment
次の行に追加することでそれを行うことができます。
PATH DEFAULT=${PATH}:/home/@{PAM_USER}/bin2
参照サブセクションのEnvironmentVariables、(上記の例では密接に適合された)を、そして詳細については。~/.pam_environment
man pam_env
man pam_env.conf
これは、Ubuntuユーザーが環境変数を変更または追加するための推奨される方法としてかつて宣伝されていましたが、依然として合理的で許容可能な選択肢と考えられていますが、編集する場合は注意が必要.pam_environment
です。システム全体の編集/etc/security/pam_env.conf
(上記を参照)と同様に、ユーザーの.pam_environment
ファイルの不正な行はログインの成功を妨げます。(私はこれをテストしている- 。目的に今回の)方法について提言をしている進化し、参照グンナーHjalmarssonのコメント 以下と、このubuntu-devel
議論。
一般に、このようなミスはpam_env.conf
1人のユーザーにしか影響しないため、の不正な行よりもはるかに深刻ではありません。ただし、ログインを許可するユーザーアカウントが1つしかないデスクトップUbuntuシステムの場合、編集中のこのようなミスは、誤った編集.pam_environment
と同じくらいひどくなりpam_env.conf
ます-まだログインしていない場合は、できませんリカバリモードで(またはライブUSBなどから)起動せずに修正します。
(他のユーザーアカウントを持っている場合は、別のユーザーとしてログインして問題を修正できます。管理者でなくsudo
、rootになれない場合でも、実行し、(自分の)パスワードではなく入力するように求められます。 。ゲストそれは使用してから禁止されているようアカウントは、しかし、これを行うことはできません別のユーザーの身元を引き受けること。)su your-account
su
/etc/profile
および内部のファイル/etc/profile.d/
Bourne互換シェル(bash
Ubuntuのデフォルトのユーザーシェルを含む)は/etc/profile
、ログインシェルとして呼び出されたときにコマンドを実行します。
Ubuntuの/etc/profile.d
終わり:
if [ -d /etc/profile.d ]; then
for i in /etc/profile.d/*.sh; do
if [ -r $i ]; then
. $i
fi
done
unset i
fi
これにより、/etc/profile.d/
名前が終わるディレクトリ内の任意のファイルのコマンド.sh
も実行されます。
ほとんどのディスプレイマネージャーは、グラフィカルログインでもコマンド/etc/profile
(およびファイル/etc/profile.d
)を実行します。ただし、すべてがそうとは限らず、代わりにPAMによって提供される機能を使用することを支持する重要な議論です(上記を参照)-このシステムへのグラフィカルなログインが決してない場合を除き、たとえば、 GUIがインストールされていないサーバー。
でシステム全体の環境変数を設定するのが伝統的ですが/etc/profile
、これは多くの場合、もはや最良の選択ではありません。で環境変数を設定できず/etc/environment
、すべてのユーザーに設定する必要がある場合は、自分で/etc/profile.d/
編集するよりも新しいファイルを作成する方がおそらく良いでしょう/etc/profile
。この理由の1つは、Ubuntuをアップグレードすると、新しいデフォルト/etc/profile
ファイルが作成される可能性があるためです。アップグレードの実行方法に応じて、その特定の更新された構成ファイルに先立って、(変更を加えた)古いファイルが保持されるか、状況を処理するように求められます。
同じ環境変数がに設定され/etc/profile
、1つ以上のファイルがに設定されている場合/etc/profile.d
、どちらが最後に実行されますか?これは、/etc/profile
そのセット内のコマンドがprofile.d
(上記で引用したコードによって)ファイルがソースされる前または後に表示されるかどうかに依存します。のコマンドは/etc/profile
表示順に実行されます。
/etc/profile
シェルスクリプトで、その構文があるではない上記のPAM設定ファイルと同じ。その構文は、ユーザーごとの~/.profile
ファイルの構文と同じです(以下を参照)。
特定のディレクトリを追加する(およびすべてのユーザーに対して追加する)かどうかを決定するコードを記述する必要がある場合PATH
、それを使用/etc/environment
または/etc/security/pam_env.conf
実行することはできません。これはおそらく、使用する方が良いです主な状況である/etc/profile
か/etc/profile.d/
代わりに。
.bash_profile
ユーザーのホームディレクトリ内ユーザーが持っている場合~/.bash_profile
、bashは代わりにそれを使用しています~/.profile
か~/.bash_login
(下記参照します)。通常.bash_profile
、ホームディレクトリにある必要はありません。
その場合、通常、ソースへのコマンド~/.profile
(例:)を含める必要があります. "$HOME/.profile"
。そうしないと、ユーザーごとの.profile
ファイルの内容はまったく実行されません。
.bash_login
ユーザーのホームディレクトリ内ユーザーがを持っている場合~/.bash_login
、bashは~/.profile
(以下を参照)の代わりにそれを使用します(~/.bash_profile
存在しない場合)。
の場合と同様に.bash_profile
、通常.bash_login
、ホームディレクトリにファイルを置くべきではありません。
.profile
ユーザーのホームディレクトリ内。Bourneスタイルのシェルをログインシェルとして実行すると、コマンドを実行します/etc/profile
(通常、ファイル内のコマンドを実行させるコマンドが含まれます/etc/profile.d/
-上記を参照)。その後.profile
、ユーザーのホームディレクトリでコマンドを実行します。このファイルは、ユーザーごとに個別です。(Bashは実際に実行される.bash_profile
か.bash_login
、存在する場合は代わりに実行されますが、Ubuntuシステムのユーザーの場合、これらのファイルはほとんど存在しないか、存在します。詳細については、上記およびBashマニュアルの6.2 Bashスタートアップファイルを参照してください。)
~/.profile
したがって、ユーザーがログオン時に実行するコマンドを配置する主な場所です。を設定するのは伝統的な場所ですPATH
が、Ubuntuにはpam_envモジュールとsupportがあるため~/.pam_environment
、それを使用することを検討する必要があります。
同じように/etc/profile
、ほとんどが行うものの、すべてのディスプレイマネージャは、グラフィカルログインのため、このファイルを実行しません。これが~/.pam_environment
環境変数の設定を好む理由です(人が好む/etc/environment
ように/etc/profile
)。
あなたには、環境変数を展開することができPATH
、設定したときに、自分自身をPATH
中.pam_environment
(上記参照します)。ただし、PATH
より洗練された方法で設定する必要がある場合は、.profile
代わりに使用する必要があります。特に、ユーザーがログインするたびにディレクトリが存在するかどうかを確認し、存在する場合にのみ追加するPATH
場合、.pam_environment
ファイルを使用してそのディレクトリをに追加することはできませんPATH
。
たとえば、.profile
Ubuntu のデフォルトのユーザーごとのファイルは、次で終わる:
# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
PATH="$HOME/bin:$PATH"
fi
詳細については、Byte Commanderの回答に対するGunnar Hjalmarssonのコメントを参照してください。
これbin
により、ホームディレクトリのサブディレクトリがあるかどうかが確認されます。その場合、サブディレクトリをの先頭に追加しますPATH
。
ユーザーがログインするときに環境変数を設定する方法は他にもあり、それはログインのタイプにより大きく依存します。たとえば、グラフィカルログインまたはSSHベースのリモートログインのみのために設定される環境変数が存在する場合があります。上記のリストはそのような場合をカバーしていません。
私は、人々は時々同じように、環境変数を定義するいくつかのファイルを残してきた~/.bashrc
と/etc/bash.bashrc
、彼らは一般的に設定するための場所をお勧めされていないのでPATH
、あなたが実際にこの目的のためにそれらを使用する必要があることはまれです。これらのファイルを使用してディレクトリを追加したPATH
場合、それらは時々何度も追加され、調査するとき非常に混乱します$PATH
。(極端な場合、これにより速度が低下する可能性がありますが、通常はすべてをきれいに理解しやすくするだけです。)
以来bash
、ユーザーのためのUbuntuのデフォルトのログインシェルで、ほとんどのユーザーはそれまたは他のいくつかのPOSIX互換のシェルを使用して、私は環境変数がのような他の非ボーンスタイルのシェルに設定されているかについての情報を省略しましたtcsh
。
/etc/environment
/ ~/.pam_environment
を言及しました。開発者と相談した後、PAMと/etc/profile.d/*.sh
/の間で中立になるように変更しましたが~/.profile
、今でもそのように見ている傾向があります。
/etc/profile.d/*.sh
/ を支持する重要な引数は~/.profile
、構文がより単純であり、エラーの場合にlightdm / gdmが寛容であることです(構文エラーでさえログインを妨げることはありませんが、警告メッセージが表示されるだけです)。
pam_env.so
、あなたは意味しましたpam_env.conf
か?
pam_env.conf
。ありがとう!私はそれを修正するために編集しました。
/ etc / environmentファイルは、そこでエクスポートを使用できないスクリプトファイルではなく、$ HOMEタイプの変数拡張をサポートしていません。simplevariable= valueペアのみです。そのため、そのファイルを使用するには、単に既存の定義にパスを追加する必要があります。これは、特にシステム全体の環境変数設定用です。1行に1つ。具体的には、このファイルにはシステム全体のロケールとパスの設定が保存されます。
〜/ .profile-このファイルは、bashシェルが実行されるたびに実行されますが、通常は環境変数に推奨されますが、ログインシェルによってのみ呼び出されるという欠点があるため、有効にするために必要になりますログアウトして再度ログインするには-または少なくとも、新しいログインシェルを起動します。
環境変数を設定するための好ましい場所は、いくつかのことによって異なります。
/etc/environment
_unauthorizedアクセスの危険がないため、設定するのに最適な場所になります。/etc/environment
、~/.profile
、それが各ユーザーのホームディレクトリに置かれますので、システムの各ユーザーに関係します。システムは読み取りの/etc/environment
前に読み取り~/.profile
ます。いいえ連結は発生しないなど、アレックスPが言った最後の割り当てパスのが優先されます。
どのように決定する要因でより詳細な一見のための~/.profile
および/etc/environment
他のそのような場所に出て遊ぶ行くここと、ここで、これらの要因は、あなたがこれらの場所を使用する方法に影響を与えるだろうとして、。