
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 which
polecenie 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 $PATH
zmiennej. 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 which
jest 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:
-
0
oznacza, że wszystkie określone polecenia zostały znalezione i są wykonywalne. -
1
oznacza, że jedno lub więcej poleceń brakuje lub nie można ich wykonać. -
2
oznacza, że użyto nieprawidłowej opcji.
Standardowa składnia wywołania which
polecenia 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 which
peł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 which
gwarantuje, ż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 which
polecenie 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ć which
polecenia:
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ą which
polecenia:
which awk sed cat touch
To polecenie pobiera ścieżki dla poleceń awk
, sed
i cat
:

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

Aby zweryfikować szczegóły tych plików, możesz zastosować ls
polecenie z -lh
opcją 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 which
polecenia:
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 which
polecenie, używając -a
opcji:
which -a crontab

Następnie sprawdź szczegóły pliku za pomocą ls
polecenia:
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 which
polecenie 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 ls
zwraca ścieżkę, read
, będąc wbudowanym poleceniem, nie:
which ls read

Ograniczenia polecenia which
Polecenie which
ma 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 cd
lub read
. Ponadto nie potrafi odróżnić plików binarnych od łączy symbolicznych. Ponieważ przeszukuje ściśle katalogi określone w $PATH
zmiennej, 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
, type
lub ls
.
Polecenie Where vs. Which
Polecenia where
i which
są ukierunkowane na lokalizowanie plików, ale służą różnym celom.where
Polecenie 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, which
polecenie jest wyłączne dla systemów typu Unix, skupiając się wyłącznie na plikach wykonywalnych w katalogach określonych w $PATH
zmiennej. Domyślnie zwraca tylko pierwsze znalezione dopasowanie; jednak -a
opcja ta umożliwia wylistowanie wszystkich dopasowań.
Aby zobrazować różnicę: uruchomienie where node
w systemie Windows ujawnia wszystkie lokalizacje, w których znajduje się plik wykonywalny węzła, natomiast w systemie Linux wykonanie which gcc
zwraca pierwszy katalog, w którym znajduje się kompilator GCC.
Choć oferuje mnóstwo funkcji, which
poleceniu 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 which
wykrywa 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 $PATH
z odpowiednimi uprawnieniami do wykonywania, jest kluczowe.
Często zadawane pytania
1. Jaki jest główny cel polecenia which?
Podstawowym celem polecenia which
jest zlokalizowanie pliku wykonywalnego skojarzonego z danym poleceniem poprzez przeszukanie katalogów określonych w $PATH
zmiennej środowiskowej.
2. Jak mogę znaleźć wiele plików wykonywalnych jednocześnie, używając polecenia which?
Można określić wiele poleceń w jednym which
poleceniu, 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 which
ma 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 $PATH
zmiennej. Jeśli plik wykonywalny nie zostanie znaleziony, nie zostanie zwrócony żaden komunikat o błędzie, co może być mylące.
Dodaj komentarz ▼