Каково обоснование для «системных ресурсов unix», или каталога /usr
, как описано здесь здесь , который дублирует многие имена каталогов в корневом каталоге /
?
/home/user
, и я просто немного читаю, чтобы увидеть, является ли это плохой идеей для однопользовательской машины.
Есть краткая версия и длинная версия вашего ответа ...
Короткая версия:
Как уже говорилось в вашей ссылке, /usr
является местом для для всей системы , только для чтения файлы. Так что все ваши установленные программы идут туда. Он не дублирует имена /
, за исключением /bin
и /lib
, но изначально имеет другое назначение: /bin, /lib
только для двоичных файлов и библиотек , необходимых для загрузки , тогда как /usr/bin, /usr/lib
для всех других исполняемых файлов и библиотек. (теперь будьте хорошим мальчиком и не спрашивайте о /sbin
, это короткая версия в конце концов)
В настоящее время различие между «необходимыми для загрузки» уменьшилось, так как большинство современных дистрибутивов, включая Ubuntu, не могут нормально загружаться без нескольких файлов из /usr
. И именно поэтому наблюдается сильное движение к слиянию /usr/bin
и /bin
, поэтому, вероятно, в ближайшем будущем (возможно, Ubuntu 12.10?) /bin
будет символической ссылкой на /usr/bin
.
Но, может быть, вы путаете /usr
и /usr/local
? Потому что да, существует (и должно быть) много дублированных имен каталогов. Подробнее об этом позже ...
Длинная версия:
Еще в 70-х годах, в Unix (да, Unix, задолго до Linux), на дискетах было мало места (нет HD, помните?) В данном случае двоичные файлы системы слишком выросли по количеству и размеру до такой степени, что они не поместились бы на одном диске, и разработчикам пришлось разделить их на несколько носителей и таким образом создать для них новые точки монтирования. /bin
файловая система была переполнена, поэтому они установили новые двоичные файлы в ... /usr/bin
. И /usr
был в то время их ... пользовательским каталогом!
После того, как произошло разделение (почти смущающее и часто рассказываемое как шутка / знания), они начали создавать «искусственные» обоснования (и критерии), чтобы решить, что пойдет в /bin
и что пойдет в /usr/bin
. Неформальное правило гласило: «основные вещи» идут в /bin
, «остальное» - в /usr/bin
. То же самое с /lib
. Это было незадолго до того, как /usr
стал переполненным системными каталогами, смешанными с пользовательскими каталогами. Таким образом, был создан /home
, чтобы хранить все пользовательские директории и содержать /usr
в чистоте только для системных «вещей».
Это было задолго до появления FHS. Когда он был создан, он принял (и формализовал) текущую традицию и сохранил название /usr
, хотя в то время он уже не имел ничего общего с «пользователем». Так что да, причудливые имена " U NIX s usce r epository" или " U NIX s ystem r esources "- все выдуманные имена, и уже слишком поздно переименовывать их. (но не слишком поздно, чтобы объединить /bin
с ним)
«Хорошо, как насчет /usr/sbin
?» , спросите вы. Черт, я надеялся, что ты забыл. Хорошо ... /usr/sbin
предназначен для команд, которые могут быть (или имеют смысл только) исполнены пользователем root
, например, mount
и fdisk
.
«Но разве это не то же самое, что /bin
?» . Да, конечно, но ...
«Подождите, тогда почему тоже есть /sbin
? Не имеет никакого смысла!» . Ну, это из-за ... эээ ... хм ...
Смотри, трехглавая обезьяна позади тебя!
Хорошо, надеюсь, ты достаточно отвлекся. Двигаемся дальше ...
(если вы думаете, что я обманываю, да, вы правы. Но таков «официальный» ответ »основные команды, которые могут быть выполнены только пользователем root и должны быть доступны еще до того, как вы смонтируете /
] "). Правда в том, что линия действительно размыта, и есть много устаревших имен, которые просто «застряли», и теперь от них довольно сложно избавиться.
Подробнее о деле для слияния /usr
, из systemd
документов:
Историческое обоснование для / bin, / sbin и / lib отделено от / usr больше не применяется сегодня. Они были разделены, чтобы выбрать инструменты на более быстром жестком диске (который был маленьким, потому что он был более дорогим) и содержать все инструменты, необходимые для монтирования более медленного раздела / usr. Сегодня, отдельный раздел / usr уже должен быть смонтирован initramfs во время ранней загрузки, тем самым оправдывая разделенный спор. Кроме того, многие инструменты в / bin и / sbin в статус-кво уже утратили способность работать без предварительно смонтированного / usr. Больше нет веских причин для того, чтобы операционная система распространилась по нескольким иерархиям, она утратила свое предназначение.
И удивительное прочтение Роба Лэндли о разделении /usr
и его обосновании:
Понимание разбивки bin, sbin, usr / bin, usr / sbin
В настоящее время
В настоящее время, что касается установки каталогов, ваш лучший способ понять это думать так:
/usr
- все общесистемные файлы только для чтения, установленные (или предоставленные) ОС
/usr/local
- общесистемные файлы только для чтения, установленные локальным администратором (обычно ты). И именно поэтому большинство имен каталогов из /usr
здесь дублируются.
/opt
- злодеяние, предназначенное для общесистемного, только для чтения и автономного программного обеспечения. То есть, программное обеспечение, которое не разделяет свои файлы на bin
, lib
, share
, include
, как должно вести себя хорошее программное обеспечение.
~/.local
- аналог пользователя /usr/local
для каждого пользователя, то есть: программное обеспечение, установленное (и для каждого пользователя)
~/.local/opt
- -пользовательский аналог /opt
Итак, где установить программное обеспечение?
Приведенный выше список - уже половина ответа на ваш вопрос Oracle JDK По крайней мере, это дает несколько подсказок. Контрольный список к «Где я должен установить программное обеспечение X?» составлен следующим образом:
Является ли это полностью автономным программным обеспечением с одним каталогом, таким как Eclipse IDE и другими скачали Java-приложения, и вы хотите, чтобы он был доступен для всех пользователей? Затем установите в /opt
То же, что и выше, но вас не волнуют другие пользователи, и я хочу установить только для вашего пользователя? Затем установите в ~/.local/opt
Его файлы разбиты на несколько каталогов, как bin
и share
, как традиционное программное обеспечение, скомпилированное и установленное с ./configure && make && sudo make install
, и должны быть доступны для все пользователи? Затем установите в /usr/local
То же, что и выше, но только для вашего пользователя? Затем установите в ~/.local
Программное обеспечение, установленное ОС или через менеджеры пакетов (например, Центр программного обеспечения), и, что наиболее важно, , которое может быть перезаписано при любой локальной модификации менеджер обновлений обновляет его до новой версии ? Это относится к /usr
Примечания:
Это объясняет, почему префикс установки по умолчанию для скомпилированного программного обеспечения - /usr/local
и почему вы должны изменить его на ./configure --prefix=$HOME/.local
при установке программного обеспечения только для вашего собственного пользователя
Вы, возможно, заметили, что все выше каталогов являются только для чтения (кроме, конечно, при установке / удалении программного обеспечения). Записываемые файлы (например, файлы конфигурации) обычно идут в /etc
(для общесистемного программного обеспечения) и ~/.config
(для пользовательских настроек). Хотя многие устаревшие программы (и, к сожалению, некоторые современные тоже) используют ~/.<software-name>
, загромождая домашнюю папку миллиардами папок и файлов.
~/.local
и ~/.config
не являются частью спецификации FHS. FHS не имеет дело с домашней папкой пользователя. Это попытка XDG, еще одной стандартной организации, ориентированной на среды рабочего стола (например, Gnome, KDE и Unity), попытаться установить некоторые соглашения, касающиеся структуры дома пользователя. Не все программное обеспечение придерживается его (например, ~/.local/bin
не по умолчанию пользователя $PATH
, хотя по логике это должно быть) , и ни один пользователь не вынужден следовать ему, но оба получают много возможностей взаимодействия выгоды, если они делают.
Надеюсь, это поможет немного прояснить ситуацию. Не стесняйтесь спрашивать, чтобы я мог улучшить ответ!
( и я также надеюсь, что пуристы не убьют меня за такой крайне неформальный язык и объяснения. Это было сделано намеренно, и, конечно, в нем много неточностей, но я верю, что это хороший способ дать новичку краткое представление об обоснованиях установки каталогов)