Standardowy katalog systemu Unix do umieszczania niestandardowych plików wykonywalnych lub skryptów? [Zamknięte]

79

Jeśli mam niestandardowy skrypt lub programy powłoki, które sam utworzyłem lub pobrałem z sieci, i chcę mieć możliwość wykonania tego z interfejsu CLI, czy istnieje standardowa lokalizacja, w której można to umieścić w strukturze katalogów Linux / Unix?

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

Zwykle umieszczam go w folderze ~ / bin i umieszczam w PATH, ale nie wygląda na czysty. Za każdym razem, gdy ściągam nowy program, muszę ponownie umieścić go w PATH.

atedja
źródło
17
Proponuję man hier.
Greg Hewgill
4
Jeśli twój ~ / bin znajduje się na PATH, to wszystkie programy, które umieścisz w ~ / bin również powinny znajdować się na twojej ścieżce ... Co masz na myśli mówiąc, że musisz ponownie umieścić go na PATH?
tpg2114
Zgadzam się z @ tpg2114, ~/binto dobra lokalizacja dla twoich skryptów powłoki należących do użytkownika.
Niklas B.
Programy umieściłem w innym podfolderze: ~ / bin / xyz, ~ / bin / abc. Więc muszę umieścić każdy z nich w PATH.
atedja
1
Musiałbyś zrobić to samo bez względu na to, gdzie to wtedy umieścisz. Jeśli umieścisz / usr / bin / xyz, będziesz musiał dodać to również do ścieżki.
tpg2114

Odpowiedzi:

87

/usr/local/binistnieje właśnie w tym celu, do instalacji w całym systemie. Do użytku prywatnego ~/binjest de facto standardem.

Jeśli chcesz zachować każdy plik binarny w swoim własnym podkatalogu, możesz to zrobić i dodać dowiązanie symboliczne do katalogu, który już znajduje się w twoim PATH. Na przykład

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

pod warunkiem, że $HOME/binjest w twoim PATH. (Są takie narzędzia, stowktóre robią to - i wiele więcej - za kulisami.)

tripleee
źródło
3
Wskazówka dla użytkowników komputerów Mac: Jeśli wybierzesz „~ / bin” i nie chcesz, aby ten katalog był wyświetlany i Finder, możesz uczynić go niewidocznym za pomocą SETFILE (1) : „setfile -a V ~ / bin” do tworzenia niewidoczny i „setfile -av ~ / bin” do ponownego uwidocznienia. Zwróć uwagę, że wymaga to narzędzi Xcode .
Henrik,
Dziękuję Ci. Pamiętaj również o sbin dla sudoers.
m3nda
@tripleee: Czy istnieje de facto standardowy katalog dla skryptów (bash, perl itp.)? Myślę o np. ~ / Etc? Chodzi o to, że nie tworzysz kopii zapasowych / śledzenie za pomocą cvs / .. w ten sam sposób, jak skrypty i pliki binarne.
phs
2
@phs binjest dla wszystkich rodzajów plików wykonywalnych, skryptów lub odpowiednich plików binarnych. Jeśli chcesz, aby znajdowały się pod bezpośrednią kontrolą wersji, z binpewnością opcją jest poddanie całej kontroli wersji; choć częściej masz oddzielny projekt dla każdej lub przynajmniej każdej odrębnej grupy. Gdy wydasz nową wersję, zainstaluj ją we własnej bin. Lub jeśli poważnie myślisz o karmieniu psów i / lub masz zbyt mało niespodzianek w swoim życiu, umieść link symboliczny do wersji rozwojowej w swoim bin.
tripleee
Dzięki, zrobiłem ln -s / usr / local / bin / root /, aby lepiej śledzić pliki wykonywalne i przestrzegać obu standardów;)
capitano666
17

Może się to nieznacznie różnić w zależności od smaku Uniksa. Zakładam tutaj Linuksa (chociaż może to dotyczyć OSX). Zgodnie z Filesystem Hierarchy Standard (FHS) (link uzyskany z grupy roboczej Linux Standard Base ):

/usr/localHierarchia jest do wykorzystania przez administratora systemu podczas instalacji oprogramowania lokalnie. Musi być zabezpieczony przed nadpisaniem podczas aktualizacji oprogramowania systemowego. Może być używany dla programów i danych, które są współdzielone przez grupę hostów, ale nie można ich znaleźć w /usr.

Oprogramowanie zainstalowane lokalnie należy umieścić w programie, /usr/locala nie, /usrchyba że jest ono instalowane w celu wymiany lub aktualizacji oprogramowania w /usr.

/usr/local/bin często domyślnie znajduje się na ścieżce.

Zwróć uwagę, że powinieneś umieścić tylko plik wykonywalny lub łącze do niego /usr/local/bin, reszta może wymagać wprowadzenia /usr/local/liblub /usr/local/share.

/optDrzewo może również być rozsądne:

/opt jest zarezerwowana dla instalacji dodatkowych pakietów oprogramowania.

Pakiet do zainstalowania w / opt musi znaleźć swoje pliki statyczne w osobnym /opt/<package>lub /opt/<provider>katalogów drzewa, gdzie <package>to nazwa, która opisuje pakiet oprogramowania i <provider> jest LANANA zarejestrowana nazwa usługodawcy.

[…]

Katalogi / opt / bin, / opt / doc, / opt / include, / opt / info, / opt / lib i / opt / man są zarezerwowane do użytku lokalnego administratora systemu. Pakiety mogą zawierać pliki „front-end” przeznaczone do umieszczenia w tych zarezerwowanych katalogach (poprzez łączenie lub kopiowanie) przez lokalnego administratora systemu, ale muszą działać normalnie w przypadku braku tych zarezerwowanych katalogów.

(Można zrobić swój własny link od /opt/your-package/bin/executabledo /opt/bin, i umieścić /opt/binna PATHrazie nie jest to już istnieje).

Bruno
źródło