Различия между / bin, / sbin, / usr / bin, / usr / sbin, / usr / local / bin, / usr / local / sbin

284

У меня есть шесть каталогов с командными файлами. Это /bin, /sbin, /usr/bin, /usr/sbin, /usr/local/binи /usr/local/sbin.

Каковы различия между ними? Если я пишу свои собственные сценарии, где я должен их добавить?


Связанный:


источник
1
Похожий вопрос: unix.stackexchange.com/questions/8656/…
Габриэль Стейплс
@Keelan Ваш вопрос близок к вопросу, который я отправил год назад +: askubuntu.com/questions/830074/…
WinEunuuchs2Unix

Ответы:

349

Пожалуйста, обратитесь к Стандарту Иерархии Файловой Системы (FHS) для Linux для этого.

  • /bin: Для двоичных файлов, используемых до /usrмонтирования раздела. Это используется для простых двоичных файлов, используемых на самой ранней стадии загрузки, или для тех, которые должны быть доступны в однопользовательском режиме загрузки. Подумайте о двоичных файлах, как cat, lsи т. Д.

  • /sbin : То же, но для бинарных файлов с привилегиями суперпользователя (root) .

  • /usr/bin: То же, что и сначала, но для общесистемных двоичных файлов .

  • /usr/sbin : То же, что и выше, но для бинарных файлов с привилегиями суперпользователя (root).


если я пишу свои собственные сценарии, где я должен добавить их?

Ни один из вышеперечисленных. Вы должны использовать /usr/local/binили /usr/local/sbinдля общесистемных доступных скриптов. localПуть означает , что он не управляет пакетами системы (это ошибка для пакетов Debian / Ubuntu).

Для пользовательских сценариев используйте ~/bin(личная папка bin в вашем домашнем каталоге).

FHS говорит для /usr/local:

Третичная иерархия для локальных данных, характерных для этого хоста . Как правило , имеет дополнительные подкаталоги, например, bin/, lib/, share/.

gertvdijk
источник
поэтому / bin - это то место, где установлены все основные файлы. как ls, cat, pwd и т. д.? Итак, / usr / bin - это место, где находятся установленные пользователем приложения? Какие примеры того, что должно быть в / usr / bin?
Патоши シ ト シ
1
Вызывает ли /binпроблема размещение скриптов ? Я переместил свои сценарии в соответствии с вашим ответом, но мне все еще любопытно
Rumesh
5
@RumeshSudhaharan вы не должны этого делать, потому что это управляется управлением пакетами. Если какой-либо другой пакет также захочет использовать этот путь, он перезапишет ваш файл. Файлы в пакетах никогда не могут перекрываться (по крайней мере, для официальных репозиториев), поэтому вы более безопасны при установке по локальному пути. Кроме того, это просто для вашего удобства и безопасности. На локальном пути вы не можете испортить систему таким плохим способом и не можете случайно заменить системный бинарный файл.
gertvdijk
8
Мне нравится объяснение на странице ошибки:Severity:Serious Certainty:Certain
cutrightjm
1
Я поместил некоторые файлы в / usr / local / bin, и я могу их выполнить, однако я не могу их редактировать, ls -laничего не показывает
M. Reza Nasirloo
6

У меня был похожий вопрос год + назад: лучший каталог для размещения моих скриптов bash?

Системные каталоги для двоичных файлов

man hier(иерархия) перечисляет все каталоги. Чтобы получить только для двоичных файлов, используйте:

$ man hier | grep -E 'bin$|sbin$|^.{7}(/bin)|^.{7}(/sbin)' -A2

       /bin   This directory contains executable programs which are needed in single user
              mode and to bring the system up or repair it.

--
       /sbin  Like  /bin,  this  directory  holds commands needed to boot the system, but
              which are usually not executed by normal users.

--
       /usr/X11R6/bin
              Binaries  which  belong  to the X-Window system; often, there is a symbolic
              link from the more traditional /usr/bin/X11 to here.
--
       /usr/bin
              This  is the primary directory for executable programs.  Most programs exe
              cuted by normal users which are not needed for booting or for repairing the
--
       /usr/local/bin
              Binaries for programs local to the site.

--
       /usr/local/sbin
              Locally installed programs for system administration.

--
       /usr/sbin
              This directory contains program binaries for  system  administration  which
              are  not  essential  for the boot process, for mounting /usr, or for system

Где поставить свои скрипты?

Для всех пользователей, чтобы получить доступ к вашим сценариям вы можете вставить их /usr/local/bin. Имейте в виду, что вам нужен sudoдоступ для добавления / изменения файлов здесь. Смотрите: есть ли стандартное место для размещения пользовательских сценариев Linux?

Для ваших собственных скриптов ID пользователя вставьте их /home/YOUR_NAME/bin. Имейте в виду, что вы должны сначала создать этот каталог и перезапустить терминал, чтобы автоматически установить путь ~/.profile. Смотрите: Как добавить / home / username / bin в $ PATH?


Что я знаю, я не знаю

Я собираюсь взять некоторые из моих более сложных сценариев bash в Ask Ubuntu и настроить их при помощи сценариев установки github. Вот несколько примеров:

Я думаю, что скрипты должны быть установлены в /usr/bin$ PATH, но я пока не уверен в подходящем месте.

WinEunuuchs2Unix
источник
1
Я ценю ваши усилия, но, за исключением части «Что я знаю, я не знаю», вы повторили ответ Гертвдейка.
Данзел
1
@danzel Я думаю, что ключевой частью является man hierраздел, на который не ответил gertvdijk. т.е. вы можете получить иерархическую структуру каталогов в командной строке, не прибегая к чтению его в Интернете (т.е. здесь).
WinEunuuchs2Unix
1
это интересная информация, я согласен. Но gertvdijk уже упомянул Стандарт Иерархии Файловой Системы (который man hierявляется информационно недостаточным отрывком из ИМО). Впрочем, это может быть моим личным мнением.
Данзел
@danzel Я согласен, что у веб-сайтов гораздо более глубокий анализ, чем у наших жестких дисков. Я только пытаюсь указать информацию на наших жестких дисках, не прибегая к Интернету. Кроме того, указанная ссылка на Википедию отсутствует /usr/X11R6/bin и /usr/local/binкоторая включена в man heir.
WinEunuuchs2Unix
@ WinEunuuchs2Unix, последний пункт; Почему бы и нет, /usr/local/binпоскольку вы не менеджер пакетов?
Пейсер