welche / wo ist Unterschiede

112

Was ist der Unterschied zwischen whichund whereis?

mk12
quelle
Es tut mir leid, aber auf meinem 10.5.8 OS X-System, das und wo gibt es immer die gleichen Ergebnisse. Vielleicht ist eine sehr O X spezifische Frage, da stimme ich zu, ist ein anderes Ergebnis erwartet. Vielleicht entspricht whereis nicht dem, was es tun soll. Zumindest die beiden Beispiele (siehe unten) funktionieren nicht: whereis ls und whereis php geben immer das gleiche Ergebnis wie welches ... Kann das jemand bestätigen? Verhält sich Snow Leopard genauso?
Wolf
Ja, ich weiß, deshalb habe ich diese Frage gestellt.
mk12
@Wolf ist hier ein Beispiel whichund whereisgibt unterschiedlichen Ausgang (auf macOS Sierra) apple.stackexchange.com/questions/259047/...
Matthew
@ mk12 Ich fühle mich typeüberlegen. Es kennt auch definierte Aliase, Funktionen usw.
phil294

Antworten:

121

Wie wäre es mit Lernen whereisund whichVerwenden whatis?

$  whatis which
which                (1)  - shows the full path of (shell) commands

$  whatis whereis
whereis              (1)  - locate the binary, source, and manual page files for a command

Grundsätzlich wird whereisnach "möglicherweise nützlichen" Dateien gesucht, während whichnur nach ausführbaren Dateien gesucht wird.

Ich benutze selten whereis. Auf der anderen Seite whichist es sehr nützlich, vor allem in Skripten. whichlautet die Antwort auf die folgende Frage: Woher kommt dieser Befehl?

$  which ls
/bin/ls

$  whereis ls
ls: /bin/ls /usr/share/man/man1p/ls.1p.bz2 /usr/share/man/man1/ls.1.bz2
Denilson Sá Maia
quelle
34
Ich wusste nicht, was ist, danke.
12.
1
Übrigens, ich würde das "osx" -Tag entfernen, da diese Frage für alle Unix-Varianten gilt (einschließlich Linux, BSD, Mac OS X, ...)
Denilson Sá Maia
geändert in unix
mk12
1
Da steckt noch mehr dahinter. Auf meinem System gibt whereis und which verschiedene ausführbare Pfade zurück. Ich kann nur den Pfad zu dem finden, der tatsächlich läuft whereis, nicht den für which.
Jordan Reiter
1
@JordanReiter: Das kann nicht sein! whichzeigt den aktuellen Pfad. Sind Sie sicher, dass der Pfad, auf den verwiesen whichwird, nicht nur ein Symlink zu dem Pfad ist, auf den verwiesen wird whereis? Vielleicht ist es ein Shell-Alias. Versuchen Sie, in der Bash zu rennen type your_cmd_here.
Denilson Sá Maia
23

whereis Durchsucht die Standardspeicherorte von * nix nach einem bestimmten Befehl.

whichDurchsucht Ihren benutzerspezifischen PFAD (der möglicherweise einige der Orte enthält, an denen gesucht wird, und andere möglicherweise nicht - möglicherweise enthält er auch Orte, whereisdie nicht gesucht werden, wenn Sie Ihren PFAD hinzugefügt haben)

Bernstein
quelle
Was ist * nix?
12.
2
Unix, Linux usw. (Mac OS X gehört in die usw.)
8
Ohhh, haha, ich dachte immer, dass ein Stapelüberlauf das U in Unix zensiert, wenn ich das aus irgendeinem Grund
sehe
Nee. Nur eine recht gebräuchliche Konvention für die Verwendung von kreativen Platzhaltern, um auf eine Familie ähnlicher Betriebssysteme zu verweisen. ;)
6

Zitieren ihrer Manpages:

wo ist :

whereis sucht nach den Abschnitten source / binary und manual für bestimmte Dateien.

Zum Beispiel :

$ whereis php
php: /usr/bin/php /usr/share/php /usr/share/man/man1/php.1.gz

dh die ausführbare "PHP" -Datei und einige andere Dinge (wie Manpages).


und welche :

Dadurch werden die Pfadnamen der Dateien zurückgegeben, die in der aktuellen Umgebung ausgeführt würden

Zum Beispiel :

$ which php
/usr/bin/php

dh nur die "php" ausführbare Datei.

Pascal MARTIN
quelle
1

die in den von der Umgebungsvariablen PATH angegebenen Verzeichnissen nach ausführbaren Dateien suchen. Wenn dies herausgefunden wird, wird der vollständige Pfadname dieser ausführbaren Datei gedruckt.

$ which ls
/ bin / ls
$ which ifconfig
$ # Keine Ausgabe, da ifconfig nur im Pfad von root existiert.

Dabei wird mithilfe einer vom System automatisch erstellten Datenbank nach ausführbaren Dateien, Quelldateien und Handbuchseiten gesucht.

$ whereis less
less: / bin / less / usr / bin / less / usr / bin / X11 / less /usr/share/man/man1/less.1.gz

Es scheint jedoch, dass whereis und locate nicht dieselbe Datenbank verwenden. Wenn ich eine Software installiert und verwendet dann whereis und suchen Sie sofort für diese Software zu suchen. Das Ergebnis ist, dass whereis einige Dateien im Zusammenhang mit dieser Software finden konnte, während locate dies nicht konnte. Verwenden sie wirklich unterschiedliche Datenbanken? Wie funktioniert die Datenbank? - Wie wäre es, wenn Sie sich weigern, Pedant zu sein? :)

user192505
quelle
Haben Sie den Befehl updatedb ausgeführt? locate ist, soweit ich mich erinnere, darauf angewiesen
Oliver M Grech