Mac OS X: konwencjonalne miejsca, w których powinny znajdować się pliki binarne


61

Pobrałem aplikację, która jest aplikacją wiersza polecenia, i chcę umieścić ją w miejscu, w którym mogę uruchomić ją z wiersza polecenia bez konieczności jawnego wpisywania ścieżki.

  1. Jakie są konwencjonalne ścieżki używane do czegoś takiego? /usr/bin? Czy istnieją różne opcje, jedna dla wszystkich użytkowników i jedna dla konkretnego użytkownika, na przykład mojego konta administratora?

  2. Czy powinienem umieścić go we własnym katalogu w katalogu Aplikacje i dodać do ścieżki? Jeśli tak, to który plik kontroluje lokalizację ścieżki?

Odpowiedzi:


53

Główna odpowiedź: prawdopodobnie chcesz /usr/local/bin. W zależności od tego, jak najnowsza jest wersja systemu macOS, może być konieczne zaktualizowanie ustawień domyślnych $PATH. Zobacz dalsze szczegóły.

AKTUALIZACJA 12-01-2018 W pewnym momencie, odkąd napisałem swoją pierwotną odpowiedź, Apple zmieniło domyślną $PATH. W rezultacie wiele z tego, co mówię poniżej, nie ma znaczenia dla najnowszych komputerów Mac. Jeśli wpiszesz echo $PATHterminal, a /usr/local/binto pierwszy, możesz zignorować wszystko poniżej dotyczące zmiany $PATH.

Oryginalna odpowiedź

Komputery Mac są pod tym względem niezwykłe. Domyślna $PATHzmienna dla zwykłego użytkownika wygląda następująco:

/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin

Umieszczając /usr/local/bin po /usr/bin i /bin, Mac uzupełnia zwykły system. Zwykle możesz coś włożyć /usr/local/bin(np. Drugi interpreter Perla, skompilowany w jakiś niestandardowy sposób), a następnie zwykły użytkownik najpierw trafi na niestandardowy, a nie ogólnosystemowy. To jest dobre. Użytkownicy mogą otrzymywać warianty, ale system pozostaje czysty. Biorąc $PATHjednak pod uwagę domyślną wartość Apple , przedmioty w /usr/binlub /binzostaną znalezione przed czymkolwiek w /usr/local/bin. (To w zasadzie nie pozwala na zainstalowanie np. Niestandardowego Perla w /usr/local/bin.)

Aby to naprawić, możesz zmienić zwykłego użytkownika, $PATHedytując .profileplik w katalogu domowym użytkownika. (Ten plik może nie istnieć, jeśli masz zupełnie nową instalację. W takim przypadku utwórz go.)

Częściowo powiązane: Homebrew zapewnia doskonałe zarządzanie pakietami dla komputerów Mac. Domyślnie Homebrew instaluje oprogramowanie /usr/local, ale robi to w sposób, który bardzo ułatwia usuwanie rzeczy i powrót do stanu waniliowego później.


1
W moim świeżo zainstalowanym OsX 10.13.6 (High Sierra) ścieżka zawiera domyślnie / usr / local / bin (nawet jeśli folder nawet nie istnieje).
Legolas

1
@Legolas Apple wydaje się zmienić sposób, w jaki sobie z tym radzą. Zmienię post.
Telemachus

9

/usr/local/bini /usr/local/sbinwarto je dodać do swojej ścieżki, ponieważ wiele plików makefile dla kompilacji źródłowych jest domyślnie instalowanych tam.

Jeśli używasz MacPorts , warto dodać /opt/local/bin, a /opt/local/sbintakże.

Najlepszym sposobem na to jest dodanie

export PATH=/usr/local/bin:/usr/local/sbin:/opt/local/bin:/opt/local/sbin:$PATH

do .bashrcpliku w twoim katalogu domowym (który jest ukryty, więc CLI jest najlepszym sposobem, aby to zrobić) lub, jeśli chcesz zmienić ogólną ścieżkę systemową, dodaj tę samą linię do /etc/bashrc(nie ukryty), ale będziesz trzeba to sudozrobić.

Jeśli nie masz .bashrcdomu użytkownika, możesz go utworzyć i dodać do niego ten wiersz, ale pamiętaj o zmianie uprawnień do tworzonego pliku, aby był czytelny dla danego użytkownika (oczywiście nie ma znaczenia, jeśli „ robisz to dla własnego profilu).

Na $PATHkońcu dołączana jest domyślna ścieżka systemowa do wszystkiego, co wcześniej wprowadziłeś. Zauważ, że system wyszukuje pliki binarne w podanej kolejności ścieżek, więc jeśli zainstalujesz plik binarny w /usr/locallub /opt/localktóry jest również domyślnie zainstalowany w systemie, instalowane wersje zostaną odnalezione jako pierwsze, co może (choć rzadko) zdenerwować. Warto na to uważać.

Dobra informacja jest tutaj .

Powinienem zauważyć, że powyższe zakłada, że ​​używasz Basha jako powłoki, która jest domyślna w Mac OS X 10.4 (Tiger) i Mac OS X 10.5 (Leopard), ale nie we wcześniejszych systemach, które używały tcshzamiast tego, który ma inną składnię.

Mam nadzieję że to pomogło...


1
/usr/local/binjest już w domyślnym systemie OS X $PATH(choć jest za późno - zobacz moją odpowiedź). Jeśli korzystasz z MacPorts, jego instalator powinien w razie potrzeby edytować twoją ścieżkę - przynajmniej według mojego doświadczenia. To powiedziawszy, dobrze jest, aby użytkownicy wiedzieli, co robi (i dlaczego).
Telemachus

dobrze zauważony @Telemachus: za każdym razem, gdy buduję komputer dla siebie, dostosowuję piekło ze ścieżki, więc nigdy nie pamiętam, co jest standardowe, a co moje!
avstrallen

1
Wiem, co masz na myśli w instalatorze MacPorts dostosowującym ścieżki w .profile, ale miałem okazję w przeszłości, gdy z jakiegoś powodu nie wiem, co się nie udało, (co pomieszało mnie z powodu dość długo!) ... więc od tego czasu mam tendencję do ręcznego podłączania go ...
avstrallen

„który jest ukryty, więc CLI jest najlepszym sposobem, aby to zrobić”: głupie pytanie, jak uruchomić TextEdit na pliku z wiersza polecenia?
Jason S

Nie ma czegoś takiego jak głupie pytanie: użyj openpolecenia z nazwą pliku jako argumentem i powinno ono zostać otwarte przy czymkolwiek ustawionym jako domyślny edytor tekstu (TextEdit w standardzie).
avstrallen

7

Zwykle chodzę z /usr/local. Oto ładne wyjaśnienie dlaczego , które odnosi się do standardu hierarchii systemów plików (FHS) .⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢⁢, w którym kolei mówi o /usr/local:

Trzeciorzędna hierarchia danych lokalnych, specyficzna dla tego hosta. Zazwyczaj ma dalsze podkatalogi, np. Bin, lib, share.⁢


Tak, pod tym względem jest prawie taki sam jak inne systemy operacyjne * nix.
jtbandes

2
Podaj zasadnicze części odpowiedzi z linku (linków) referencyjnych, ponieważ odpowiedź może stać się nieważna w przypadku zmiany połączonych stron.
DavidPostill
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.