Почему в PATH живет так много программ?

10

Одна вещь, которая озадачивает меня по поводу настольного Linux, по крайней мере, это то, что почти все находится в моем PATH. Под всем, я имею в виду каждое настольное приложение, включая такие вещи, как gnome-character-map и glchess. Они не имеют интерфейсов командной строки, о которых можно было бы говорить, поэтому я не могу вспомнить случай, когда я бы регулярно запускал их с терминала - и, в этом маловероятном случае, я не могу представить, чтобы мне было неудобно вводить их полностью пути. Это кажется беспорядочным, но, возможно, есть веская причина.

Итак, почему же это происходит? Есть ли заметное влияние на производительность или ремонтопригодность?

Дилан Макколл
источник

Ответы:

14

Все команды, которые пользователь может захотеть выполнить, находятся в PATH. Вот для чего это. Это включает в себя команды, которые вы запускаете напрямую, команды, которые запускают другие люди напрямую, и команды, которые вы или другие люди запускаете косвенно, потому что они вызываются другими командами. Это не ограничивается командами, запускаемыми из терминала: команды, запускаемые из графического интерфейса, также ищутся в пути поиска команд (опять же, для этого он и нужен).

Потребность набрать полный путь была бы ужасна: вам нужно выяснить, что такое полный путь! Вам нужно будет отслеживать, находится ли он /usr/bin(который содержит большинство программ, поставляемых с операционной системой), или внутри /usr/local/bin(который содержит программы, установленные вручную администратором, а также программы, которые не являются частью основной ОС на некоторых варианты unix), или в каком-то другом системном каталоге, или где-нибудь в домашнем каталоге пользователя.

Трудно ответить о «влиянии на производительность или ремонтопригодность», потому что вы не говорите, с чем сравниваете. Если вы сравниваете с необходимостью везде вводить полный путь, это кошмар для удобства сопровождения: если вы когда-либо перемещаете программу или хотите установить более новую версию, чем та, которая шла с ОС или была установлена ​​системным администратором, Вы должны заменить этот полный путь везде. Влияние на производительность поиска имени в нескольких каталогах незначительно.

Если вы сравниваете с Windows, это еще хуже: некоторые программы добавляют в PATH не только исполняемый файл, но и все виды дерьма, и вы получаете PATHпеременную длиной в милю, которая все еще не включает все программы, потому что многие программы не добавляют себя в системный PATH при их установке.

Жиль "ТАК - перестань быть злым"
источник
Это выглядит довольно рациональным обоснованием. Спасибо вам за разъяснение! Немного о замене программы имеет большой смысл. Я вообще об этом не задумывался :) Меня поражает то, что мне нравится иметь небольшие и описательные пространства имен, когда я думаю о программировании, тогда как здесь все находится в одном и том же глобальном пространстве имен (и, когда мы это делаем, посмотрите на полные пути, в совершенно неописуемых местах, таких как * / bin). Я думаю, что это довольно разные вещи, хотя.
Дилан Макколл
4

Переменная PATH содержит список путей к каталогам. Когда пользователь вводит команду без указания полного пути, этот список проверяется, содержит ли он путь, ведущий к команде. В этом нет ничего конкретного терминала или командной строки.

Более того, в этом нет ничего специфичного для Desktop Linux. PATH из моей системы XP содержит % SystemRoot% \ system32;% SystemRoot%;% SystemRoot% \ System32 \ Wbem, который, вероятно, охватывает большинство двоичных файлов Windows.

Каталоги в PATH ищутся в указанном порядке и останавливаются, как только найдено совпадение. Системные каталоги обычно находятся в начале, чтобы дать им наивысший приоритет. Пользователи должны добавлять пользовательские пути поиска в конце.

Что касается производительности: большинство современных оболочек кэшируют содержимое PATH, поэтому им не нужно сканировать диск каждый раз, когда пользователь вводит команду.

DJF
источник
Windows PATH охватывает большинство двоичных файлов, которые поставляются с Windows, но обычно устанавливаемые вами приложения обычно не находятся в PATH. (Ну, приложения с компонентом командной строки будут добавлять себя в PATH, но обычно только с графическим интерфейсом.)
cjm
Круто, я всегда обдумывал порядок и его значение. Как насчет эмпирического правила? У меня есть (почти) все комбинации usr, local, binи sbin( за исключение моего домашнего каталога пользователя).
Эмануэль Берг