03/28/2024

Cum să utilizați comanda care pe Linux

Comanda Linux care identifică binarul executabil care se lansează atunci când lansați o comandă către shell. Dacă aveți versiuni diferite ale aceluiași program pe computer, puteți să le utilizați pentru a afla care dintre ele va folosi shell-ul.

Binare și căi

Când încercați să rulați un program sau o comandă din fereastra terminalului, shell-ul (de obicei, Bash pe distribuțiile moderne) trebuie să găsească acea comandă și să o lanseze. Unele comenzi, cum ar fi CD, istorie, și pwd, sunt încorporate în shell, astfel încât Bash nu trebuie să muncească prea mult pentru a le găsi.

Dar cum localizează Bash alte comenzi, programe și binare externe independente? Ei bine, Bash folosește calea, care este de fapt o colecție de căi, fiecare dintre acestea indicând un director. Apoi caută în fiecare dintre acele directoare un executabil care se potrivește cu comanda sau programul pe care încercați să îl rulați. Când găsește unul, Bash îl lansează și abandonează căutarea.

Puteți utiliza echo pentru a verifica variabila de mediu $PATH și pentru a vedea directoarele din calea dvs. Pentru a face acest lucru, tastați următoarele, apoi apăsați Enter:

echo $PATH

The

Lista de ieșire separă fiecare cale cu două puncte (:). Pe computerul pe care îl folosim, Bash va căuta următoarele directoare în această ordine:

/usr/local/sbin
/usr/local/bin
/usr/sbin
/usr/bin
/sbin
/cos
/utilizator/jocuri
/usr/local/games
/snap/bin

Există multe foldere numite /sbin și /bin în sistemul de fișiere, ceea ce poate duce la o anumită confuzie.

  Cum să joci Dead Rising 4 pe Linux

Urmărește acele cărări

Să presupunem că avem o versiune actualizată a unui program numit htg. Se află în directorul nostru curent și îl putem rula tastând următoarea comandă:

./htg

The

Nu este un program prea mare – doar tipărește numărul versiunii și apoi se închide. Noua versiune este 1.2.138.

Pentru a rula un program în directorul de lucru curent, trebuie să tastați „./” în fața numelui programului, astfel încât Bash să știe unde să-l găsească.

Deoarece dorim să rulăm acest program special din orice director, vom muta executabilul în directorul /usr/bin. Bash va găsi acel program în cale și îl va rula pentru noi.

Nu avem nevoie de executabilul din directorul nostru curent și nici nu trebuie să tastam „./” în fața numelui programului, așa cum se arată mai jos:

sudo mv htg /usr/bin

The

Acum, să încercăm să rulăm programul tastând:

htg

The

Ceva rulează, dar nu este programul nostru nou, actualizat. Mai degrabă, este versiunea mai veche, 1.2.105.

Comanda care

Problema pe care am demonstrat-o mai sus este motivul pentru care comanda a fost proiectat.

În acest exemplu, vom folosi care și vom transmite numele programului pe care îl investigăm ca parametru de linie de comandă:

which htg

The

care raportează că a găsit o versiune a htg în directorul /usr/local/bin. Deoarece locația respectivă apare în calea dinaintea directorului în care am mutat htg-ul actualizat, Bash folosește acea versiune anterioară a programului.

Totuși, dacă folosim opțiunea -a (toate) așa cum se arată mai jos, care continuă să caute chiar dacă găsește o potrivire:

which -a htg

The

Apoi listează toate potrivirile din oricare dintre directoarele din cale.

  Cum să adăugați utilizatori la fișierul Sudoer pe Linux

Deci, aceasta este problema – există o versiune anterioară a programului într-un director care se află și în patch. Și acel director este căutat înaintea directorului în care am aruncat noua versiune a programului.

Pentru a verifica, putem introduce următoarele și rula în mod explicit fiecare versiune a programului:

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

Aceasta explică problema, iar soluția este simplă.

De fapt, avem opțiuni. Putem fie să ștergem versiunea veche din directorul /use/local/bin, fie să o mutăm din /usr/bin în /usr/local/bin.

Urmărește acele rezultate

Două rezultate nu înseamnă neapărat două fișiere binare.

Să ne uităm la un exemplu în care vom folosi comanda which cu opțiunea -a (toate) și vom căuta versiuni ale programului less:

which -a less

The

care raportează două locații care găzduiesc o versiune a programului less, dar este adevărat? Ar fi ciudat să aveți două versiuni diferite (sau aceeași versiune în mai multe locații) de mai puțin instalate pe un computer Linux. Deci, nu vom accepta rezultatul din care. În schimb, să săpăm puțin mai adânc.

Putem folosi opțiunile ls, -l (lista lungă) și -h (lizibile de oameni) pentru a vedea ce se întâmplă:

ls -lh /usr/bin/less

The

Dimensiunea fișierului este raportată ca nouă octeți! Asta cu siguranță nu este o copie completă a mai puțin.

Primul caracter al listei este un „l”. Un fișier normal ar avea o cratimă (-) ca prim caracter. „l” este un simbol care înseamnă legătură simbolică. Dacă ați omis acel detaliu, simbolul –> indică, de asemenea, că acesta este a legătură simbolică, la care te poți gândi ca pe un fel de scurtătură. Acesta indică copia de mai puțin în /bin.

  Cum se schimbă managerul de afișare pe Linux

Să încercăm din nou cu versiunea less în /bin:

ls -lh /bin/less

The

Această intrare este în mod evident un executabil binar „adevărat”. Primul caracter al listei este o cratimă (-), ceea ce înseamnă că este un fișier obișnuit, iar dimensiunea fișierului este de 167 KB. Deci, este instalată doar o copie a less, dar există o legătură simbolică către ea din alt director, pe care Bash îl găsește și când caută calea.

Verificarea mai multor comenzi simultan

Puteți transmite mai multe programe și comenzi cărora le va verifica în ordine.

De exemplu, dacă tastați:

which ping cat uptime date head

The

care funcționează prin lista de programe și comenzi cu care ați furnizat-o și listează rezultatul pentru fiecare.

Care care este care?

Dacă sunteți atât de înclinat, puteți utiliza și care singur, tastând următoarele:

which which

În afară de a căuta în jurul sistemului de fișiere Linux din curiozitate, ceea ce este cel mai util atunci când vă așteptați la un set de comportamente de la o comandă sau un program, dar obțineți altul.

Puteți utiliza care în aceste cazuri pentru a verifica comanda pe care o lansează Bash este cea pe care doriți să o utilizați.