Стандартный каталог Unix для размещения пользовательских исполняемых файлов или сценариев? [закрыто]

79

Если у меня есть собственный сценарий оболочки или программы, которые я создал сам или загрузил из Интернета, и я хочу иметь возможность выполнять их из интерфейса командной строки, есть ли стандартное место для их размещения в структуре каталогов Linux / Unix?

/usr/bin ?
/usr/local/bin ?
/usr/lib ?
/usr/sbin ?
/bin ?
/sbin ?
/var ?

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

атеджа
источник
17
Предлагаю man hier.
Грег Хьюгилл
4
Если ваш ~ / bin находится в PATH, тогда все программы, которые вы помещаете в ~ / bin, также должны быть на вашем пути ... Что вы имеете в виду, что вы должны снова поместить его в PATH?
tpg2114 06
Я согласен с @ tpg2114, ~/binэто прекрасное место для ваших пользовательских сценариев оболочки.
Никлас Б.
Я помещаю программы в другую подпапку: ~ / bin / xyz, ~ / bin / abc. Поэтому я должен поместить каждый из них в PATH.
atedja 06
1
Вам придется делать то же самое, куда бы вы его ни положили. Если вы поместите / usr / bin / xyz, вам также придется добавить его в путь.
tpg2114 06

Ответы:

87

/usr/local/binсуществует именно для этой цели, для общесистемной установки. Для вашего личного использования ~/binэто стандарт де-факто.

Если вы хотите сохранить каждый двоичный файл в отдельном подкаталоге, вы можете сделать это и добавить символическую ссылку в каталог, уже находящийся в вашем PATH. Так, например

curl -o $HOME/downloads/fnord http://fnord.example.com/script.exe
ln -s $HOME/downloads/fnord $HOME/bin/

предоставлено $HOME/binв вашем PATH. (Есть такие инструменты, stowкоторые делают это - и многое другое - за кулисами.)

тройной
источник
3
Совет для пользователей Mac: если вы выбрали «~ / bin» и не хотите, чтобы этот каталог отображался в Finder, вы можете сделать его невидимым с помощью SETFILE (1) : «setfile -a V ~ / bin» для создания invisible и «setfile -av ~ / bin», чтобы снова сделать видимым. Обратите внимание, что для этого требуются инструменты Xcode .
Хенрик
Спасибо. Также помните sbin для sudoers.
m3nda
@tripleee: Существует ли де-факто стандартный каталог для скриптов (bash, perl и т. д.)? Я думаю, например, о ~ / etc? Дело в том, что вы не выполняете резервное копирование / отслеживание с помощью cvs / .. точно так же, как скрипты и двоичные файлы.
фс
2
@phs binпредназначен для всех видов исполняемых файлов, скриптов или соответствующих двоичных файлов. Если вы хотите, чтобы они находились под прямым контролем binверсий, можно, конечно , поставить всю свою систему под контроль версий; хотя чаще у вас есть отдельный проект для каждой или, по крайней мере, для каждой отдельной группы. Когда вы выпускаете новую версию, установите ее в свою bin. Или, если вы серьезно относитесь к собачьему кормлению и / или в вашей жизни слишком мало сюрпризов, поместите символическую ссылку на свою версию для разработки в свой bin.
tripleee
Спасибо, я сделал ln -s / usr / local / bin / root /, чтобы лучше отслеживать исполняемые файлы и соблюдать оба стандарта;)
capitano666
17

Это может немного отличаться в зависимости от типа Unix. Я предполагаю здесь Linux (хотя это может относиться к OSX). Согласно Стандарту иерархии файловой системы (FHS) (ссылка получена из рабочей группы Linux Standard Base ):

/usr/localИерархия для использования системного администратора при установке программного обеспечения на местном уровне. Он должен быть защищен от перезаписи при обновлении системного программного обеспечения. Его можно использовать для программ и данных, которые являются общими для группы хостов, но не найдены в /usr.

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

/usr/local/bin по умолчанию часто встречается на пути.

Обратите внимание, что вы должны поместить только исполняемый файл или ссылку на него /usr/local/bin, остальное, возможно, придется зайти /usr/local/libили /usr/local/share.

/optДерево может также быть разумным:

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

Пакет, устанавливаемый в / opt, должен располагать свои статические файлы в отдельном дереве /opt/<package>или /opt/<provider>дереве каталогов, где <package>- это имя, описывающее программный пакет, и <provider> зарегистрированное имя провайдера LANANA.

[...]

Каталоги / opt / bin, / opt / doc, / opt / include, / opt / info, / opt / lib и / opt / man зарезервированы для использования администратором локальной системы. Пакеты могут предоставлять "интерфейсные" файлы, предназначенные для размещения (путем связывания или копирования) этих зарезервированных каталогов локальным системным администратором, но должны нормально работать в отсутствие этих зарезервированных каталогов.

(Вы можете создать свою собственную ссылку из /opt/your-package/bin/executableв /opt/binи добавить /opt/binее, PATHесли ее еще нет.)

Бруно
источник