Одна из вещей, которые бросаются в глаза людям, переходящим в мир линукс‑систем из мира windows — это «странная» организация файловой системы. Почему вместо того чтобы выделить программе каталог, например /myprog, ее размазывают по /etc, /usr/bin, /usr/lib и тому подобное, «это же неудобно!»?

Мало того, нередко после этого человек берется сделать удобнее, как в Windows: эту программу мы положим в /opt/prog1, вон ту — в /usr/lib/prog2, третью в /prog3, четвертую в /home/user/prog4 — а потом думают, как сделать миграцию с диска на диск и ничего при этом не потерять.

На самом деле, в именно такой структуре есть практический смысл, вернее — он был когда‑то, пока его не забыли за давностью лет, и не разбавили опытом DOS.

Хотя конкретно Линукс просто скопировал ее из UNIX, по образу и подобию, но когда‑то это работало примерно так:

  • Компьютеры (PDP11) уже научились работать с сетью, но дисковые накопители для них были дорогим удовольствием.

  • Держать несколько рабочих станций с полноценными дисковыми системами было довольно дорого, особенно если на них на всех использовалась одна и та же версия ОС, которая занимала драгоценное место на дисках.

  • Но можно было сделать по‑другому: запустить сначала минимальный компактный образ ОС, единственной задачей которого было поднять сеть, а потом по NFS смонтировать всё остальное с сервера.

Необходимые для этого файлы были распределены по своему функциональному назначению:

  • /bin — выполняемые бинарники

  • /sbin — привелигированные бинарники, для рута

  • /lib — разделяемые библиотеки

  • /etc — настройки

  • /var — место «для того что изменяется» — данные электронной почты, логи и подобное.

Всё остальное, все системные программы ОС — можно смонтировать с сервера. Чтобы оно не мешало работе — в отдельный каталог /usr: так появлялись /usr/bin, /usr/lib, /usr/share для всяких разных файлов, которые не бинарники и не библиотеки.

Оно вообще могло быть read only, потому что незачем локальным машинам что‑то менять в системе, это забота системного администратора и вендора ОС.

Отдельная тема — пользовательские каталоги /usr/home, которые также могли лежать на сервере. Это позволяло любому пользователю, имеющему доступ к какой‑то из рабочих станций, при логине в систему получать сразу свой рабочий каталог, на любой машине. По этой причине домашний каталог рута — /root, в корне, локальный, а пользовательские могли быть за симлинком /home = /usr/home

То есть на локальных машинах из всего доступного места на дисках использовался только самый минимум, всё остальное можно было отдать под рабочие программы, размещенные на этих машинах. Предполагалось, что основная ОС уже смонтирована.

Так появился каталог /usr/local: /usr/local/bin, /usr/local/lib, /usr/local/etc — с настройками только для этих программ, чтобы логически отделить их от системных настроек, необходимых для загрузки.

Получилась стройная система костылей и подпорок: минимальный локальный системный, загрузочный софт — отдельно, программы ОС — отдельно, локально установленное ПО — отдельно.

Всё на своих местах, всё легко переносится/заменяется/мигрирует.

А потом пришла эпоха ПК, дешевых дисков, DOS‑Windows.

Логика разделения программы на bin, lib, etc, var вместо C:\MYPROG была пользователям (точнее, уже разработчикам) непонятна — и тут программы начали компоновать по такому же принципу, в один каталог — а потом засунуть его куда‑нибудь, в /opt, или в /usr/lib, или в /usr/share — кто на что горазд.

Персональный компьютер не обязан зависить от сети, и диски подешевели — поэтому никаких NFS mount, всё локально. И данные дистрибутива туда, и стороннее ПО туда же. Зачем какой‑то /usr/local/XXX — и так всё работает. Зачем париться с разбиением диска — один плоский раздел на всё и готово. Вся эта иерархия стала восприниматься как анахронизм.

Но иногда она может оказаться полезной. Хотя сейчас есть docker, который решает ту же задачу: отделить загрузку (хост) от дистрибутива ОС (образ) и прикладного софта (устанавливаемого в контейнер поверх образа).

Комментарии (9)


  1. unreal_undead2
    21.07.2026 10:01

    Компьютеры (PDP11) уже научились работать с сетью

    Поддержка сети появилась только в BSD (а уж NFS сделали в Sun ещё позже). Отдельный /usr был ещё раньше, когда UNIX жил только в пределах Bell Labs - только потому, что вся система не влезала на один физический диск, и /usr монтировался после загрузки с другого диска (но не по сети).


  1. NeoCode2
    21.07.2026 10:01

    Интересно. Я размещаю портабельные и свои самописные программы в /home/user/mysoft (в винде аналогично, но там просто в корне типа e:/mysoft)

    А вообще в линуксе (как впрочем и в винде, и в любых других системах) есть что-то что сейчас кажется правильным, и что-то что кажется неправильным. Например, единый корень файловой системы это красиво и правильно. А вот это разделение на /bin, /sbin и т.п. - явление устаревшее, концепция "Program Files" более логична (но имя папки лучше бы покороче и без пробела). Для разделения на неизменяемые бинарники, изменяемые настройки и т.п. лучше применять какие-то другие особенности файловой системы (которых кстати в существующих ФС может и не быть, но это уже другая история).


    1. MountainGoat
      21.07.2026 10:01

      /home/user/mysoft

      Я убью тебя, лодочник!

      Не, у себя размещайте как хотите, но делать так в программе, раздаваемой другим, даже на работе - это не моветон, это срань полная. В Linux нельзя скрыть файлы, не переименовав их. Эта папка так и будет мусолить пользователю глаза на самом видном месте. На Windows все так делают, и поэтому ни один нормальный пользователь Windows не пользуется папкой пользователя, все хранят всё в папках в корне диска. а папка пользователя там - это что-то вроде второй корзины для мусора, в которой при этом принято держать самые важные конфиги.

      И у себя так не надо. Сначала программа для себя, потом для себя и соседа, потом в первом релизе забыли переехать в другую папку, а в последующих уже нельзя переехать, не сломав UX. Как то так получилось со Snap, ещё одна гиря к весомому утверждению, что Snap - помойка.

      Есть ~/.local/bin , за ~/.local/opt тоже рога не отшибут.


      1. DMGarikk
        21.07.2026 10:01

        . Эта папка так и будет мусолить пользователю глаза на самом видном месте

        никогда туда не смотрю, как оно мне может чтото мусолить?

        ни один нормальный пользователь Windows не пользуется папкой пользователя, все хранят всё в папках в корне диск

        Как 2000винду поставил, перестал в корне чтото хранить какоето время по привычке делал отдельные папки, потом плюнул и отдался винде на съедение, проще делать как она хочет, так меньше систему надо тюнить чтобы все ссылки правильно работали

        ===

        Это я к чему, вы слишком смело интерполируете свой опыт на то что другие пользователи об этом думают

        ==

        Хотя размещать софт в /home/user/mysoft -- за это реально надо расстреливать, тут прям соглашусь, но не потому что оно комуто мешает, а потому что с точки зрения администрирования, управления и поиска всяких проблем в системе - это попаболь для админа


        1. unreal_undead2
          21.07.2026 10:01

          это попаболь для админа

          А админу не пофигу, что лежит у конкретного юзера в его ~ ?


          1. DMGarikk
            21.07.2026 10:01

            в корпоративной среде, для которой на секундочку unix и создавался, совершенно не пофигу

            вообще юзеру, так то, запрещено софт левый без ведома ставить... но это корпоративные заморочки ИБ...их пока опустим

            А вообще первая проблема с которой я сталкивался прям сам, есть комп, который мне достался в наследство от старого сотрудника...он показал как что работает, где что лежит, всё ок, ушел, я захожу под своей учеткой...а у этой редиски весь софт стоит в /home/user а у меня девственно чистая машина... ладно я понимаю конфиги, но сам софт то чё? и я иду просить админа мне его копипастить...зомечательно..а еще он и работать будет криво потому что кривой софт гдето в конфигах в глубинах /var/ и /etc понаделал ссылок на /home/user/mysoft которые мне не доступны потому что у меня прав туда нет


            1. unreal_undead2
              21.07.2026 10:01

              Я имел в виду скорее разделяемый компьютер, который использует куча девелоперов. Если мне надо по быстрому поставить (скомпилировав с нужными мне ключами), использовать для тестирования и т.п. и потом снести что-то, компилируемое через ./configure;make;make install - проще сделать именно ./configure --prefix=~/somesoft и потом rm ~/somesoft . Как это повлияет на работу админа - не вижу.


              1. DMGarikk
                21.07.2026 10:01

                разделяемый компьютер, который использует куча девелоперов

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

                В реальной жизни такое редко бывает нужно


                1. unreal_undead2
                  21.07.2026 10:01

                  Да, рутовые права обычно есть - но всё равно лучше своё держать в ~ (или отдельном личном каталоге в другом месте), чтобы не мешать другим.