/ usr / bin vs / usr / local / bin в Linux


446

Почему в Linux так много мест для размещения двоичного файла? Есть как минимум эти пять:

  1. /bin/
  2. /sbin/
  3. /usr/bin/
  4. /usr/local/bin/
  5. /usr/local/sbin/

И на моем офисном ящике у меня нет разрешений на запись для некоторых из них.

Какой тип двоичного файла входит в какой из этих binс?


28
Вы забыли /usr/sbin/.
Hello71

15
И ~/bin/для личных вещей.
Кальмарий

1
В настоящее время меньше мест, поскольку /binбыло объединено с /usr/binи /sbinбыло объединено /usr/sbin- см. Раздел «Слияние / usr» .
Петр Доброгост


@ Калмариус, что? ты не должен использовать /usr/local/bin?
Пейсер

Ответы:


559
  1. /bin/sbin) предназначались для программ, которые должны были находиться в небольшом /разделе перед /usrмонтированием больших и т. д. разделов. В наши дни он в основном служит стандартным местом для таких ключевых программ, как /bin/sh, хотя первоначальное намерение все еще может иметь значение, например, для установки на небольшие встроенные устройства.

  2. /sbinв отличие от /binпрограмм управления системой (обычно не используемых обычными пользователями), необходимых перед /usrмонтированием.

  3. /usr/bin предназначен для обычных пользовательских программ, управляемых распространением.

  4. Существует /usr/sbinс тем же отношением, /usr/binчто /sbinи к /bin.

  5. /usr/local/binпредназначен для обычных пользовательских программ, не управляемых менеджером пакетов распространения, например, локально скомпилированных пакетов. Вам не следует устанавливать их, /usr/binпотому что будущие обновления дистрибутива могут изменить или удалить их без предупреждения.

  6. /usr/local/sbin, Как вы можете догадаться , на данный момент, является , /usr/local/binкак /usr/sbinк /usr/bin.

Кроме того, есть и /optмонолитные нераспространяемые пакеты, хотя до того, как они были должным образом интегрированы, различные дистрибутивы помещали туда Gnome и KDE. Как правило, вы должны зарезервировать его для больших пакетов с плохим поведением, таких как Oracle.


37
Я думаю, что этот ответ делает большую работу по разъяснению общего набора соглашений, но этот пост от Роба Лэндли - действительно отличное чтение, если вы хотите понять бессмыслицу ... lists.busybox.net/pipermail/busybox/2010-De December /074114.html
Subfuzion

3
refspecs.linuxfoundation.org/fhs.shtml для текущей канонической ссылки. Ссылка @kojiro устарела и не имеет новой спецификации.
Дидье А.

2
Куда я могу положить корзину, которую я скачал из интернета? Из вашего описания это звучит так, как будто оно должно быть в / usr / local / bin или / usr / bin. Является ли / usr / bin тем, что я никогда не должен трогать вручную, и позволяю играть только с менеджером пакетов?
Дидье А.

3
@DidierA. вставьте его ~/binи добавьте этот каталог в вашу PATH как пользователь ... Спасибо за примечание, я удалил свой серьезно устаревший комментарий.
Кодзиро

3
Я нашел ответ на первую часть моего вопроса здесь: superuser.com/a/238993/425838 . Приоритетность основана на порядке в системной PATHпеременной, и echo $PATHдля меня это показывает /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games, что означает, что исполняемые файлы /usr/local/binимеют приоритет над теми, в /usr/binкоторых приоритет над теми, в которых /bin.
Габриэль Стейплс

65

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

man hier

Который также доступен онлайн, например: http://linux.die.net/man/7/hier


1
Это не отвечает на вопрос пользователя.
Билли Онил

14
Страница man содержит запись для каждого из каталогов bin, объясняющую, что входит в них, и это был один из вопросов.
Давитенио

34

Запись Стандартной иерархии файловой системы в Википедии помогла мне ответить на тот же вопрос, когда он у меня был, плюс у него очень пояснительная таблица.

Выдержка из этой страницы 1 :

/bin        Essential command binaries that need to be available in single user mode; for all users, e.g., cat, ls, cp.
/usr/bin    Non-essential command binaries (not needed in single user mode); for all users.
/usr/local  Tertiary hierarchy for local data, specific to this host. Typically has further subdirectories, e.g., bin, lib, share
/usr/sbin   Non-essential system binaries, e.g., daemons for various network-services.
/sbin       Essential system binaries, e.g., fsck, init, route.

1 Получено 19 июня 2019 года; постоянная ссылка .


17

В sbinдиректории содержит программы , которые обычно только систему управления. Программы для постоянных пользователей никогда не должны заходить в них.

Во время запуска требуется несколько программ, которые заканчиваются на /bin/или /sbin/. Они должны быть доступны до монтирования файловых систем. Такие вещи, как mountи fsckкоторые необходимы для проверки и монтирования файловых систем, должны быть там.

Большинство упакованных программ заканчиваются в /usr/bin/и /usr/sbin/. Они могут быть в файловой системе, отличной от корневой файловой системы. В некоторых случаях они могут находиться на сетевом диске.

Локальные программы и скрипты принадлежат /usr/local/bin/а /usr/local/sbin/. Это идентифицирует их как явно нестандартные и, возможно, доступные только на сайте.

Для дальнейшего объяснения попробуйте man hierвыполнить команду, которая должна предоставить описание рекомендуемой иерархии файловой системы для вашего дистрибутива. Вы также можете прочитать об иерархии файловой системы в Википедии.


1
+1 Действительно краткое объяснение, если вершина - это слишком много.
CppLearner

«Локальные программы и скрипты находятся в / usr / local / bin / и / usr / local / sbin /». Вы имеете в виду локальные программы как «не во всех частях ОС, но я решил установить их и хочу использовать их» «?
Джим Ахо

11

В 1970-х годах UNIXвсе официальные исполняемые файлы располагались /binи /usr/binнаходились под домашними каталогами пользователей (например /usr/dmr), которые были доступны любому пользователю для хранения собственных двоичных файлов, которые могли бы также представлять интерес для других.

Результатом этого открытия /usr/binстало хранилище недокументированного программного обеспечения, поэтому он Stephen Bourneнаписал cron scriptфайл, который каждую ночь проверял наличие новых двоичных файлов и удалял все двоичные файлы, у которых не было документации или которые были обновлены без обновления их документации.

В конце 1970-х /usr/binбыл интегрирован в базовый дистрибутив ОС, и люди начали использовать его /usr/local/binс целью предыдущего открытия /usr/bin.

Через некоторое время системные администраторы использовали /usr/local/binдля хранения non-localпрограммного обеспечения, которое было импортировано из сети (например, USENET), и поскольку компании UNIX не хотели повторять ту же ошибку, что и /usr/binснова, в 1987 году была конференция по иерархии файловой системы, на которой все компании UNIX согласились сдаться /usr/local/binи использовать /opt/<vendor>/binвместо этого.

К сожалению, дистрибутивы Linux не последовали этому решению ....


Хотя это очень интересно, никто из них даже не пытается ответить на заданный вопрос, который был /optне о UNIX, а о Linux. Это все равно что ответить «Почему у машин 4 колеса?» с "Велосипедов есть 2! К сожалению, машины нет." что не помогает ОП понять, почему у автомобилей 4.
Тердон

2
Если вы не можете использовать данное объяснение в качестве объяснения истории Linux и того факта, что Linux любит имитировать UNIX, возможно, вам не хватает необходимого фона.
Шили

1
Интересно, но кое-что, с чем я запутался, и что, возможно, тоже только историческое. Сегодня загрузка корзины онлайн, и корзина компании не очень отличается. Если Джо Блоу создает программу, а я загружаю ее, почему бы не поместить ее в / opt / JowBlow / bin вместо / usr / local / bin. Это вопрос доверенного поставщика по сравнению с ненадежным? Это не имеет смысла для меня.
Дидье А.

1
Хотелось бы мне знать эту «точную» историю несколько лет назад. a) Мне было интересно, почему AIX избегает / usr / local, использует / opt / IBM, а / opt / ibm и bullfreeware использует / opt / freeware - и почему я ДОЛЖЕН использовать другой путь (не только / opt / * sbin). Что касается полуактуальности в Linux - лучше инструменты GNU - префикс по умолчанию в автоинструментах - / usr / local. Жаль, что автоинструменты (automake, autoconf и т. Д. Не следуют .... Но мы все выживаем и узнаем, где продавцы distrub. || ставят свои программы.
Michael Felt

Можем ли мы провести еще одну из этих конференций? Как раз в этот раз, ВСЕМ СЛУШАТЬ!
MemphiZ
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.