Właśnie zainstalowałeś narzędzie, ale nie wiesz już, czy znajduje się ono w /usr/bin, /usr/local/bin lub gdzie indziej. Zamówienie Może pobrać plik binarny, kod źródłowy i strony podręcznika. Nie odpowiada jednak na najważniejsze pytanie przed jakąkolwiek interwencją: który plik zostanie faktycznie uruchomiony przez powłokę?
Aby uniknąć konieczności modyfikowania wadliwej instalacji, trzymam kciuki. gdzie jest z polecenie -v I UprzejmyTe polecenia nie wyszukują tego samego. Ta różnica szybko staje się użyteczna, gdy kilka wersji programu, aliasu lub funkcji powłoki Bash ma tę samą nazwę.

Czego Whereis naprawdę szuka
Najprostszym przypadkiem użycia jest podanie nazwy polecenia, bez żadnych opcji:
gdzie jest bash
gdzie jest ssh
gdzie jest nginx
Dane wyjściowe mogą zawierać wiele ścieżek w tym samym wierszu. gdzie jest Przeszukuje trzy typy plików: binarne, kod źródłowy i dokumentację podręcznika. Bada znane lokalizacje Linuksa i bierze pod uwagę ŚCIEŻKA i z MANPATHDlatego nie skanuje on tylko plików wykonywalnych, które powłoka może uruchomić.
Możesz ograniczyć wyszukiwanie do typu, który Cię interesuje:
gdzie jest -b bash
gdzie jest -m bash
gdzie jest -s bash
-Bwyszukiwanie plików binarnych;-Mprzeszukuje strony podręcznika i pliki Info;-Sposzukaj źródeł.
Przeszukanie pustego źródła niekoniecznie oznacza, że program został zainstalowany nieprawidłowo. Dystrybucje często instalują pliki binarne i instrukcję bez dołączania kodu źródłowego. Aby zobaczyć pliki faktycznie sprawdzone na Twoim komputerze, użyj:
gdzie jest -l
Tam gdzie jest strona podręcznika szczegółowo opisuje te ścieżki i dostępne opcje. To polecenie nie jest rekurencyjnym wyszukiwaniem plików. Aby znaleźć dowolny plik w drzewie katalogów, skorzystaj z przewodnika znajdź na Linuksie.
Sprawdź polecenie faktycznie uruchomione przez powłokę
Jeśli Twoim celem jest wiedzieć, co pojawi się po wpisaniu tekstu Python3, nginx Lub montol, zacznij od polecenie -v :
polecenie -v python3
polecenie -v nginx
polecenie -v mytool
To polecenie podąża za rozwiązaniem powłoki. W zależności od podanej nazwy, może wyświetlić ścieżkę do pliku wykonywalnego, wbudowanego polecenia, funkcji lub definicję aliasu. Jego kod powrotu pozwala również poprawnie sprawdzić obecność polecenia w skrypcie:
jeśli polecenie -v mytool >/dev/null 2>&1; wtedy
echo „mytool jest dostępny”
w przeciwnym razie
echo "mytool nie został znaleziony" >&2
fi
Nie używać W tym teście. Jeśli żaden plik nie pasuje, może po prostu wyświetlić nazwę, a następnie dwukropek i zakończyć pustym kodem powrotu. Skrypt błędnie wywnioskowałby wtedy, że polecenie istnieje.
Uprzejmy idzie dalej, wyjaśniając jak Bash interpretuje nazwę:
typ płyty
typ ls
wpisz -a ls
typ -P ls
typ płytywskazuje, żejest wewnętrznym poleceniem powłoki;typ lspokazuje pierwszą użytą definicję;wpisz -a lswyświetla aliasy, funkcje, wbudowane funkcje i pliki wykonywalne o tej nazwie;typ -P lswymusza wyszukiwanie pliku wykonywalnego wŚCIEŻKA.
Tam Dokumentacja typu GNU Bash To dokładnie opisuje te wyniki. Jeśli używasz Zsh, Fish lub innej powłoki, sprawdź jej własną dokumentację: rozdzielczość aliasów i funkcji nie jest wszędzie taka sama.
Zrozumienie, dlaczego „który” nie przedstawia całej historii
Który nadal powszechne w samouczkach:
który python3
który nginx
Zwykle szuka pliku wykonywalnego w ŚCIEŻKAProblem polega na tym, że często jest to program zewnętrzny, który nie zna dokładnego stanu bieżącej powłoki. W zależności od implementacji i dystrybucji może ignorować alias, funkcję lub funkcję wbudowaną. W przypadku testu w skrypcie powłoki, polecenie -v jest bardziej odpowiedni. Aby zrozumieć kolizję nazw w sesji interaktywnej, wpisz -a dostarcza więcej informacji.
Prosty przykład ilustruje tę różnicę:
alias ll='ls -lah'
gdzie jest II
które ll
polecenie -v ll
typ II
gdzie jest nie można znaleźć pliku o nazwie ll polecenie -v I Uprzejmy Jednak widzą dobrze znaną definicję Basha. Artykuł na temat alias w systemie Linux wyjaśnia, jak je sprawdzać i omijać bez usuwania konfiguracji.
Zidentyfikuj wiele instalacji tego samego programu
Po ręcznej instalacji często dochodzi do kolizji /usr/local/bin, dodatek $HOME/.local/bin lub wdrożenie wersji w /optowaćZacznij od porównania wyników:
gdzie jest python3
wpisz -a python3
polecenie -v python3
wpisz -P python3
readlink -f "$(type -P python3)"
gdzie jest wpisz -a pokazuje wersje znalezione przez Bash w kolejności ich rozwiązania. polecenie -v potwierdza pierwszy wybór, a następnie przeczytaj link -f Rozwiązuje wszelkie potencjalne dowiązania symboliczne. Na koniec sprawdź właściciela pakietu pliku:
dpkg -S "$(type -P python3)"
rpm -qf "$(type -P python3)"
pacman -Qo "$(type -P python3)"
Uruchom tylko polecenie odpowiednie dla Twojej dystrybucji. Jeśli żaden pakiet nie zawiera pliku, mógł on pochodzić z instalacji ręcznej. Przed jego zastąpieniem sprawdź jego wersję, rzeczywisty cel i usługi, które go używają. Samouczek na ten temat Archiwa tar.gz w systemie Linux pokazuje, dlaczego kopia w /usr/local/bin muszą pozostać możliwe do wyśledzenia.
Bash zapamiętuje również pewne ścieżki, które zostały już rozwiązane. Po przeniesieniu lub zastąpieniu pliku wykonywalnego wyczyść pamięć podręczną i sprawdź ponownie:
hash -l
hash -r
wpisz -a python3
Jeśli najpierw załadowany zostanie niewłaściwy plik, popraw kolejność PATH w systemie Linux szczegółowo opisuje test tymczasowy i stałą modyfikację.
Ograniczenie whereis do określonego folderu
Aby kontrolować oprogramowanie zainstalowane pod /optowaćMożesz zastąpić ścieżki wyszukiwania plików binarnych lub instrukcji. Opcja -F oznacza koniec listy folderów i początek nazw, których należy szukać:
gdzie jest -m -M /opt/mytool/share/man -f mytool
To ukierunkowane wyszukiwanie pozwala sprawdzić zawartość instalacji bez skanowania całego dysku. Nie zmienia to również ŚCIEŻKAani polecenia wykonywanego przez powłokę. Dlatego przed usunięciem lub zastąpieniem programu należy pamiętać o następującej kolejności:
- używać
polecenie -vaby znaleźć aktywną definicję; - początek
wpisz -ado wykrywania kolizji; - rozwiązać linki za pomocą
przeczytaj link -f; - sprawdź pakiet właściciela pliku;
- używać
gdzie jestaby znaleźć pliki binarne i powiązaną dokumentację.
Dzięki tym sprawdzeniom wiesz, który plik zostanie uruchomiony, skąd pochodzi i gdzie znaleźć jego instrukcję. Możesz wtedy naprawić instalację lub… ŚCIEŻKA bez przypadkowego usunięcia właściwej wersji.