Was ist der grundlegende Unterschied zwischen locate
whereis
und which
Befehl.
Der grundlegende Unterschied, den ich beobachtet habe, ist dieser locate
findet alle zugehörigen Dateinamen im gesamten Dateisystem, wohingegen whereis
und which
Befehle geben nur den Speicherort (System-/lokale Adresse der Datei) der installierten Anwendung an. Wie genau ist meine Beobachtung?
Wie werden diese Befehle intern implementiert. Warum locate
arbeiten so schnell im Vergleich zur Bindestrichsuche, während locate
muss einen bestimmten Dateinamen suchen, der mit der Zielzeichenfolge in der gesamten Dateisystemhierarchie übereinstimmt?
Akzeptierte Antwort:
which
findet die ausführbare Binärdatei des Programms (falls sie sich in Ihrem PATH befindet). man which
erklärt deutlicher:
die die Pfadnamen der Dateien (oder Links) zurückgibt, die
in der aktuellen Umgebung ausgeführt würden, wenn ihre Argumente als Befehle in einer strikt POSIX-konformen Shell übergeben worden wären. Dazu wird der PATH nach ausführbaren Dateien durchsucht, die mit den Namen der Argumente übereinstimmen. Es folgt keinen symbolischen Links.
whereis
findet die Binär-, die Quell- und die Manpage-Dateien für ein Programm. Zum Beispiel
$ whereis gimp
/usr/bin/gimp /usr/lib/gimp /etc/gimp /usr/share/gimp /usr/share/man/man1/gimp.1.gz
Sie können zusätzliche Details erhalten, indem Sie die Ausgabe dieser Befehle als Argumente an ls -l
übergeben oder file
$ ls -l $(which gimp)
lrwxrwxrwx 1 root root 8 Jun 30 19:59 /usr/bin/gimp -> gimp-2.8
$ file $(which gimp)
/usr/bin/gimp: symbolic link to gimp-2.8
locate
findet tatsächlich alle Dateien, in deren Pfaden das Muster irgendwo angegeben ist. Sie können es anweisen, nur Dateien und Verzeichnisse zu finden, deren Namen (anstelle vollständiger Pfade) fügen Sie das Muster mit dem -b
ein Option, die normalerweise das ist, was Sie wollen, und eine weniger unhandliche Liste ergibt.
locate
ist schnell, weil es eine binäre Datenbank verwendet, die regelmäßig aktualisiert wird (einmal täglich, durch cron
). Sie können es selbst aktualisieren, um sicherzustellen, dass kürzlich hinzugefügte Dateien gefunden werden, indem Sie sudo updatedb
ausführen
Noch etwas zu locate
– es spielt keine Rolle, ob Dateien noch vorhanden sind oder nicht, also verwenden Sie -e
, um zu vermeiden, kürzlich gelöschte Dateien zu finden . Oft leite ich auch zu less
da die Liste lang sein kann. Normalerweise mache ich:
sudo updatedb && locate -b -e gimp | less
Wie der Dash von Unity funktioniert, wird hier erklärt – er verwendet Zeitgeist, um Systemdateien zu indizieren und aus Nutzungsmustern zu lernen, und ermöglicht es anderen Anwendungen, diese Daten zu nutzen, sodass er viel mehr Arbeit leistet als locate
.