Стандартный каталог Unix для размещения пользовательских исполняемых файлов или скриптов?
Если у меня есть пользовательская оболочка script или программы, которые я создал сам или загрузил из Интернета, и я хочу, чтобы это можно было выполнить из CLI, есть ли стандартное расположение для Linux/Unix структура каталогов?
/usr/bin ?
/usr/local/bin ?
/usr/lib ?
/usr/sbin ?
/bin ?
/sbin ?
/var ?
Обычно я помещаю его в папку ~/bin и помещаю его в PATH, но он не выглядит чистым. И каждый раз, когда я загружаю новую программу, я должен снова поместить ее в PATH.
Ответы
Ответ 1
/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
, которые делают это - и многое другое - за кулисами для вас.)
Ответ 2
Это может незначительно варьироваться в зависимости от вкуса Unix. Я предполагаю Linux здесь (хотя это может относиться к OSX). Согласно Стандарт иерархии файловой системы (FHS) (ссылка, полученная из Linux Standard Базовая рабочая группа):
Иерархия /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 зарезервированы для использования локальным системным администратором. пакеты могут предоставлять файлы "front-end", предназначенные для размещения (путем связывания или копирование) этих зарезервированных каталогов локальным системным администратором, но должны нормально функционировать в отсутствие этих зарезервированных каталоги.
(Вы можете сделать свою собственную ссылку из /opt/your-package/bin/executable
в /opt/bin
и поместить /opt/bin
в PATH
, если она еще не существует.)
Ответ 3
Ну, я бы использовал ~/bin
(пока я не root), но в отношении $PATH
вы всегда можете делать
export PATH=".:${PATH}"
# or
export PATH="${PATH}:."
Таким образом, фактический рабочий каталог всегда будет находиться в вашем $PATH
. Хотя у него есть некоторые проблемы с безопасностью... особенно с загруженными сценариями.