Linux zapewnia użytkownikom niezrównaną kontrolę nad środowiskiem komputerowym, od rozbudowanych opcji dostosowywania po szczegółowe możliwości zarządzania systemem. Wśród mnóstwa dostępnych narzędzi whichpolecenie wyróżnia się jako kluczowy instrument harmonizujący doświadczenia wiersza poleceń. To narzędzie pozwala odkryć dokładną lokalizację dowolnego pliku wykonywalnego poprzez skanowanie katalogów określonych w $PATHzmiennej. W tym kompleksowym przewodniku zagłębimy się w działanie polecenia which, wyjaśnimy jego składnię i opcje oraz podamy praktyczne przykłady, aby zwiększyć biegłość w posługiwaniu się wierszem poleceń.
Zrozumienie składni i funkcjonalności polecenia which
Polecenie whichjest Twoim narzędziem do lokalizowania pliku wykonywalnego powiązanego z danym poleceniem. Działa poprzez badanie katalogów określonych w zmiennej środowiskowej PATH. To polecenie ujawnia, który plik jest wykonywany, gdy uruchamiasz polecenie i dostarcza powiązane dane wyjściowe na podstawie wyników wyszukiwania:
-
0oznacza, że wszystkie określone polecenia zostały znalezione i są wykonywalne. -
1oznacza, że jedno lub więcej poleceń brakuje lub nie można ich wykonać. -
2oznacza, że użyto nieprawidłowej opcji.
Standardowa składnia wywołania whichpolecenia w systemie Linux jest prosta:
which [file1] [file2]...
Wystarczy zastąpić znaki [file1]i [file2]nazwami plików wykonywalnych, które chcesz zlokalizować.
Dlaczego warto używać tego polecenia?
Polecenie whichpełni wiele ważnych funkcji w systemie Linux. Umożliwia użytkownikom potwierdzenie, czy polecenie odpowiada rzeczywistemu plikowi wykonywalnemu, aliasowi lub dowiązaniu symbolicznemu. Ponadto wskazuje dokładną lokalizację pliku wykonywalnego i pomaga zidentyfikować brakujące lub sprzeczne polecenia w zmiennej PATH. Korzystanie z niego whichgwarantuje, że zamierzona wersja polecenia działa skutecznie, gdy w systemie istnieje wiele wersji. To polecenie może znacznie zwiększyć Twoją produktywność, szczególnie podczas obsługi różnych narzędzi i skryptów.
Praktyczne zastosowania polecenia which
Teraz przyjrzyjmy się kilku praktycznym przykładom ilustrującym, jak whichpolecenie to można zastosować w scenariuszach z życia wziętych:
Przykład 1: Lokalizacja ścieżki pliku wykonywalnego
Aby łatwo zidentyfikować miejsce, w którym znajduje się plik wykonywalny polecenia, należy użyć whichpolecenia:
which grep

Otrzymasz wynik taki jak „ /usr/bin/grep”, który wyraźnie wskazuje dokładną lokalizację pliku wykonywalnego.
Przykład 2: Znajdowanie ścieżek wielu poleceń
Możliwe jest jednoczesne zapytanie o wiele poleceń za pomocą whichpolecenia:
which awk sed cat touch
To polecenie pobiera ścieżki dla poleceń awk, sedi cat:

Przykład 3: Wyświetlanie wszystkich wystąpień polecenia
Domyślnym zachowaniem whichjest zwracanie tylko pierwszego wystąpienia znalezionego w PATH. Możesz użyć tej -aopcji, aby odkryć wszystkie wystąpienia określonego polecenia:
which -a cat
Spowoduje to wyświetlenie listy wszystkich lokalizacji, w których catmożna go znaleźć:

Aby zweryfikować szczegóły tych plików, możesz zastosować lspolecenie z -lhopcją określenia, czy są to rzeczywiste pliki wykonywalne czy duplikaty:
ls -lh /usr/bin/cat && ls -lh /bin/cat

Na wyjściu widać dwa identyczne polecenia znajdujące się w różnych katalogach, przy czym oba są plikami wykonywalnymi o rozmiarze 35 KB.
Przykład 4: Potwierdzenie istnienia polecenia
Sprawdź, czy konkretne polecenie istnieje, używając whichpolecenia:
which cats

Jeżeli polecenie nie istnieje, nie pojawi się żaden wynik, a kod wyjścia będzie różny od zera, co oznacza brak polecenia.
Przykład 5: Identyfikacja łączy symbolicznych
Jeśli w systemie jest wiele wersji tego samego programu, niektóre wystąpienia mogą być linkami symbolicznymi, a nie rzeczywistymi plikami binarnymi. Aby zidentyfikować linki symboliczne, uruchom whichpolecenie, używając -aopcji:
which -a crontab

Następnie sprawdź szczegóły pliku za pomocą lspolecenia:
ls -lh /usr/bin/crontab && ls -lh /bin/crontab

Jeśli w wynikach widzisz ->, oznacza to, że plik jest linkiem symbolicznym wskazującym na inną lokalizację.
Przykład 6: Wykluczanie wbudowanych poleceń powłoki
Warto zauważyć, że whichpolecenie pomija wbudowane polecenia powłoki i wyświetla tylko zewnętrzne pliki wykonywalne, ułatwiając identyfikację miejsca instalacji programu. Na przykład, podczas gdy lszwraca ścieżkę, read, będąc wbudowanym poleceniem, nie:
which ls read

Ograniczenia polecenia which
Polecenie whichma pewne ograniczenia, które mogą utrudniać jego skuteczność w określonych kontekstach. Skupia się przede wszystkim na zewnętrznych plikach wykonywalnych i nie identyfikuje wbudowanych poleceń, takich jak cdlub read. Ponadto nie potrafi odróżnić plików binarnych od łączy symbolicznych. Ponieważ przeszukuje ściśle katalogi określone w $PATHzmiennej, nie znajdzie programów przechowywanych w alternatywnych lokalizacjach. Ponadto nie ma możliwości podania szczegółów, takich jak typ pliku, uprawnienia lub informacje o wersji. Co godne uwagi, jeśli polecenie jest nieobecne, po prostu nie zwraca żadnego wyniku zamiast komunikatu o błędzie.
Aby obejść te ograniczenia, należy rozważyć użycie alternatywnych poleceń, takich jak whereis, typelub ls.
Polecenie Where vs. Which
Polecenia wherei whichsą ukierunkowane na lokalizowanie plików, ale służą różnym celom.wherePolecenie jest zazwyczaj wykorzystywane w systemie Windows i niektórych systemach typu Unix; lokalizuje zarówno pliki, jak i katalogi, wyświetlając wszystkie dopasowania w zmiennej systemowej PATH.
Odwrotnie, whichpolecenie jest wyłączne dla systemów typu Unix, skupiając się wyłącznie na plikach wykonywalnych w katalogach określonych w $PATHzmiennej. Domyślnie zwraca tylko pierwsze znalezione dopasowanie; jednak -aopcja ta umożliwia wylistowanie wszystkich dopasowań.
Aby zobrazować różnicę: uruchomienie where nodew systemie Windows ujawnia wszystkie lokalizacje, w których znajduje się plik wykonywalny węzła, natomiast w systemie Linux wykonanie which gcczwraca pierwszy katalog, w którym znajduje się kompilator GCC.
Choć oferuje mnóstwo funkcji, whichpoleceniu może brakować niektórych możliwości. Niemniej jednak użytkownicy mogą przezwyciężyć jego ograniczenia, wykorzystując polecenia uzupełniające. Ważne jest również, aby pamiętać, że whichwykrywa tylko pliki wykonywalne w Twoim $PATH; jeśli Twój skrypt lub program nie jest zidentyfikowany, może po prostu nie mieć uprawnień do wykonywania, dlatego zapewnienie, że Twój skrypt znajduje się w katalogu wymienionym w $PATHz odpowiednimi uprawnieniami do wykonywania, jest kluczowe.
Często zadawane pytania
1. Jaki jest główny cel polecenia which?
Podstawowym celem polecenia whichjest zlokalizowanie pliku wykonywalnego skojarzonego z danym poleceniem poprzez przeszukanie katalogów określonych w $PATHzmiennej środowiskowej.
2. Jak mogę znaleźć wiele plików wykonywalnych jednocześnie, używając polecenia which?
Można określić wiele poleceń w jednym whichpoleceniu, oddzielając je spacjami, na przykład: which command1 command2, co umożliwi jednoczesne pobranie ścieżek do wszystkich określonych plików wykonywalnych.
3. O jakich ograniczeniach powinienem wiedzieć używając polecenia which?
Polecenie whichma kilka ograniczeń, w tym brak możliwości znalezienia wbudowanych poleceń powłoki, brak rozróżnienia między plikami binarnymi i dowiązaniami symbolicznymi oraz przeszukiwanie tylko katalogów określonych w $PATHzmiennej. Jeśli plik wykonywalny nie zostanie znaleziony, nie zostanie zwrócony żaden komunikat o błędzie, co może być mylące.
Dodaj komentarz