Jak używać tego polecenia w systemie Linux

Udostępnij teraz w social media:

Linux, które polecenie identyfikuje wykonywalny plik binarny, który jest uruchamiany po wydaniu polecenia powłoce. Jeśli masz różne wersje tego samego programu na swoim komputerze, możesz użyć którejś z nich, aby dowiedzieć się, której z nich będzie używać powłoka.

Pliki binarne i ścieżki

Kiedy próbujesz uruchomić program lub polecenie z okna terminala, powłoka (zwykle Grzmotnąć w nowoczesnych dystrybucjach) musi znaleźć to polecenie i uruchomić je. Niektóre polecenia, takie jak Płyta CD, historia, i pwd, są wbudowane w powłokę, więc Bash nie musi zbyt ciężko pracować, aby je znaleźć.

Ale w jaki sposób Bash lokalizuje inne polecenia, programy i zewnętrzne niezależne pliki binarne? Cóż, Bash używa ścieżki, która jest w rzeczywistości zbiorem ścieżek, z których każda wskazuje na katalog. Następnie przeszukuje każdy z tych katalogów w poszukiwaniu pliku wykonywalnego, który pasuje do polecenia lub programu, który próbujesz uruchomić. Kiedy znajdzie taki, Bash uruchamia go i porzuca wyszukiwanie.

Możesz użyć echo, aby sprawdzić zmienną środowiskową $ PATH i zobaczyć katalogi w swojej ścieżce. Aby to zrobić, wpisz następujące polecenie, a następnie naciśnij Enter:

echo $PATH

Lista wyjściowa oddziela każdą ścieżkę dwukropkami (:). Na używanym przez nas komputerze Bash przeszuka następujące katalogi w następującej kolejności:

/ usr / local / sbin
/ usr / local / bin
/ usr / sbin
/ usr / bin
/ sbin
/kosz
/ user / games
/ usr / local / games
/ snap / bin

  Jak bezpieczni są menedżerowie haseł?

W systemie plików znajduje się wiele folderów o nazwach / sbin i / bin, co może prowadzić do nieporozumień.

Obserwuj te ścieżki

Powiedzmy, że mamy zaktualizowaną wersję programu o nazwie htg. Znajduje się w naszym bieżącym katalogu i możemy go uruchomić, wpisując następujące polecenie:

./htg

Plik

To niewiele programu – po prostu wypisuje numer wersji, a następnie zamyka. Nowa wersja to 1.2.138.

Aby uruchomić program w bieżącym katalogu roboczym, musisz wpisać „./” przed nazwą programu, aby Bash wiedział, gdzie go znaleźć.

Ponieważ chcemy uruchomić ten konkretny program z dowolnego katalogu, zamierzamy przenieść plik wykonywalny do katalogu / usr / bin. Bash znajdzie ten program na ścieżce i uruchomi go za nas.

Nie potrzebujemy pliku wykonywalnego w naszym bieżącym katalogu ani nie musimy wpisywać „./” przed nazwą programu, jak pokazano poniżej:

sudo mv htg /usr/bin

Plik

Teraz spróbujmy uruchomić program, wpisując:

htg

Plik

Coś działa, ale to nie jest nasz nowy, zaktualizowany program. Jest to raczej starsza wersja 1.2.105.

Które polecenie

Problem, który zademonstrowaliśmy powyżej, dotyczy tego, które polecenie był zaprojektowany.

W tym przykładzie użyjemy which i przekażemy nazwę programu, który badamy, jako parametr wiersza polecenia:

which htg

Plik

który zgłasza, że ​​znalazł wersję htg w katalogu / usr / local / bin. Ponieważ ta lokalizacja pojawia się w ścieżce przed katalogiem, do którego przenieśliśmy zaktualizowany htg, Bash używa wcześniejszej wersji programu.

  Jak zaplanować wiadomość e-mail w programie Outlook

Jeśli jednak użyjemy opcji -a (all), jak pokazano poniżej, która kontynuuje wyszukiwanie, nawet jeśli znajdzie dopasowanie:

which -a htg

Plik

Następnie wyświetla listę wszystkich dopasowań w dowolnym katalogu w ścieżce.

A więc w tym problem – w katalogu, który również znajduje się w poprawce, znajduje się wcześniejsza wersja programu. A ten katalog jest przeszukiwany przed katalogiem, do którego wrzuciliśmy nową wersję programu.

Aby zweryfikować, możemy wpisać następujące polecenie i jawnie uruchomić każdą wersję programu:

/usr/local/bin/htg
/usr/bin/htg

To wyjaśnia problem, a rozwiązanie jest proste.

Właściwie mamy opcje. Możemy albo usunąć starą wersję z katalogu / use / local / bin, albo przenieść ją z / usr / bin do / usr / local / bin.

Obejrzyj te wyniki

Dwa wyniki niekoniecznie oznaczają dwa pliki binarne.

Spójrzmy na przykład, w którym użyjemy polecenia which z opcją -a (all) i poszukamy wersji programu less:

which -a less

Plik

który podaje dwie lokalizacje, w których znajduje się wersja programu less, ale czy to prawda? Byłoby dziwne mieć dwie różne wersje (lub tę samą wersję w wielu lokalizacjach) mniej zainstalowaną na komputerze z systemem Linux. Więc nie będziemy akceptować danych wyjściowych, z których. Zamiast tego poszukajmy nieco głębiej.

Możemy użyć opcji ls, -l (długa lista) i -h (czytelna dla człowieka), aby zobaczyć, co się dzieje:

ls -lh /usr/bin/less

Plik

Rozmiar pliku jest zgłaszany jako dziewięć bajtów! To zdecydowanie nie jest pełna kopia less.

  Dlaczego modemy telefoniczne wytwarzają tyle hałasu?

Pierwszy znak na liście to „l”. Zwykły plik miałby myślnik (-) jako pierwszy znak. Litera „l” to symbol oznaczający dowiązanie symboliczne. Jeśli przegapiłeś ten szczegół, symbol -> również wskazuje, że jest to plik dowiązanie symboliczne, który można traktować jako rodzaj skrótu. Ten wskazuje na kopię less in / bin.

Spróbujmy ponownie z wersją less in / bin:

ls -lh /bin/less

Plik

Ten wpis jest oczywiście „prawdziwym” binarnym plikiem wykonywalnym. Pierwszy znak na liście to myślnik (-), co oznacza, że ​​jest to zwykły plik, a rozmiar pliku to 167 KB. Tak więc zainstalowana jest tylko jedna kopia less, ale istnieje dowiązanie symboliczne do niej z innego katalogu, które Bash również znajduje, przeszukując ścieżkę.

Sprawdzanie wielu poleceń jednocześnie

Możesz przekazać wiele programów i poleceń do których, a to sprawdzi je w kolejności.

Na przykład, jeśli wpiszesz:

which ping cat uptime date head

Plik

który działa na liście programów i poleceń, z którymi go dostarczyłeś i wyświetla wyniki dla każdego z nich.

Który który jest który?

Jeśli masz taką ochotę, możesz również użyć tego samego, wpisując:

which which

Oprócz grzebania w systemie plików Linuksa z ciekawości, co jest najbardziej przydatne, gdy oczekujesz jednego zestawu zachowań od polecenia lub programu, ale otrzymujesz inny.

Możesz użyć tego w takich przypadkach, aby sprawdzić, czy polecenie uruchamiane przez Bash jest tym, którego chcesz użyć.

x