Різниця між bin, sbin, usr/bin, usr/sbin

30 листопада 2010 року Девід Коллієр (David Collier) писав:

Я помітив, що в busybox посилання розкладено по цих чотирьох директоріях.
Чи є якесь просте правило, щоб визначити, в якій директорії яке з посилань має лежати…
Наприклад, kill лежить у /bin, а killall - у /usr/bin... Я не бачу жодної логіки в такому поділі.

Ви, напевно, знаєте, що Кен Томпсон і Денніс Рітчі створили Unix на PDP-7 1969-го. Так ось, приблизно в 1971 році вони проапгрейдилися до PDP-11 з парою дисків RK05 (по 1,5 мегабайта кожен).

Коли операційна система розрослася і перестала поміщатися на першому диску (на якому була розташована коренева ФС), вони перенесли частину на другий, де розташовувалися домашні директорії (тому точка монтування називалася /usr - від слова user). Вони продублювали там всі необхідні директорії ОС (/bin, /sbin, /lib, /tmp...) і складали файли на новий диск, тому що на старому закінчилося місце. Потім у них з'явився третій диск, вони примонтували його в директорії /home і перенесли туди домашні директорії користувачів, щоб ОС могла зайняти все місце, що залишилося на двох дисках, а це були цілих три мегабайти (Огого!).

Зрозуміло, їм довелося ввести правило, що «коли операційна система завантажується, вона повинна бути в змозі примонтувати другий диск в директорію / usr, тому не треба класти програми типу mount на другий диск в / usr, а то отримаємо проблему курки та яйця». Так просто. І це стосувалося Unix V6 35 років тому.

Поділ /bin та /usr/bin (і всіх подібних директорій) — це наслідок тих подій, деталь реалізації з 70-х, яка досі протягом десятиліть копіювалася бюрократами. Вони ніколи не ставили питання чомуВони просто робили так. Цей поділ перестав мати сенс ще до того, як Linux був створений з кількох причин:

  1. При завантаженні використовується initrd або initramfs, який бере на себе проблеми типу цей файл нам потрібен раніше ніж той. Таким чином, у нас вже є тимчасова файлова система, яка використовується для завантаження решти.
  2. бібліотеки, що розділяються (які були додані в Unix хлопцями з Berkley) не дозволяють вам незалежно змінювати вміст /lib і /usr/lib. Ці дві частини повинні відповідати один одному, інакше вони не працюватимуть. Цього не відбувалося 1974-го, оскільки тоді вони мали деяку незалежність через статичну лінківку.
  3. Дешеві жорсткі диски подолали бар'єр у 100 мегабайт десь 1990-го і приблизно водночас з'явилися програми для зміни розміру розділів (partition magic 3.0 вийшла 1997-го).

Зрозуміло, оскільки поділ є, деякі люди вигадали правила, які його виправдовують. Типу, кореневий розділ необхідний будь-яких загальних штучок ОС, а /usr треба класти свої локальні файли. Або в / поміщають те, що розповсюджує AT&T, а в / usr - те, що твій дистрибутив, IBM AIX або Dec Ultrix, або SGI Irix додали, а в / usr / local лежать файли, специфічні для твоєї системи. А потім хтось вирішив, що /usr/local - це не потрібне місце, щоб туди встановлювати новий софт, так що давайте ще додамо /opt! Не здивуюся, якщо з'явиться і /opt/local…

Зрозуміло, за 30 років через такий поділ з'являлися і зникали різні цікаві специфічні для окремих дистрибутивів правила. Наприклад, "/tmp очищається при перезавантаженні, а /usr/tmp - ні". (І в Ubuntu /usr/tmp немає в принципі, а в Gentoo /usr/tmp - це символічне посилання на /var/tmp, на який тепер поширюється те правило, і він не очищується при перезавантаженні. Так, це все було ще до tmpfs А ще буває, що коренева ФС доступна тільки на читання, і тоді в / usr теж не треба нічого писати, а треба писати в / var. переважно не можна писати, крім того, що в / etc, яку іноді намагалися перенести в / var ...)

Бюрократи на кшталт Linux Foundation (які поглинули Free Standards Group під час розширення роки тому) із радістю документують та ускладнюють ці правила, навіть не намагаючись зрозуміти, чому вони з'явилися. Вони не здогадуються, що Кен і Денніс просто перенесли частину ОС до їхньої домашньої директорії, через те, що диск RK05 на PDP-11 був занадто малий.

Я практично впевнений, що в busybox просто поміщає файли так само, як це склалося історично. Немає жодної реальної причини робити так досі. Особисто я просто роблю /bin, /sbin та /lib посиланнями на аналогічні директорії /usr. Адже люди, які працюють із вбудованим софтом, намагаються розбиратися та спрощувати…

Джерело: habr.com

Додати коментар або відгук