Was ist der Unterschied zwischen locateund whichunter Linux?
Warum, wenn ich benutze, locate mentorlistet es alle Mentoren auf, aber wenn ich which mentores benutze, heißt es "no mentor in ..." - was bedeutet das?
in bash, bevorzugen: type -all acommand. Und wenn ich das XYProblem hinter Ihrer Frage lese: Sie haben einen Befehl, können ihn über locate anzeigen, aber nicht ausführen? Bearbeiten Sie dann PATH entweder in der ~/.profileDatei Ihres bestimmten Benutzers oder, wenn Sie überzeugt sind, dass Sie wissen, was zu tun ist, in der globalen /etc/profileDatei der $ PATH von / etc / profile ... (zum Beispiel: Pfade mit Befehlen, die normalerweise an anderer Stelle zu finden sind). Am liebsten nur am ENDE der Variablen addieren. Und bitte nicht ::oder ein . in diesem Pfad überall.
locate Verwendet eine zuvor erstellte Datenbank, um die Datei zu finden.
locateLiest eine oder mehrere mit updatedb(8) vorbereitete Datenbanken und schreibt Dateinamen, die mindestens einem der Muster entsprechen, in die Standardausgabe, einen pro Zeile.
updatedbErstellt oder aktualisiert eine Datenbank, die von locate(1) verwendet wird. Wenn die Datenbank bereits vorhanden ist, werden ihre Daten wiederverwendet, um das erneute Lesen von Verzeichnissen zu vermeiden, die sich nicht geändert haben.
updatedbwird normalerweise täglich von cron(8) ausgeführt, um die Standarddatenbank zu aktualisieren ( /var/lib/mlocate/mlocate.db)
whichsucht nach einer ausführbaren Datei, indem sie in den Verzeichnissen in der PATHUmgebungsvariablen danach sucht .
whichNimmt ein oder mehrere Argumente. Für jedes Argument wird stdoutder vollständige Pfad der ausführbaren Dateien ausgegeben, die ausgeführt worden wären, wenn dieses Argument an der Shell-Eingabeaufforderung eingegeben worden wäre. Hierzu wird in den in der Umgebungsvariablen aufgelisteten Verzeichnissen nach einer ausführbaren Datei oder einem Skript gesucht PATH.
unter Verwendung des gleichen Algorithmus wie bash(1).
"updatedb" - Gut zu wissen, dass nicht nur Microsoft übermäßig unspezifische Namen für Dinge einbringt. (In Win32, DeleteObjectlöscht ein GDI - Objekt, CloseHandleschließt einen Kernel Griff usw. Ebenso updatedbaktualisiert die locateDB)
user253751
"which" ist auch besonders nützlich, wenn Sie möglicherweise mehrere Versionen desselben Programms an verschiedenen Stellen in Ihrem Pfad haben, sodass Sie wissen, welche tatsächlich ausgeführt wird, wenn Sie den Befehl ausführen. Dies war hilfreich für mich, bevor ich unerwartetes Verhalten diagnostizierte. So wurde mir beispielsweise klar, dass ich eine manuell installierte Version eines Dienstprogramms auf meinem System belassen hatte, sodass diese die vom Paketmanager installierte Version überschrieb.
Carcer
11
whichsoll einen Befehl finden ( whichgibt einen Pfadnamen der Dateien / Links zurück, die in der aktuellen Umgebung ausgeführt werden würden)
locatesoll Dateien anhand des Namens finden ( locateliest eine oder mehrere Datenbanken, die von erstellt wurden, updatedbund schreibt Dateinamen, die mindestens einem der Muster entsprechen, in eine Standardausgabe, eine pro Zeile)
Bitte geben Sie Ihre Quellen an - die Beschreibungen in Ihrer Antwort stammen direkt aus den Hilfeseiten für diese Dienstprogramme.
Setzen Sie Monica iamnotmaynard
5
locateVerwendet standardmäßig ein Glob-Muster (es kann auch ein Regex-Muster verwendet werden) und durchsucht die Datenbank /var/lib/mlocate/mlocate.dbnach Dateinamen, die mit dem Muster übereinstimmen.
whichist ein Befehl zum Suchen nach dem vollständigen Pfad eines Befehls in den Verzeichnissen, die von der PATHUmgebungsvariablen interpretiert werden .
where
undwhereis
.type -all acommand
. Und wenn ich das XYProblem hinter Ihrer Frage lese: Sie haben einen Befehl, können ihn über locate anzeigen, aber nicht ausführen? Bearbeiten Sie dann PATH entweder in der~/.profile
Datei Ihres bestimmten Benutzers oder, wenn Sie überzeugt sind, dass Sie wissen, was zu tun ist, in der globalen/etc/profile
Datei der $ PATH von / etc / profile ... (zum Beispiel: Pfade mit Befehlen, die normalerweise an anderer Stelle zu finden sind). Am liebsten nur am ENDE der Variablen addieren. Und bitte nicht::
oder ein.
in diesem Pfad überall.Antworten:
Was ist der Unterschied zwischen
locate
undwhich
?locate
Verwendet eine zuvor erstellte Datenbank, um die Datei zu finden.Source locate (1) - Linux-Manpage
Quelle updatedb (8) - Linux-Manpage
which
sucht nach einer ausführbaren Datei, indem sie in den Verzeichnissen in derPATH
Umgebungsvariablen danach sucht .unter Verwendung des gleichen Algorithmus wie
bash
(1).Quelle welche (1) - Linux Manpage
locate mentor
listet Mentor auf,which mentor
sagt aber "kein Mentor in ..."Sie haben einige Dateien mit dem Namen,
mentor
die in derlocate
Datenbank gefunden werden können.Sie haben keine ausführbare Datei oder kein ausführbares Skript
mentor
in IhremPATH
.quelle
DeleteObject
löscht ein GDI - Objekt,CloseHandle
schließt einen Kernel Griff usw. Ebensoupdatedb
aktualisiert dielocate
DB)which
soll einen Befehl finden (which
gibt einen Pfadnamen der Dateien / Links zurück, die in der aktuellen Umgebung ausgeführt werden würden)locate
soll Dateien anhand des Namens finden (locate
liest eine oder mehrere Datenbanken, die von erstellt wurden,updatedb
und schreibt Dateinamen, die mindestens einem der Muster entsprechen, in eine Standardausgabe, eine pro Zeile)quelle
locate
Verwendet standardmäßig ein Glob-Muster (es kann auch ein Regex-Muster verwendet werden) und durchsucht die Datenbank/var/lib/mlocate/mlocate.db
nach Dateinamen, die mit dem Muster übereinstimmen.which
ist ein Befehl zum Suchen nach dem vollständigen Pfad eines Befehls in den Verzeichnissen, die von derPATH
Umgebungsvariablen interpretiert werden .quelle