为什么PATH中包含这么多程序?


10

至少让我感到困惑的是台式机Linux,一件事就是我的PATH中几乎所有内容。每件事,我的意思是每个桌面应用程序,包括gnome-character-map和glchess之类的东西。这些没有命令行界面可言,所以我想不出要定期从终端启动这些界面的情况-而且在这种不太可能的情况下,我无法想象需要输入完整的命令行界面而感到不便路径。看起来似乎很混乱,但是也许有充分的理由。

那么,为什么这样呢?对性能或可维护性有任何显着影响吗?

Answers:


14

用户可能要运行的所有命令都在PATH中。这就是它的目的。这包括直接运行的命令,其他人直接运行的命令以及您或其他人由于其他命令调用而间接运行的命令。这不仅限于从终端运行的命令:还从命令搜索路径中搜索从GUI运行的命令(同样,这就是它的作用)。

需要输入完整路径会很糟糕:您需要找出完整路径是什么!您需要跟踪它是否在/usr/bin(包含操作系统随附的大多数程序)或/usr/local/bin其中(包含由管理员手动安装的程序,以及不属于某些核心操作系统的程序)。 Unix变体),其他特定于系统的目录或用户主目录中的某个位置。

关于“对性能或可维护性的影响”,很难回答,因为您没有说要与之进行比较。如果要与必须在各处键入完整路径进行比较,那么这就是可维护性的噩梦:如果您要重新定位程序,或者要安装的版本比操作系统随附的版本或系统管理员安装的版本新,您必须在任何地方替换完整路径。在几个目录中查找名称对性能的影响可以忽略不计。

如果您要与Windows进行比较,那就更糟了:有些程序不仅向可执行文件添加了可执行文件,还向PATH添加了各种废话,最后您得到了一英里长的PATH变量,该变量仍不包括所有程序,因为许多程序在安装时不会将自己添加到系统PATH中。


这看起来很合理。谢谢你的解释!关于替换程序的含义很有意义。我一点都没想过:)让我大吃一惊的部分是,当我考虑编程时,我喜欢拥有小的描述性名称空间,而这里的所有内容都属于同一全局名称空间(当我们这样做时,请查看完整路径,例如* / bin)。我想它们是完全不同的东西。
迪伦·麦考

4

PATH变量包含目录路径列表。当用户键入命令而不提供完整路径时,将检查此列表是否包含导致该命令的路径。本质上没有关于它的终端或命令行。

而且,它也没有特定于桌面Linux的东西。我的XP系统中的PATH包含%SystemRoot%\ system32;%SystemRoot%;%SystemRoot%\ System32 \ Wbem,这可能涵盖了大多数Windows二进制文件。

按照指定的顺序搜索PATH中的目录,并在找到匹配项后立即停止。系统目录通常在开始时就赋予它们最高的优先级。用户应在末尾附加自定义搜索路径。

至于性能:大多数现代的shell都缓存PATH的内容,因此不必在用户每次输入命令时都扫描磁盘。


Windows PATH涵盖了Windows附带的大多数二进制文件,但是您通常无法在PATH中找到您安装的普通应用程序。(好吧,具有命令行组件的应用程序会将自己添加到PATH中,但只有GUI应用程序通常不会添加到PATH中。)
cjm 2012年

太酷了,我一直在考虑顺序及其意义。经验法则如何?我有(几乎)的每个组合usrlocalbin,和sbin(不包括我的用户主目录)。
伊曼纽尔·伯格
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.