Чому так багато програм живе в 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, тому їм не доведеться сканувати диск щоразу, коли користувачі вводять команду.


Windows PATH охоплює більшість бінарних файлів, які постачаються разом із Windows, але звичайні встановлені додатки зазвичай не зустрічаються в PATH. (Ну, додатки з компонентом командного рядка додадуть себе до PATH, але лише графічного інтерфейсу вони зазвичай не роблять.)
cjm

Класно, я завжди розглядав порядок та його значення. Як щодо правила великого пальця? У мене є (майже) все комбінації usr, local, binі sbin( за виключення мого домашнього каталогу користувача).
Емануель Берг
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.