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);