\r\n\r\n
PATHは、Linuxコンピュータのバックグラウンドで静かに操作するものの1つです。ユーザーエクスペリエンスに静かに影響を与えることがありますが、何も問題はありません。その内容や調整方法について説明します。
ターミナルウィンドウにコマンドを入力してEnterキーを押すと、コマンドが実行される前から多くのアクティビティが開始されます。
BashはほとんどのLinuxディストリビューションでデフォルトのシェルです。入力したテキスト行を解釈し、引数やパイプ、リダイレクトなどの内容が混ざったコマンドの名前を特定します。そして、これらのコマンドの実行バイナリを見つけ、あなたが提供した引数でそれらを起動します。
シェルが実行ファイルを見つけるための最初のステップは、それがバイナリファイルを含んでいるかどうかを判断することです。使用するコマンドがシェルそのものにある場合(「シェル組み込み」)、それ以上の検索は必要ありません。
シェルのビルトインはシェルの一部であるため、最も見つけやすい。ツールベルトの中に入れているようなもので、いつも一緒にいるようなものです。
別の道具が必要なときは、作業場内を探し回らなければなりません。作業台の上ですか、それとも壁にかけていますか?環境変数$PATHは、まさにその役割を担っています。シェル検索を行う場所とその順序のリストが含まれています。
あるコマンドがシェルビルドなのか、エイリアスなのか、関数なのか、それともスタンドアローンのバイナリ mv/work/unfile なのかを確認するには、次のように type コマンドを使用します。
type clear type cdこれは、clearがバイナリファイルであり、パスの中で最初に見つかったファイルが/usr/binにあることを示しています。 あなたのコンピュータには複数のバージョンのclearがインストールされているかもしれませんが、シェルはこのバージョンを使用しようとします。
当然のことながら、cdはビルトインシェルである。
パスの中身を見るのは簡単です。次のように入力するだけで、echoコマンドを使い、変数$PATHにある値を表示します。
echo $PATH出力はコロン(:)で区切られたファイルシステムの場所のリストです。シェルはパスを左から右へ検索し、各ファイルシステムの場所をチェックして、コマンドを実行するための実行可能なファイルがあるかどうかを調べます。
リストで検索するファイルシステムの場所と、検索する順番を選択することができます:.
目立たないかもしれませんが、検索がカレントワーキングディレクトリで開始されないということがあります。その代わり、掲載されているディレクトリを通じて、また、掲載されているディレクトリのみを通じて動作します。
現在の作業ディレクトリがパスに含まれていない場合は、検索されません。また、パスに含まれないディレクトリにコマンドが格納されている場合、シェルはそれを見つけることができません。
これを実証するために、rfというアプレットを作成しました。実行すると、rfは起動したディレクトリ名をターミナルウィンドウに表示します。usr/local/binに配置されています。また、/dave/workディレクトリに新しいバージョンを用意しました。
シェルが探して使用するプログラムのバージョンを表示するために、次のコマンドを入力します。
which rfシェルは、見つけたバージョンをパスのディレクトリにあるバージョンとして報告します。
以下のコマンドを入力して起動します。
rfRFのバージョン1.0を実行し、我々の予想が正しいことを確認した。発見され実行されたバージョンは/usr/local/binに配置されている。
このコンピュータで他のバージョンのrfを実行するには、次のようにコマンドラインで実行ファイルへのパスを指定する必要があります。
./work/rfシェルに実行したい rf のバージョンがある場所を教えたので、バージョン 1.1 を使っています。このバージョンが気に入ったら、それを /usr/local/bin ディレクトリにコピーして古いものを上書きします。
例えば、rfの新バージョンを開発するとしよう。開発やテストをしていく中で、頻繁に実行する必要がありますが、リリースされていない開発ビルドを本番環境にコピーすることは避けたい。
あるいは、新しいバージョンのrfをダウンロードし、公開する前に検証テストを行いたい場合もあります。
作業ディレクトリをパスに追加すれば、シェルが我々のバージョンを見つけるようになります。そして、この変更は、他の人がまだ使うであろうrf-in/usr/local/binバージョンにのみ影響します。
そのディレクトリは、シェルが検索するファイルシステムの場所のリストに含まれるようになります。シェルは一致する実行ファイルを見つけると検索を終了するので、/usr/local/binの前に、まず自分のディレクトリを検索するようにする必要があるのです。
この例では、次のように入力して、ディレクトリをパスの先頭に追加し、最初に検索される場所になるようにします。
export PATH=/home/dave/work:$PATHこのコマンドは、$PATHを追加するディレクトリ、/home/dave/workと同じにし、現在のパス全体を設定するものです。
最初のパスには、ドル記号($)がありません。パスの値を設定しました。最後の$PATHにはドル記号がついていますが、これはPATH変数に格納されているものを参照しているためです。また、新しいディレクトリと$PATH変数名の間にコロン(:)があることに注意してください。
今、その道がどうなっているのかを見てみましょう。
echo $PATHhome/dave/work ディレクトリがパスの先頭に追加されましたが、コロンで区切っています。
次のように入力し、私たちのバージョンのrfが最初に見つかったものであることを確認します。
which rfその証拠に、次のようにrfを実行しています。
rfシェルはバージョン1.1を見つけて、/home/dave/workから実行します。
パスの末尾にディレクトリを追加するには、次のようにコマンドの末尾に移動するだけです。
export PATH=$PATH:/home/dave/workベス・ブルック・マーシニアックは、"成功は素晴らしいが、成功ははかない "と言っています。ターミナルウィンドウを閉じた瞬間に、$PATHに加えたすべての変更が消えます。永続的に使用するためには、exportコマンドを設定ファイルに記述する必要があります。
.bashrc ファイルに export コマンドを記述すると、ターミナルウィンドウを開くたびにパスが設定されます。ログインが必要なSSHセッションとは異なり、「対話型」セッションと呼ばれます。
以前は、ログイン端末セッションのパスを設定するために、.profile ファイルに export コマンドを配置していました。
しかし、exportコマンドを.bashrcや.profileファイルに記述すると、対話型端末やログイン型端末のセッションへのパスが正しく設定されることがわかりました。あなたの経験は違うかもしれません。あらゆる可能性に対応するため、この2つのファイルでの操作方法を紹介します。
/homeディレクトリの.bashrcファイルを以下のコマンドで編集してください。
gedit .bashrcgeditエディタが開き、.bashrcファイルを読み込みます。
ファイルの一番下までスクロールして、先ほど使用した以下のexportコマンドを追加してください。
export PATH=/home/dave/work:$PATH次に、ターミナルウィンドウを閉じて開き直すか、dotコマンドを使って、以下のように.bashrcファイルを読み込んでください。
...バシル
次に、以下のechoコマンドを入力して、パスを確認します。
echo $PATHこれにより、/home/dave/work ディレクトリがパスの先頭に追加されます。
.profileファイルにコマンドを追加する方法は同じです。
gedit .profile.profileファイルは、geditエディタ起動時に読み込まれます。
ファイルの一番下にエクスポートコマンドを追加して保存します。ターミナルウィンドウを閉じたり、新たに開いたりしても、.profileファイルを強制的に再読み込みすることはできません。新しい設定を有効にするには、ログアウトして戻るか、次のようにdotコマンドを使用する必要があります。
. .profile関連:Linuxでテキストファイルをグラフィカルに編集するgeditの使い方
システムを使用する人ごとにパスを設定するには、/etc/profile ファイルを編集します。
以下のように、sudoを使用する必要があります。
sudo gedit /etc/profilegeditエディタが起動したら、ファイルの一番下にexportコマンドを追加してください。
これらの変更は、他の人が次にログインしたときに有効になります。
以下のように、誤ってパスの先頭にコロン「:」を付けないように注意してください。
この場合、まずカレントディレクトリを検索することになり、セキュリティ上のリスクが生じます。アーカイブファイルをダウンロードし、ディレクトリに解凍したとします。これらのファイルを表示した後、別のZIPファイルを表示することができます。再度unzipを呼び出すと、アーカイブが展開されます。
最初のアーカイブに悪意のある実行ファイルであるunzipという名前の実行ファイルが含まれている場合、実際のunzip実行ファイルではなく、誤ってこのファイルをトリガーしてしまう可能性があります。これは、シェルが最初にカレントディレクトリを調べるからです。
そのため、exportコマンドを入力する際には注意が必要です。echo$PATHを使ってチェックし、思い通りになっているかどうか確認してください。