Linuxでディレクトリを'PATH'に追加する方法
重要なポイント
- あなたのPATHは、コマンドを実行する際にオペレーティングシステムが確認する場所のリストであり、実行可能ファイルの正確な場所を手動で指定せずに実行することを可能にします。
- シェルは、シェル組み込みコマンドから始まり、左から右にリストされたディレクトリを検索して、特定の順序でPATH内の実行可能ファイルを検索します。
- export コマンドを使用して、一時的または永続的に .bashrc または .profile ファイルを編集することで、ディレクトリを PATH に追加できます。セキュリティリスクを避けるために、先頭にコロンを追加しないように注意してください。
PATH は、あなたのLinuxコンピュータのバックグラウンドで静かに働く操作子の一つです。ユーザー体験に静かに影響を与えますが、それについて怪しいことはありません。これが何をするのか、そしてどのように調整できるかを説明します。
LinuxにおけるPATHとは何か、そしてどのように機能するのか?
あなたのPATHは、コマンドを実行しようとするたびにオペレーティングシステムが確認する場所のリストです。実行しようとする実行可能ファイルがあなたのPATHに含まれるフォルダにある場合、その実行可能ファイルは正確な場所を手動で指定しなくても実行できます。なぜなら、オペレーティングシステムは既にそれがどこにあるかを知っているからです。
では、実際にはどのように機能するのでしょうか?
ターミナルウィンドウにコマンドを入力してEnterを押すと、コマンドが実行される前にかなりのアクティビティが開始されます。
BashはほとんどのLinuxディストリビューションでのデフォルトシェルです。それは、入力したテキストの行を解釈し、パラメーター、パイプ、リダイレクション、およびその他の要素と混在しているコマンド名を特定します。その後、これらのコマンドの実行可能バイナリを見つけ出し、提供されたパラメーターでそれらを起動します。
シェルが実行可能ファイルを見つけるための最初のステップは、バイナリが関与しているかどうかを特定することです。使用するコマンドがシェル自体の中にある場合(「シェルビルトイン」)は、それ以上の検索は必要ありません。
シェルビルトインは、シェルに不可欠なため、最も見つけやすいです。まるでツールベルトに入っているようなもので、常にあなたと一緒にあります。
しかし、他のツールの一つが必要な場合は、作業場を漁ってそれを見つけなければなりません。それは作業台の上にありますか、それとも壁に掛けてありますか?それが PATH 環境変数の役割です。これはシェルが検索する場所のリストと、検索される順序を保持しています。
コマンドがシェル組み込み、エイリアス、関数、またはスタンドアロンバイナリであるかどうかを確認するには、以下のようにtype コマンドを使用できます。
type cleartype cdこれは、clearがバイナリファイルであり、パス内で最初に見つかったものが/usr/binにあることを示しています。あなたのコンピュータには複数のバージョンのclearがインストールされているかもしれませんが、シェルが使用しようとするのはこれです。
驚くことではなく、cdはシェルのビルトインです。
PATHを表示する方法
あなたの道に何があるかを見るのは簡単です。次のコマンドを入力して、echo コマンドを使用し、` PATH 変数に格納されている値を表示してください:
echo $PATH
出力はコロン(:)で区切られたファイルシステムの場所のリストです。シェルはパスを左から右に検索し、各ファイルシステムの場所をチェックして、コマンドを実行するための一致する実行可能ファイルを探します。
リストを見ながら、検索されるファイルシステムの場所とその検索順序を確認できます:
/usr/local/sbin/usr/local/bin/usr/sbin/usr/bin/sbin/bin/usr/games/usr/local/games/スナップ/bin
すぐには明らかではないかもしれないことは、検索が現在の作業ディレクトリから始まらないということです。むしろ、リストに挙げられたディレクトリを順番に進み、それだけのディレクトリで動作します。
現在の作業ディレクトリがあなたのパスに含まれていない場合、検索されません。また、パスに含まれていないディレクトリにコマンドが保存されている場合、シェルはそれらを見つけられません。
これを示すために、rfという小さなプログラムを作成しました。実行すると、rfはターミナルウィンドウに起動されたディレクトリの名前を表示します。これは/usr/local/binにあります。また、/dave/workディレクトリに新しいバージョンもあります。
私たちは、シェルが見つけて使用するプログラムのどのバージョンであるかを示すために、次のwhichコマンドを入力します:
which rfシェルは見つけたバージョンがパスにあるディレクトリ内のものであると報告します。
起動するために以下のように入力します:
rf
バージョン1.0のrfは実行され、私たちの期待が正しかったことを確認しました。見つかって実行されたバージョンは/usr/local/binにあります。
このコンピュータで他のバージョンのrfを実行するには、以下のようにコマンドラインで実行ファイルへのパスを使用する必要があります:
./work/rfシェルに実行したいrfのバージョンをどこで見つけるかを伝えたので、バージョン1.1が使用されます。このバージョンを好む場合は、それを/usr/local/binディレクトリにコピーして古いものを上書きすることができます。
新しいバージョンのrfを開発しているとしましょう。私たちは、開発とテストを行うために頻繁にそれを実行する必要がありますが、未公開の開発ビルドを本番環境にコピーしたくありません。
あるいは、新しいバージョンのrfをダウンロードし、それを一般公開する前に検証テストを行いたいと思っているかもしれません。
作業ディレクトリをパスに追加すれば、シェルが私たちのバージョンを見つけられるようになります。この変更は私たちにのみ影響を与え、他の人は引き続き/usr/local/binにあるrfのバージョンを使用します。
パスにディレクトリを追加する
ディレクトリを PATH に追加するには、export コマンドを使用できます。これにより、シェルが検索するファイルシステムの場所のリストにそのディレクトリが含まれます。シェルが一致する実行可能ファイルを見つけると、検索を停止しますので、/usr/local/bin の前に自分のディレクトリが最初に検索されるようにする必要があります。
これは簡単にできます。私たちの例では、次のように入力して、ディレクトリをパスの先頭に追加し、最初に検索される場所にします:
export PATH=/home/dave/work:$PATHこのコマンドは、` PATHを追加しているディレクトリ/home/dave/workと現在のパス全体が等しくなるように設定します。
最初のPATHにはドルサイン($)がありません。私たちはPATHの値を設定します。最後の‛ PATHにはドルサインが付いています。なぜなら、PATH変数に格納されている内容を参照しているからです。また、新しいディレクトリと‛ PATH変数名の間にコロン(:)があることに注意してください。
今、道がどのように見えるか見てみましょう:
echo $PATH私たちの/home/dave/workディレクトリはパスの先頭に追加されます。提供したコロンは残りのパスを区切ります。
次のコマンドを入力して、見つかった最初のrfのバージョンを確認します:
which rf証明は実行することであり、以下に示すようにrfを実行します:
rfシェルはバージョン1.1を見つけ、/home/dave/workからそれを実行します。
パスの最後にディレクトリを追加するには、コマンドの最後に移動させるだけです。
export PATH=$PATH:/home/dave/workPATHに何かを永久に追加する方法
ベス・ブルーク・マルチニアックが言ったように、「成功は素晴らしいが、成功は儚い。」ターミナルウィンドウを閉じると、`PATH に加えた変更はすべて消えてしまいます。それらを永続的にするには、export コマンドを設定ファイルに配置する必要があります。
あなたが export コマンドを .bashrc ファイルに入れると、ターミナルウィンドウを開くたびにパスが設定されます。ログインする必要がある SSH セッションとは異なり、これらは「インタラクティブ」セッションと呼ばれます。
昔は、ターミナルセッションにログインするためのパスを設定するために、exportコマンドを.profileファイルに記述していました。
しかし、私たちは .bashrc または .profile ファイルに export コマンドを入れると、対話型とログインターミナルセッションの両方に対してパスが正しく設定されることを発見しました。あなたの経験は異なるかもしれません。すべての可能性に対処するために、両方のファイルでの方法を示します。
/.bashrcファイルを編集するには、/homeディレクトリで以下のコマンドを使用してください:
gedit .bashrcgeditエディタが開き、.bashrcファイルが読み込まれます。
ファイルの一番下までスクロールし、次に以前使用した以下のエクスポートコマンドを追加してください。
export PATH=/home/dave/work:$PATHファイルを保存します。次に、ターミナルウィンドウを閉じて再度開くか、次のようにdotコマンドを使用して.bashrcファイルを読み込みます:
.bashrcその後、以下のechoコマンドを入力してパスを確認します:
echo $PATHこれにより、/home/dave/work ディレクトリがパスの先頭に追加されます。
.profileファイルにコマンドを追加するプロセスは同じです。次のコマンドを入力してください:
gedit .profilegeditエディタは.profileファイルをロードして起動します。
ファイルの一番下に export コマンドを追加し、その後保存してください。新しいターミナルウィンドウを閉じて開くだけでは .profile ファイルを再読み込みさせるには不十分です。新しい設定を有効にするには、ログアウトして再ログインするか、以下に示すように dot コマンドを使用する必要があります:
. .profile誰もが進む道を設定する
システムを使用するすべての人のためにパスを設定するには、/etc/profileファイルを編集できます。
以下のようにsudoを使用する必要があります:
sudo gedit /etc/profilegeditエディタが起動したら、ファイルの最後にエクスポートコマンドを追加します。
ファイルを保存して閉じてください。変更は次回他のユーザーがログインする際に反映されます。
セキュリティに関する注意事項
パスに先頭コロン「:」を誤って追加しないようにしてください。以下のように。
もしそうすると、現在のディレクトリが最初に検索され、これがセキュリティリスクを引き起こします。たとえば、アーカイブファイルをダウンロードし、それをディレクトリに解凍したとします。ファイルを見て、別のZIPファイルがあるのを見つけます。もう一度unzipを呼び出して、そのアーカイブを抽出します。
もし最初のアーカイブに悪意のある実行可能ファイルであるunzipが含まれていた場合、あなたは実際のunzip実行ファイルではなく、その悪質なファイルを誤って起動してしまうでしょう。これはシェルが最初にカレントディレクトリを探すために起こります。
ですので、exportコマンドを入力する際は、常に注意してください。echo ` PATHを使用して、それらを確認し、希望の形になっているかどうかを確かめてください。
Linuxコマンド | ||
ファイル | t | |
プロセス | A | |
ネットワーキング | netstat・ping・traceroute・ip・ss・whois・fail2ban・bmon・dig・finger・nmap・ftp・curl・wget・who・whoami・w・iptables・ssh-keygen・ufw・arping・firewalld |
















