Tutoriel Linux

Whereis w systemie Linux: znalezienie pliku binarnego i jego instrukcji

Débutant6 min de lecture
À retenirLinux n'est pas réservé aux experts. Le bon point de départ : une distribution accessible, une sauvegarde propre et quelques commandes comprises.

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ę.

Tux używa lupy, aby znaleźć plik binarny Linuksa i jego stronę podręcznika wśród kilku ścieżek.
Whereis przeszukuje pliki binarne, źródła i strony podręcznika w wielu lokalizacjach systemu Linux.

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
  • -B wyszukiwanie plików binarnych;
  • -M przeszukuje strony podręcznika i pliki Info;
  • -S poszukaj ź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łyty wskazuje, że jest wewnętrznym poleceniem powłoki;
  • typ ls pokazuje pierwszą użytą definicję;
  • wpisz -a ls wyświetla aliasy, funkcje, wbudowane funkcje i pliki wykonywalne o tej nazwie;
  • typ -P ls wymusza 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 -v aby znaleźć aktywną definicję;
  • początek wpisz -a do wykrywania kolizji;
  • rozwiązać linki za pomocą przeczytaj link -f ;
  • sprawdź pakiet właściciela pliku;
  • używać gdzie jest aby 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.

sudo apt update && sudo apt upgrade