So verwenden Sie den Befehl what in Linux

Inhalt

Ein Terminalfenster, das auf einem Linux-Laptop ausgeführt wird.

El Linux which Befehl identifiziert die ausführbare Binärdatei, die gestartet wird, wenn ein Befehl an die Shell gesendet wird. Wenn Sie verschiedene Versionen desselben Programms auf Ihrem Computer haben, du kannst verwenden which um herauszufinden, welche die Shell verwenden wird.

Binärdateien und Pfade

Wenn Sie versuchen, ein Programm oder einen Befehl über das Terminalfenster auszuführen, el schale (allgemein, Versucht in modernen Distributionen) Sie müssen diesen Befehl finden und ausführen. Einige Befehle, Was CD, Geschichte, und pwd, sind in die Schale eingebaut, Bash muss sich also nicht allzu sehr bemühen, sie zu finden.

Aber, Wie findet Bash andere Befehle?, unabhängige externe Binärdateien und Programme? Brunnen, Bash verwendet den Pfad, was eigentlich eine Sammlung von Routen ist, die jeweils auf ein Verzeichnis zeigen. Dann sucht es in jedem dieser Verzeichnisse nach einer ausführbaren Datei, die dem Befehl oder Programm entspricht, das es auszuführen versucht.. Wenn du einen findest, Bash wirft es und gibt die Suche auf.

Sie können verwenden echo um die zu überprüfen $PATH Umgebungsvariable und sehen Sie die Verzeichnisse in Ihrem Pfad. Es zu tun, Geben Sie Folgendes ein und drücken Sie dann die Eingabetaste:

echo $PFAD

Die Ausgabeliste trennt jede Route mit einem Doppelpunkt (:). Auf dem Computer, den wir verwenden, Bash durchsucht die folgenden Verzeichnisse in dieser Reihenfolge:

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

Es gibt viele Ordner namens /sbin und /bin im Dateisystem, was zu Verwirrung führen kann.

Schau dir diese Straßen an

Nehmen wir an, wir haben eine aktualisierte Version eines Programms namens htg. Es befindet sich in unserem aktuellen Verzeichnis und wir können es ausführen, indem wir den folgenden Befehl eingeben:

./htg

Keine tolle Show, es druckt nur die Versionsnummer und schließt sich dann. Die neue Version ist 1.2.138.

So führen Sie ein Programm im aktuellen Arbeitsverzeichnis aus, muss schreiben “./” vor dem Programmnamen, damit Bash weiß, wo es zu finden ist.

Weil wir dieses spezielle Programm von jedem Verzeichnis aus ausführen möchten, verschieben wir die ausführbare Datei nach /usr/bin Verzeichnis. Bash findet dieses Programm auf dem Pfad und führt es für uns aus.

Wir brauchen die ausführbare Datei in unserem aktuellen Verzeichnis nicht, noch müssen wir schreiben “./” vor dem Programmnamen, wie im Folgenden gezeigt:

sudo mv htg /usr/bin

Jetzt, Versuchen wir, das Programm durch Eingabe auszuführen:

htg

Etwas läuft, aber es ist nicht unser neues und aktualisiertes Programm. Eher, ist die vorherige version, 1.2.105.

Derjenige, der befehligt

Das Problem, das wir zuvor gezeigt haben, ist warum which Befehl es wurde entworfen.

In diesem Beispiel, wir werden verwenden which und übergeben Sie den Namen des Programms, das wir untersuchen, als Befehlszeilenparameter:

welches htg

which meldet, dass eine Version von gefunden wurde htg bei /usr/local/bin Verzeichnis. Da dieser Speicherort im Pfad vor dem Verzeichnis angezeigt wird, haben wir das Update verschoben htg, Bash verwendet diese ältere Version des Programms.

Trotz dieses, wenn wir das benutzen -a (alles) Option wie unten gezeigt, which sucht weiter, auch wenn eine Übereinstimmung gefunden wird:

was - ein htg

Dann werden alle Übereinstimmungen in einem der Verzeichnisse im Pfad aufgelistet.

Dann, das ist das Problem: es gibt eine ältere Version des Programms in einem Verzeichnis, das sich auch im Patch befindet. Und dieses Verzeichnis wird vor dem Verzeichnis durchsucht, in dem wir die neue Version des Programms ablegen.

Verifizieren, wir können Folgendes schreiben und jede Version des Programms explizit ausführen:

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

Das erklärt das Problem und die Antwort ist einfach.

Genau genommen, wir haben optionen. Wir können die vorherige Version im entfernen /use/local/bin Verzeichnis oder verschieben Sie es aus /usr/bin zum /usr/local/bin.

Schau dir diese Ergebnisse an

Zwei Ergebnisse bedeuten nicht unbedingt zwei Binärdateien.

Schauen wir uns ein Beispiel an, in dem wir die which Befehl mit dem -a (alle) und suchen Sie nach Versionen der less Programm:

was -ein weniger

which meldet zwei Standorte, die eine Version des less Programm, aber stimmt das?? Es wäre seltsam, zwei verschiedene Versionen zu haben (oder dieselbe Version an mehreren Standorten) von less auf einem Linux-Computer installiert. Dann, wir akzeptieren nicht die abreise von which. Stattdessen, lass uns ein bisschen tiefer graben.

Wir können die nutzen ls, -l (lange Liste), und -h Optionen (für Menschen lesbar) um zu sehen was passiert:

ls -lh /usr/bin/weniger

Die Dateigröße wird mit neun Byte angegeben!! Definitiv keine vollständige Kopie von less.

Das erste Zeichen in der Liste ist a “l”. Eine normale Datei hätte einen Bindestrich (-) als erstes Zeichen. Die “l” ist ein Symbol, das bedeutet symbolischer Link. Wenn Sie dieses Detail verpasst haben, das --> Das Symbol zeigt auch an, dass es sich um ein symbolischer Link, die Sie als eine Art Abkürzung betrachten können. Dieser zeigt auf die Kopie von less An /bin.

Versuchen wir es noch einmal mit der Version von less An /bin:

ls -lh /bin/weniger

Dieser Eintrag ist anscheinend eine binäre ausführbare Datei “etwas namens erschaffen”. Das erste Zeichen in der Liste ist ein Bindestrich (-), was bedeutet, dass es sich um eine normale Datei handelt und die Dateigröße beträgt 167 KB. Dann, nur eine Kopie von less es ist installiert, aber es gibt einen symbolischen Link aus einem anderen Verzeichnis, die Bash auch beim Suchen des Pfades findet.

VERBUNDEN: So verwenden Sie den Befehl ls, um Dateien und Verzeichnisse in Linux aufzulisten

Mehrere Befehle gleichzeitig prüfen

Sie können verschiedene Programme und Befehle an which, und werde sie der Reihe nach überprüfen.

Als Beispiel, wenn du schreibst:

welcher ping cat uptime date kopf

which durchläuft die Liste der von Ihnen bereitgestellten Programme und Befehle und listet das Ergebnis jedes einzelnen auf.

Welches ist was?

Wenn Sie wünschen, kannst du auch verwenden which über sich selbst, das folgendes schreibt:

welches was

Beim Stöbern im Linux-Dateisystem aus Neugier, which ist am nützlichsten, wenn Sie eine Reihe von Verhaltensweisen von einem Befehl oder Programm erwarten, aber nimm einen anderen.

Sie können verwenden which in diesen Fällen, um zu überprüfen, ob der Befehl, den Sie starten, der ist, den Sie verwenden möchten.

setTimeout(Funktion(){
!Funktion(F,B,e,v,n,T,S)
{wenn(f.fbq)Rückkehr;n=f.fbq=Funktion(){n.callMethode?
n.callMethod.apply(n,Argumente):n.queue.push(Argumente)};
wenn(!f._fbq)f._fbq = n;n.drücken=n;n.geladen=!0;n.version=’2.0′;
n.Warteschlange=[];t=b.Element erstellen(e);t.async=!0;
t.src=v;s=b.getElementsByTagName(e)[0];
s.parentNode.insertBefore(T,S) } (window, dokumentieren,'Skript',
„https://connect.facebook.net/en_US/fbevents.js’);
fbq('drin', ‘335401813750447’);
fbq('Spur', 'Seitenansicht');
},3000);

Abonniere unseren Newsletter

Wir senden Ihnen keine SPAM-Mail. Wir hassen es genauso wie du.