welche / wois Unterschiede bestehen

29089
mk12

Was ist der Unterschied zwischen whichund whereis?

96
Es tut mir leid, aber auf meinem 10.5.8 OS X System was und wo ** immer ** die gleichen Ergebnisse ergeben. Vielleicht ist dies eine sehr OS X-spezifische Frage, da ich damit einverstanden bin, dass ein anderes Ergebnis erwartet wird. Vielleicht entspricht das nicht, was es tun soll. Zumindest die beiden Beispiele (siehe unten) funktionieren nicht: Whereis ls und Whereis php geben immer dasselbe Ergebnis wie ... Kann dies jemand bestätigen? Verhält sich Snow Leopard gleich? Wolf vor 14 Jahren 0
Ja, ich weiß, deshalb habe ich diese Frage gestellt. mk12 vor 14 Jahren 0
@Wolf hier ist ein Beispiel für "which" und "whereis", die unterschiedliche Ausgaben (auf macOS Sierra) liefern http://apple.stackexchange.com/questions/259047/ssh-add-k-has-stopped-working Matthew vor 7 Jahren 0
@ mk12 Ich habe das Gefühl, dass "Typ" überlegen ist. Es kennt auch definierte Aliase, Funktionen etc Blauhirn vor 5 Jahren 0

4 Antworten auf die Frage

107
Denilson Sá Maia

Wie wäre es mit dem 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 

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

Ich benutze selten whereis. Andererseits whichist es besonders in Skripten sehr nützlich. whichist 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 
wußte nicht was, danke. mk12 vor 14 Jahren 28
Ü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 vor 14 Jahren 1
zu Unix geändert mk12 vor 14 Jahren 0
Es ist mehr als das. Auf meinem System, wo und was verschiedene ausführbare Pfade zurückgeben. Ich kann nur den Pfad zu dem Pfad finden, der tatsächlich mit "whereis" läuft, nicht dem für "which". Jordan Reiter vor 7 Jahren 1
@JordanReiter: Das kann nicht sein! "which" zeigt den tatsächlichen Pfad. Sind Sie sicher, dass der Pfad, auf den "which" zeigt, nicht nur ein Symlink zu dem Pfad ist, auf den "whereis" zeigt? Vielleicht ist es ein Shell-Alias. Versuchen Sie in bash, `type your_cmd_here` auszuführen. Denilson Sá Maia vor 7 Jahren 1
@ DenilsonSá Ich kann die Situation leider nicht wiederherstellen, aber wenn ich noch einmal darauf stoße, werde ich mehr Details geben. Jordan Reiter vor 7 Jahren 0
@ DenilsonSáMaia, ich bekomme dasselbe. `` `$ type xcodebuild -> xcodebuild wird gehasht (/ usr / local / bin / xcodebuild) $ which xcodebuild -> / usr / local / bin / xcodebuild $ wobei xcodebuild -> / usr / bin / xcodebuild`` Beim Ausführen von `xcodebuild` wird immer das falsche ausgewählt (dh der Befehl / usr / bin), obwohl` / usr / local / bin` eine höhere Priorität von $ PATH hat. jdk1.0 vor 5 Jahren 0
21
Amber

whereis durchsucht die standard * nix-Speicherorte nach einem angegebenen Befehl.

whichDurchsucht Ihren benutzerspezifischen PATH (der möglicherweise einige der Orte enthält, an denen gesucht wird, und möglicherweise keine anderen; möglicherweise auch Orte, whereisdie nicht durchsucht werden, wenn Sie Ihren PATH hinzugefügt haben)

Was ist * nix? mk12 vor 14 Jahren 0
Unix, Linux usw. (Mac OS X gehört zu usw.) vor 14 Jahren 2
Ohhh, haha, ich dachte immer, der Stack-Überlauf zensiere das U in Unix, wenn ich das aus irgendeinem Grund sah. mk12 vor 14 Jahren 8
Nee. Nur eine ziemlich übliche Konvention von kreativen Platzhaltern, um sich auf eine Familie ähnlicher Betriebssysteme zu beziehen. ;) vor 14 Jahren 0
6
Pascal MARTIN

Zitieren ihrer Manpages:

wois :

whereis sucht die Quell- / Binär- und Handbücher für die angegebenen Dateien.

Zum Beispiel :

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

dh die ausführbare Datei "php" und einige andere Sachen (wie Man-Seiten).


und welche :

gibt die Pfadnamen der Dateien zurück, die in der aktuellen Umgebung ausgeführt werden würden

Zum Beispiel :

$ which php /usr/bin/php 

dh nur die ausführbare Datei "php".

1
user192505

die nach ausführbaren Dateien in den durch die Umgebungsvariable PATH angegebenen Verzeichnissen 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 root-Pfad vorhanden ist.

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

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

Aber es scheint, 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 finden konnte, die mit dieser Software in Verbindung standen, während locate es nicht konnte. Verwenden sie wirklich andere Datenbanken? Wie funktioniert die Datenbank? - Nun, wie wäre es mit einem Pedanten? :)

Haben Sie den Befehl updateb ausgeführt? Soweit ich mich erinnere, verlässt sich locate darauf Oliver M Grech vor 6 Jahren 0