![为什么这么多程序存在于 PATH 中?](https://linux22.com/image/24738/%E4%B8%BA%E4%BB%80%E4%B9%88%E8%BF%99%E4%B9%88%E5%A4%9A%E7%A8%8B%E5%BA%8F%E5%AD%98%E5%9C%A8%E4%BA%8E%20PATH%20%E4%B8%AD%EF%BC%9F.png)
至少,桌面 Linux 令我困惑的一件事是,几乎所有内容都在我的 PATH 中。我所说的一切,是指每一个桌面应用程序,包括 gnome-character-map 和 glchess 之类的东西。这些没有命令行界面可言,所以我无法想象我会定期从终端启动它们的情况 - 而且,在这种不太可能的情况下,我无法想象需要输入完整的内容会带来不便。路径。它看起来很混乱,但也许有一个很好的理由。
所以为什么做这会发生吗?对性能或可维护性有什么显着影响吗?
答案1
用户可能想要运行的所有命令都在 PATH 中。这就是它的用途。这包括以下命令你直接运行的命令、其他人直接运行的命令以及您或其他人因被其他命令调用而间接运行的命令。这不仅限于从终端运行的命令:从 GUI 运行的命令也会在命令搜索路径中搜索(同样,这就是它的用途)。
需要输入完整路径会很糟糕:您需要找出完整路径是什么!您需要跟踪它是否位于/usr/bin
(其中包含操作系统附带的大多数程序)或/usr/local/bin
(其中包含由管理员手动安装的程序,以及不属于某些操作系统核心操作系统的程序) unix 变体),或某些其他特定于系统的目录,或用户主目录中的某个位置。
很难回答“对性能或可维护性的影响”,因为您没有说出要与什么进行比较。如果您与必须在任何地方键入完整路径进行比较,那么这对于可维护性来说是一场噩梦:如果您重新定位了程序,或者如果您想要安装比操作系统附带的或由系统管理员安装的版本更新的版本,您必须到处替换该完整路径。在几个目录中查找名称对性能的影响可以忽略不计。
如果你与 Windows 进行比较,情况会更糟:有些程序不仅添加了可执行文件,还添加了各种垃圾到 PATH 中,最终你会得到一个一英里长的PATH
变量,但仍然不包含所有程序,因为许多程序在安装时不会将自己添加到系统路径中。
答案2
PATH 变量包含目录路径列表。当用户键入命令而不提供完整路径时,将检查此列表是否包含指向该命令的路径。它本身没有任何特定于终端或命令行的内容。
此外,它也没有任何桌面 Linux 特有的东西。我的 XP 系统中的 PATH 包含%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem这可能涵盖了 Windows 的大部分二进制文件。
按照指定的顺序搜索 PATH 中的目录,并在找到匹配项后立即停止。系统目录通常位于开头,具有最高优先级。用户应在末尾附加自定义搜索路径。
至于性能:大多数现代 shell 都会缓存 PATH 的内容,因此它们不必在用户每次输入命令时扫描磁盘。