Wenn Sie Dolphin mit Baloo genauer betrachten, scheint es, als würden die Metadaten jeder Datei in ihrer Suchdomäne nachgeschlagen, selbst wenn Sie eine einfache Suche nach Dateinamen durchführen. Wenn ich den file.so
Prozess nachverfolge lstat
, werden für jede Datei und sogar für Einträge Aufrufe an getxattr
und getxattr
wieder ..
angezeigt. Diese Systemaufrufe rufen Metadaten zu der Datei ab, die an einem anderen Ort als dem Dateinamen gespeichert sind (der Dateiname wird im Verzeichnisinhalt gespeichert, die Metadaten befinden sich jedoch im Inode ). Das mehrmalige Abfragen der Metadaten einer Datei ist kostengünstig, da sich die Daten im Festplatten-Cache befinden. Es kann jedoch einen signifikanten Unterschied zwischen dem Abfragen der Metadaten und dem Nichtabfragen der Metadaten geben.
find
ist viel schlauer. Es wird versucht, unnötige Systemaufrufe zu vermeiden. Es wird nicht aufgerufen, getxattr
da nicht anhand erweiterter Attribute gesucht wird. Wenn es ein Verzeichnis durchläuft, muss es möglicherweise lstat
nicht übereinstimmende Dateinamen aufrufen, da dies ein Unterverzeichnis für die rekursive Suche sein kann (dies lstat
ist der Systemaufruf, der Dateimetadaten einschließlich des Dateityps wie regulär / directory / symlink /… zurückgibt). Es find
hat jedoch eine Optimierung: Es erkennt anhand der Verbindungsanzahl , wie viele Unterverzeichnisse ein Verzeichnis hat , und beendet den Aufruf, lstat
sobald es weiß, dass es alle Unterverzeichnisse durchlaufen hat. Insbesondere in einem Blattverzeichnis (einem Verzeichnis ohne Unterverzeichnisse)find
Überprüft nur die Namen, nicht die Metadaten. Darüber hinaus behalten einige Dateisysteme eine Kopie des Dateityps im Verzeichniseintrag, sodass find
sie nicht einmal aufrufen müssen, lstat
wenn dies die einzigen Informationen sind, die sie benötigen.
Wenn Sie find
Optionen ausführen, bei denen die Metadaten überprüft werden müssen, werden zwar mehr lstat
Aufrufe ausgeführt, es wird jedoch trotzdem kein lstat
Aufruf für eine Datei ausgeführt, wenn die Informationen nicht benötigt werden (z. B. weil die Datei durch eine frühere Bedingung ausgeschlossen ist) passend zum Namen).
Ich vermute, dass andere GUI-Suchwerkzeuge, die das find
Rad neu erfinden, weniger clever sind als das Kommandozeilen-Dienstprogramm, das jahrzehntelang optimiert wurde. Zumindest Dolphin ist clever genug, um die Suchdatenbank zu verwenden, wenn Sie "überall" suchen (mit der Einschränkung, dass die Ergebnisse möglicherweise nicht mehr aktuell sind).