なぜそんなに多くのプログラムがPATHに住んでいるのですか?


10

少なくとも、デスクトップLinuxについて私を困惑させる1つのことは、ほぼすべてが私のPATHにあるということです。何よりも、私はgnome-character-mapやglchessなどのすべてのデスクトップアプリケーションを意味します。これらには、話すコマンドラインインターフェースがないため、ターミナルから定期的にこれらを起動する場合は考えられません-まれなケースでは、完全なタイプを入力する必要があることによって不便になることは想像できませんパス。乱雑に見えるかもしれませんが、それには理由があるのか​​もしれません。

それでは、なぜないこれが起こるの?パフォーマンスまたは保守性に注目すべき影響はありますか?

回答:


14

ユーザーが実行する可能性のあるすべてのコマンドはPATHにあります。それが目的です。これは、というコマンドが含まあなたが直接実行、他の人が直接実行するコマンド、およびそれらが他のコマンドによって呼び出されるので、あなたや他の人が間接的に実行するコマンドを。これは、端末から実行されるコマンドに限定されません。GUIから実行されるコマンドも、コマンド検索パスで検索されます(これもそのためです)。

完全なパスを入力する必要があるのはひどいでしょう:完全なパスが何であるかを知る必要があります!それが/usr/bin(オペレーティングシステムに同梱されているほとんどのプログラムが含まれている)か、または/usr/local/bin(管理者が手動でインストールしたプログラム、および一部のコアOSの一部ではないプログラムが含まれている)かを追跡する必要があります。UNIXのバリアント)、または他のシステム固有のディレクトリ、またはユーザーのホームディレクトリのどこかにあります。

「パフォーマンスや保守性への影響」については、比較対象を言っていないため、答えるのは難しいです。どこにでも絶対パスを入力する必要がある場合と比較すると、それは保守性にとって悪夢です。プログラムを再配置したり、OSに付属しているバージョンやシステム管理者がインストールしたバージョンより新しいバージョンをインストールしたりする場合は、どこでもそのフルパスを置き換える必要があります。いくつかのディレクトリで名前を検索することによるパフォーマンスへの影響は無視できます。

Windowsと比較すると、それはさらに悪いことです。一部のプログラムは、実行可能ファイルだけでなくあらゆる種類のがらくたもPATHに追加PATHし、すべてのプログラムが含まれていない1マイルの長い変数になってしまいます。多くのプログラムは、インストール時にシステムPATHに追加されません。


それはかなり合理的な根拠のように見えます。ご説明ありがとうございます!プログラムを置き換えることについてのビットは非常に理にかなっています。私はそれについてまったく考えていませんでした:)それについて私を印象づける部分は私がプログラミングについて考えるとき私は小さくて説明的な名前空間を持っているのが好きですが、ここではすべてが同じグローバル名前空間にあります* / binのような説明のない場所で、フルパスを確認してください。でもかなり違うものだと思います。
ディランマッコール

4

PATH変数には、ディレクトリパスのリストが含まれています。フルパスを指定せずにユーザーがコマンドを入力すると、このリストに、コマンドにつながるパスが含まれているかどうかがチェックされます。ターミナルやコマンドラインに固有のものはありません。

さらに、Desktop Linuxについても特に何もありません。私のXPシステムからのPATHには、%SystemRoot%\ system32;%SystemRoot%;%SystemRoot%\ System32 \ Wbemが含まれています。これは、おそらくWindowsのほとんどのバイナリをカバーしています。

PATH内のディレクトリは指定された順序で検索され、一致が見つかるとすぐに停止します。システムディレクトリは通常、最優先するために最初にあります。ユーザーは最後にカスタム検索パスを追加する必要があります。

パフォーマンスに関して:ほとんどの最新のシェルはPATHの内容をキャッシュするため、ユーザーがコマンドを入力するたびにディスクをスキャンする必要はありません。


WindowsのPATHは、Windowsに同梱されているほとんどのバイナリをカバーしていますが、インストールする通常のアプリケーションは通常、PATHに含まれていません。(まあ、コマンドラインコンポーネントのあるアプリはPATHに追加されますが、GUIのみのアプリは通常追加されません。)
cjm

クールで、私は常にその順序とその重要性を考えました。経験則はどうですか?私は(ほとんど)の全ての組み合わせを持っているusrlocalbin、とsbin(私のユーザーのホームディレクトリを除きます)。
エマニュエルバーグ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.