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 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
Ü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)
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. ;)
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? :)
which
undwhereis
gibt unterschiedlichen Ausgang (auf macOS Sierra) apple.stackexchange.com/questions/259047/...type
überlegen. Es kennt auch definierte Aliase, Funktionen usw.Antworten:
Wie wäre es mit Lernen
whereis
undwhich
Verwendenwhatis
?Grundsätzlich wird
whereis
nach "möglicherweise nützlichen" Dateien gesucht, währendwhich
nur nach ausführbaren Dateien gesucht wird.Ich benutze selten
whereis
. Auf der anderen Seitewhich
ist es sehr nützlich, vor allem in Skripten.which
lautet die Antwort auf die folgende Frage: Woher kommt dieser Befehl?quelle
whereis
, nicht den fürwhich
.which
zeigt den aktuellen Pfad. Sind Sie sicher, dass der Pfad, auf den verwiesenwhich
wird, nicht nur ein Symlink zu dem Pfad ist, auf den verwiesen wirdwhereis
? Vielleicht ist es ein Shell-Alias. Versuchen Sie, in der Bash zu rennentype your_cmd_here
.whereis
Durchsucht die Standardspeicherorte von * nix nach einem bestimmten Befehl.which
Durchsucht 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,whereis
die nicht gesucht werden, wenn Sie Ihren PFAD hinzugefügt haben)quelle
Zitieren ihrer Manpages:
wo ist :
Zum Beispiel :
dh die ausführbare "PHP" -Datei und einige andere Dinge (wie Manpages).
und welche :
Zum Beispiel :
dh nur die "php" ausführbare Datei.
quelle
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.
Dabei wird mithilfe einer vom System automatisch erstellten Datenbank nach ausführbaren Dateien, Quelldateien und Handbuchseiten gesucht.
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? :)
quelle