重要なポイント
- PATH は、コマンドの実行時にオペレーティング システムがチェックする場所のリストであり、これにより、正確な場所を手動で指定しなくても実行可能ファイルを実行できます。
- シェルは、シェルの組み込みから開始して、リストされたディレクトリを左から右に検索するという特定の順序で PATH 内の実行可能ファイルを検索します。
- .bashrc または .profile ファイルを編集することで、export コマンドを使用して一時的に、または永続的にディレクトリを PATH に追加できます。セキュリティ上のリスクを避けるために、先頭にコロンを追加しないように注意してください。
PATH
、Linux コンピューターのバックグラウンドで動作するサイレント マニピュレーターの 1 つです。これはユーザー エクスペリエンスに静かに影響を与えますが、怪しいものは何もありません。これが何をするのか、そしてどのように調整できるのかについて説明します。
Linux の PATH とは何ですか?また、どのように機能しますか?
PATH は、コマンドを実行しようとするたびにオペレーティング システムがチェックする場所のリストです。実行しようとしている実行可能ファイルが PATH に含まれているフォルダーに含まれている場合、オペレーティング システムがその実行可能ファイルの場所をすでに認識しているため、正確な場所を手動で指定しなくても実行可能ファイルを実行できます。
では、実際に機能的にはどのように動作するのでしょうか?
ターミナル ウィンドウにコマンドを入力して Enter キーを押すと、コマンドが実行される前に非常に多くのアクティビティが開始されます。
Bash は 、ほとんどの Linux ディストリビューションのデフォルトのシェルです。入力したテキスト行を解釈し、パラメータ、 パイプ 、 リダイレクト 、その他のものが混在したコマンド名を識別します。次に、それらのコマンドの実行可能バイナリを見つけて、指定されたパラメータを使用して起動します。
シェルが実行可能ファイルを見つけるために行う最初のステップは、バイナリが含まれているかどうかを識別することです。使用するコマンドがシェル自体 ( 「シェル組み込み」 ) 内にある場合、それ以上の検索は必要ありません。
シェル組み込みはシェルに統合されているため、見つけるのが最も簡単です。ツールベルトに入れているようなものです。いつでもそばにあります。
ただし、他のツールが必要な場合は、ワークショップを探し回って見つける必要があります。作業台の上にありますか、それとも壁掛けですか?それが
PATH
環境変数の役割です。これには、シェルが検索する場所のリストと検索される順序が保持されます。
コマンド
がシェル組み込み、エイリアス、関数、またはスタンドアロン バイナリ mv /work/unfile のいずれで
あるかを確認したい場合は、以下に示すように
type
コマンドを使用できます。
タイプクリア
CDを入力してください
これは、
clear
バイナリ ファイルであり、パス内で最初に見つかったファイルが
/usr/bin
にあることを示しています。コンピュータに複数のバージョンの
clear
インストールされている可能性がありますが、シェルが使用しようとするのはこれです。
当然のことながら、
cd
シェルに組み込まれています。
PATH をリストする方法
進路に何があるのかを簡単に確認できます。以下を入力して
echo
コマンドを使用し、
$PATH
変数に保持されている
値を出力するだけです
。
エコー $PATH
出力は、コロン (
:
で区切られたファイル システムの場所のリストです。シェルはパスを左から右に検索し、コマンドを実行するために一致する実行可能ファイルがないかファイル システムの各場所を確認します。
リストから任意の方法を選択して、検索されるファイル システムの場所と検索される順序を確認できます。
-
/usr/local/sbin -
/usr/local/bin -
/usr/sbin -
/usr/bin -
/sbin -
/bin -
/usr/games -
/usr/local/games -
/snap/bin
すぐには分からないかもしれませんが、現在の作業ディレクトリでは検索が開始されないことです。むしろ、リストされたディレクトリ内でのみ動作します。
現在の作業ディレクトリがパスにない場合、そのディレクトリは検索されません。また、パスにないディレクトリにコマンドが保存されている場合、シェルはそれらを見つけられません。
これを実証するために、
rf
という小さなプログラムを作成しました。
rf
を実行すると、起動元のディレクトリの名前がターミナル ウィンドウに表示されます。これは
/usr/local/bin
にあります。
/dave/work
ディレクトリには新しいバージョンもあります。
次
which
コマンドを入力すると、シェルが
プログラムのどのバージョンを見つけて使用するかが表示されます
。
どのRF
シェルは、見つかったバージョンがパス内のディレクトリにあるバージョンであると報告します。
次のように入力して起動します。
RF
rf
のバージョン 1.0 が実行され、予想が正しかったことが確認されました。見つかって実行されたバージョンは
/usr/local/bin
にあります。
このコンピュータで他のバージョンの
rf
を実行するには、以下に示すように、コマンド ラインで実行可能ファイルへのパスを使用する必要があります。
./work/rf
実行したい
rf
のバージョンを見つける場所をシェルに伝えたので、シェルはバージョン 1.1 を使用します。このバージョンを好む場合は、それを
/usr/local/bin
ディレクトリにコピーし、古いバージョンを上書きできます。
rf
の新しいバージョンを開発しているとします。開発やテストを行う際には頻繁に実行する必要がありますが、未リリースの開発ビルドをライブ環境にコピーしたくありません。
あるいは、
rf
の新しいバージョンをダウンロードし、一般公開する前に検証テストを行いたいと考えている場合もあります。
作業ディレクトリをパスに追加すると、シェルがバージョンを見つけます。そして、この変更は私たちにのみ影響します。他の人は引き続き
/usr/local/bin
にある
rf
のバージョンを使用します。
ディレクトリを PATH に追加する
export
コマンドを使用して、
ディレクトリを
PATH
に追加できます。このディレクトリは、シェルが検索するファイル システムの場所のリストに含まれます。シェルは一致する実行可能ファイルを見つけると検索を停止するため、
/usr/local/bin
の前にディレクトリを検索するようにしてください。
これは簡単です。この例では、次のように入力してディレクトリをパスの先頭に追加し、最初に検索される場所になります。
エクスポート PATH=/home/dave/work:$PATH
このコマンドは、
$PATH
を追加するディレクトリ
/home/dave/work
に設定し、その後、現在のパス全体に設定します。
最初の
PATH
にはドル記号 (
$
) がありません。
PATH
の値を設定します。
PATH
変数に格納されている内容を参照しているため、最後の
$PATH
ドル記号が付いています。また、新しいディレクトリと
$PATH
変数名の間にあるコロン (
:
に注意してください。
パスがどのようになるかを見てみましょう。
エコー $PATH
/home/dave/work
ディレクトリがパスの先頭に追加されます。指定したコロンは、パスの残りの部分を区切ります。
次のように入力して、
rf
のバージョンが最初に見つかったバージョンであることを確認します。
どのRF
以下に示すように、プリンの証明は
rf
実行しています。
RF
シェルはバージョン 1.1 を見つけて
/home/dave/work
から実行します。
ディレクトリをパスの末尾に追加するには、次のようにコマンドの末尾にディレクトリを移動するだけです。
エクスポート PATH=$PATH:/home/dave/work
PATH に永続的に何かを追加する方法
ベス・ブルック=マルシニアック
が言ったように、「成功するのは良いことですが、成功は儚いものです。」ターミナル ウィンドウを閉じると、
$PATH
に加えた変更はすべて失われます。それらを永続的にするには、設定ファイルに
export
コマンドを含める必要があります。
.bashrc
ファイルに
export
コマンドを入れると、ターミナル ウィンドウを開くたびにパスが設定されます。ログインする必要がある
SSH
セッション
とは異なり、これらは「対話型」セッションと呼ばれます。
以前は、
.profile
ファイルに
export
コマンドを記述して、ターミナル セッションのログイン用のパスを設定していました。
ただし、
export
コマンドを
.bashrc
ファイルまたは
.profile
ファイルに置くと、対話型セッションとログイン ターミナル セッションの両方のパスが正しく設定されることがわかりました。あなたの経験は異なるかもしれません。あらゆる不測の事態に対処するために、両方のファイルでそれを行う方法を示します。
/home
ディレクトリで次のコマンドを使用して、
.bashrc
ファイルを編集します。
gedit .bashrc
gedit
エディター
が開き、
.bashrc
ファイルがロードされます。
ファイルの一番下までスクロールし、前に使用した次のエクスポート コマンドを追加します。
エクスポート PATH=/home/dave/work:$PATH
ファイルを保存します。次に、次のようにターミナル ウィンドウを閉じて再度開くか、
dot
コマンドを使用して
.bashrc
ファイルを読み取ります。
. .bashrc
次に、次の
echo
コマンドを入力してパスを確認します。
エコー$PATH
これにより
/home/dave/work
ディレクトリがパスの先頭に追加されます。
コマンドを
.profile
ファイルに追加するプロセスは同じです。次のコマンドを入力します。
gedit .profile
gedit
エディターが起動し、
.profile
ファイルがロードされます。
ファイルの最後に
export
コマンドを追加し、保存します。
.profile
ファイルを強制的に再読み込みするには、新しい端末ウィンドウを閉じてから開くだけでは不十分です。新しい設定を有効にするには、ログアウトして再度ログインするか、以下に示すように
dot
コマンドを使用する必要があります。
。 。プロフィール
全員にパスを設定する
システムを使用するすべてのユーザーのパスを設定するには、
/etc/profile
ファイルを編集します。
次のように
sudo
を使用する必要があります。
sudo gedit /etc/profile
gedit
エディターが起動したら、ファイルの最後にエクスポート コマンドを追加します。
ファイルを保存して閉じます。変更は、他のユーザーが次回ログインしたときに有効になります。
セキュリティに関する注意事項
以下に示すように、パスの先頭に誤ってコロン「
:
」を追加しないように注意してください。
これを行うと、最初に現在のディレクトリが検索されるため、セキュリティ上のリスクが生じます。アーカイブ ファイルをダウンロードし、ディレクトリに解凍したとします。ファイルを見ると、別の zip ファイルが表示されます。もう一度 unzip を呼び出して、そのアーカイブを抽出します。
最初のアーカイブに、悪意のある実行可能ファイルである
unzip
という実行可能ファイルが含まれていた場合、実際の
unzip
実行可能ファイルの代わりに、誤ってその実行可能ファイルを起動してしまいます。これは、シェルが最初に現在のディレクトリを検索するために発生します。
したがって、
export
コマンドを入力するときは常に注意してください。
echo
$PATH を使用してそれらを確認し、希望どおりであることを確認します。





