Unterschied zwischen lokalisieren und was in Linux

3024
Naddy

Was ist der Unterschied zwischen locateund whichin Linux?

Warum locate mentorlistet der Mentor bei der Verwendung den gesamten Mentor auf, aber wenn er verwendet which mentorwird: "Kein Mentor in ..." - was bedeutet das?

27
Siehe dazu auch http://unix.stackexchange.com/a/60208/84427 pun vor 8 Jahren 0
Es gibt auch `where` und [` whereis`] (http://superuser.com/questions/40301/which-whereis-differences). Jan Tojnar vor 8 Jahren 0
in bash bevorzugen Sie: `type -all acommand`. Und wenn ich das XYProblem hinter Ihrer Frage lese: Sie haben einen Befehl, können ihn über locate sehen, können ihn aber nicht ausführen? Bearbeiten Sie dann PATH entweder in der `~ / .profile` -Datei eines bestimmten Benutzers oder, wenn Sie überzeugt sind, dass Sie wissen, was zu tun ist, in der globalen` / etc / profile`-Datei [WARNUNG: Sie können Systemscripts brechen (und möglicherweise eine viele Betriebssysteme), wenn Sie den falschen Pfad in $ PATH von / etc / profile ... einfügen (zB: Pfade, die Befehle enthalten, die normalerweise in elswhere gefunden werden). Ziehen Sie es vor, nur am ENDE der Variablen hinzuzufügen. Und fügen Sie bitte "::" oder "." Nirgends in diesen PFAD ein. Olivier Dulac vor 8 Jahren 0
Mögliches Duplikat von [Was ist der Unterschied zwischen "locate" und "find" in Linux?] (Http://superuser.com/questions/199472/what-is-the-difference-zween-locate-and-find-in -linux) Abraxas vor 8 Jahren 0

3 Antworten auf die Frage

45
DavidPostill

Was ist der Unterschied zwischen locateund which?

locate verwendet eine zuvor erstellte Datenbank, um die Datei zu finden.

locateliest eine oder mehrere Datenbanken, die von updatedb(8) vorbereitet wurden, und schreibt Dateinamen, die mindestens einem der PATTERN entsprechen, in die Standardausgabe, einen pro Zeile.

Quellensuche (1) - Linux-Manpage

updatedberstellt oder aktualisiert eine von locate(1) verwendete Datenbank . Wenn die Datenbank bereits vorhanden ist, werden ihre Daten erneut verwendet, um ein erneutes Lesen der Verzeichnisse 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 aktualisiertb (8) - Linux-Manpage


whichsucht nach einer ausführbaren Datei, indem Sie in den Verzeichnissen in der PATHUmgebungsvariablen danach suchen .

whichnimmt ein oder mehrere Argumente. Für jedes seiner Argumente wird stdoutder vollständige Pfad der ausführbaren Dateien ausgegeben, die ausgeführt worden wären, wenn dieses Argument an der Shell-Eingabeaufforderung eingegeben wurde. Dazu wird in den in der Umgebungsvariablen aufgeführten Verzeichnissen nach einer ausführbaren Datei oder einem Skript gesucht PATH.

unter Verwendung desselben Algorithmus wie bash(1).

Quelle, die (1) - Linux-Manpage


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

Was bedeutet das?

Sie haben einige benannte Dateien mentor, die in der locateDatenbank gefunden werden können.

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

"updatedb" - gut zu wissen, dass es nicht nur bei Microsoft zu sehr unspezifischen Namen für Dinge gibt. (In Delete32 löscht `DeleteObject` ein GDI-Objekt,` CloseHandle` schließt ein Kernel-Handle usw.). `Updateb` aktualisiert die` locate`-DB. user20574 vor 8 Jahren 2
"which" ist auch besonders nützlich für den Fall, dass mehrere Versionen desselben Programms an verschiedenen Stellen in Ihrem Pfad aktiv sind, so dass Sie wissen, welche tatsächlich ausgeführt wird, wenn Sie den Befehl ausführen. Dies war für mich früher hilfreich bei der Diagnose unerwarteter Verhaltensweisen - zum Beispiel half mir dies, eine manuell installierte Version eines Dienstprogramms auf meinem System zu belassen, sodass die vom Paket-Manager installierte Version überschrieben wurde. Carcer vor 8 Jahren 0
11
manjesh23

whichsucht einen Befehl ( whichgibt einen Pfadnamen der Dateien / Links zurück, die in der aktuellen Umgebung ausgeführt werden würden)

locatesucht Dateien anhand ihres Namens ( locateliest eine oder mehrere Datenbanken, die von einer Datenbank vorbereitet wurden, updatedbund schreibt Dateinamen, die mindestens einem der Muster entsprechen, und zwar einer pro Zeile)

Bitte geben Sie eine Quellenangabe für Ihre Quellen an - die Beschreibungen in Ihrer Antwort werden direkt von den Manpages dieser Hilfsprogramme übernommen. iamnotmaynard vor 8 Jahren 2
5
heemayl

locatenimmt standardmäßig ein Glob-Muster (Regex-Muster kann auch verwendet werden) und durchsucht die Datenbank /var/lib/mlocate/mlocate.dbnach Dateinamen, die dem Muster entsprechen.

whichist ein Befehl, um nach dem vollständigen Pfad eines Befehls in den von der PATHUmgebungsvariablen interpretierten Verzeichnissen zu suchen .