Розніца паміж 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

Дадаць каментар