Де слід розмістити локальний виконуваний файл?


62

У мене є виконуваний файл для клієнта управління версіями perforce ( p4). Я не можу розмістити його, /opt/localоскільки у мене немає привілеїв root. Чи є стандартне місце, де його потрібно розмістити $HOME?

Чи є в Ієрархії файлової системи умовність, яка говорить про те, що місцеві виконувані файли / бінарні файли потрібно розміщувати $HOME/bin?

Я не міг знайти такої конвенції, згаданої у статті Вікіпедії для FHS .

Крім того, якщо дійсно існує умова, чи доведеться явно містити шлях до $HOME/binкаталогу чи будь-яке місце розташування binкаталогу?

Відповіді:


64

Загалом, якщо встановлений та підтримуваний бінарний двійковий файл, який не працює в системі, повинен бути доступний у всій системі для кількох користувачів, він повинен бути розміщений адміністратором /usr/local/bin. Існує повна ієрархія, під /usr/localякою зазвичай використовується локально складений та встановлений програмний пакет.

Якщо ви єдиний користувач бінарного файлу, встановлення в $HOME/binце відповідне місце, оскільки ви можете встановити його самостійно, і ви будете єдиним споживачем. Якщо ви компілюєте програмний пакет з джерела, також доцільно створити часткову або повну локальну ієрархію у вашому $HOMEкаталозі. Повна локальна ієрархія виглядала б так.

  • $HOME/bin Місцеві бінарні файли
  • $HOME/etc Конфігурація системи для локальних бінарних файлів
  • $HOME/games Місцеві бінарні ігри
  • $HOME/include Локальні файли заголовків C
  • $HOME/lib Місцеві бібліотеки
  • $HOME/lib64 Локальні 64-бітні бібліотеки
  • $HOME/man Місцеві онлайн-посібники
  • $HOME/sbin Бінарні файли системи
  • $HOME/share Місцева архітектура, незалежна від ієрархії
  • $HOME/src Місцевий вихідний код

Під час запуску configureслід визначити локальну ієрархію для встановлення, вказавши $HOMEяк префікс для стандартних установок.

./configure --prefix=$HOME

Тепер, коли make && make installвони запущені, складені бінарні файли, пакунки, підручні сторінки та бібліотеки будуть встановлені у вашу $HOMEлокальну ієрархію. Якщо ви не створили $HOMEлокальну ієрархію вручну , make installстворіть каталоги, необхідні програмним пакетом.

Після встановлення $HOME/binви можете або додати $HOME/binдо свого, $PATHабо зателефонувати у двійковий код, використовуючи абсолют $PATH. Деякі дистрибутиви за замовчуванням будуть включені $HOME/binдо вашого $PATH. Ви можете перевірити це, echo $PATHпереглянувши, чи $HOME/binє, або покласти бінарний код $HOME/binі виконати which binaryname. Якщо він повертається з $HOME/bin/binaryname, він за замовчуванням знаходиться у вашому $ PATH.


5
до тих пір, поки $ HOME не знаходиться у файловій системі, встановленій noexec. / tmp / зазвичай теж монтується noexec.
ewanm89

3
Це правильно, його частина стандарту ієрархії файлової системи (FHS). pathname.com/fhs/pub/fhs-2.3.html#USRLOCALLOCALHIERARCHY
Патрік

29
Я б не рекомендував використовувати $HOME. Це заповнює ваш домашній каталог численними каталогами, які вас зовсім не цікавлять. Хто хоче мати man, libі т.д. в одних домашньому каталозі? Я б швидше створив ієрархію внизу $HOME/binабо $HOME/local. Це додає лише один підкаталог до вашого домашнього редактора, а не десять. PATHМоже бути легко адаптований для включення $HOME/bin/binабо $HOME/local/bin.
Марко

18
Одним із варіантів є використання $ HOME / .local / {bin, lib тощо.}, Як використовується, наприклад, специфікація на основі XDG ( standard.freedesktop.org/basedir-spec/basedir-spec-latest.html ) та python ( python.org/dev/peps/pep-0370 )
janneb

4
@janneb Специфікація базового каталогу XDG, яку ви посилаєтесь лише на згадки $HOME/.local/share(версія 0.7, 24 листопада 2010 р.).
Пьотр Доброгост

27

Як уже згадувалося , /usr/localвін призначений як префікс для, по суті, програмного забезпечення, встановленого системним адміністратором, в той час як він /usrповинен використовуватися для програмного забезпечення, встановленого з пакетів дистрибутива.

Ідея цього полягає в тому, щоб уникнути сутичок з розподіленим програмним забезпеченням (наприклад, rpmі debпакетами) і дати адміністратору повноцінне управління над "локальним" префіксом.

Це означає, що адміністратор може встановлювати програмне забезпечення, що складене на замовлення, використовуючи дистрибутив, як debian.

Від FHS

Програмне забезпечення, розміщене в / або / usr, може бути перезаписане оновленнями системи (хоча ми рекомендуємо, щоб дистрибутиви не перезаписували дані в / і т.д. за цих обставин). З цієї причини локальне програмне забезпечення не повинно розміщуватися поза / usr / local без поважних причин.

Під час встановлення специфічного для користувача програмного забезпечення uther пропонує використовувати $HOMEяк префікс, оскільки це гарантує наявність дозволу на запис. Особисто я відчуваю, що я користуюся $HOME/.localбільш елегантним рішенням, оскільки це дозволяє уникнути захаращення вашого (сподіваємось) приємного та охайного домашнього каталогу!

$HOME/.local/shareвже використовується в специфікації каталога freedesktop.org XDG Base Directory , тому не потрібно багато чого передбачати додавання $HOME/.local/binдо вашого $PATHта створення $HOME/.local/libта ін., поки ви це працюєте.

Якщо ви не хочете, щоб ваш префікс був прихованою каталогом, ви також можете легко створити символічне посилання на нього, наприклад:

ln -s .local ~/local

Sidenote

Варто зазначити, що .config(не .local/etc) - це значення за замовчуванням, яке $XDG_CONFIG_HOMEвикористовується для конкретних конфігураційних файлів користувача. Я також повинен зазначити, що, на жаль, значна частина програмного забезпечення ігнорує XDG і створює конфігураційні файли там, де їм подобається (як правило, в корені $HOME). Також зауважте, що $XDG_CONFIG_HOMEможе бути знято, якщо $HOME/.configбажаний за замовчуванням .

Як не дивно, немає каталогу, зарезервованого для файлів конфігурації за замовчуванням дистрибутиву, тому немає ніякого способу дізнатися, чи був файл у файлі /etcдистрибутив чи відредагований системним адміністратором.


1
Я не можу знайти жодної згадки про .localFHS
Даніель Серодіо

@DanielSerodio Це в специфікації каталогу XDG, більш новий стандарт, що він набуває популярності. Дивіться unix.stackexchange.com/questions/316765/… та superuser.com/questions/1170793/…
ivan_pozdeev

Ця побічна примітка /etcнасправді трахає прикро, коли керує сервером з кількома адміністраторами - досить складно відстежувати користувацькі редагування для конфігурування файлів.
naught101
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.