Разликата между 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 от момчетата от Беркли) не позволяват независима промяна на съдържанието на /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

Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри 🔥 Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри | ProHoster