Unterschied zwischen locate und which unter Linux


27

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?



Es gibt auch whereund whereis.
Jan Tojnar

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.
Olivier Dulac

Antworten:


45

Was ist der Unterschied zwischen locateund which?

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.

Source locate (1) - Linux-Manpage

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)

Quelle updatedb (8) - Linux-Manpage


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

Quelle welche (1) - Linux Manpage


locate mentorlistet Mentor auf, which mentorsagt aber "kein Mentor in ..."

Was bedeutet das?

Sie haben einige Dateien mit dem Namen, mentordie in der locateDatenbank gefunden werden können.

Sie haben keine ausführbare Datei oder kein ausführbares Skript mentorin Ihrem PATH.


2
"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)


2
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 .

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.