Mehr als hunderttausend Dateien liegen in einem gut ausgestatteten Linux-System. Im eigene Home-Verzeichnis tummeln sich oft nicht weniger. Diverse Tools zur Dateisuche helfen, sich im Datendschungel zurecht zu finden.
Möglichkeiten, die Anzahl der Dateien zu vergrößern, gibt es viele: Ein interessantes Programm, ein Brief im Office-Programm, Fotos von der Digitalkamera, neue E-Mails oder aktuelle Musikdateien. Da fällt es manchmal schwer, die Übersicht zu behalten – oder auch mal aufzuräumen, wenn der freie Speicherplatz zur Neige geht.
Sowohl KDE (K-Menü | Dateien suchen) als auch Gnome (Orte | Nach Dateien suchen) bringen leistungsfähige Suchfunktionen mit. Das Gnome-Programm gnome-search-tool greift dabei auf den Befehl Locate [1] zurück, um nach Dateien mit bestimmten Namen zu finden.
Bei der Suche nach Dateiinhalten nutzt es den Befehl Find [1]. Das KDE-Werkzeug KFind verwendet den Befehl Locate nur, wenn Sie bei der Suche nach Dateinamen die Option Datei-Index verwenden aktivieren. Anderenfalls greift es auf eigene Suchroutinen zurück.
Ob Sie nun die grafischen Werkzeuge zur Dateisuche verwenden oder nicht: Sich mit den Grundlagen der Dateisuche zu beschäftigen, hilft zu verstehen, warum das Programm in einem konkreten Fall eine bestimmte Datei findet – oder eben nicht.
Grundprinzipien
Es gibt zwei unterschiedliche Vorgehensweisen, um eine Datei zu suchen: Bei der unmittelbaren Suche wandert das Suchprogramm rekursiv durch das gewünschte Verzeichnis und forscht anhand der angegebenen Kriterien nach der gewünschten Datei. Bei großen Verzeichnissen dauert die Durchlauf dementsprechend lange.
Die indexbasierte Suche hingegen funktioniert zweistufig: Ein Backend baut einen Index auf, den das Frontend verwendet, um Dateien aufzuspüren. Dieser Index enthält zu jeder Datei den Dateinamen und mitunter noch weitere Informationen. Das Frontend sucht demnach nur nach Informationen, die das Backend zuvor in den Index aufgenommen hat, und findet nur Dateien, die das Backend vorher indiziert hat.
Es gibt Ansätze, die Schnelligkeit indexbasierter Suche mit der Aktualität der direkten Suche zu verbinden. So verwenden Beagle ([2]) und Kat [3] den Inotify-Mechanismus des Linux-Kernels, ab Version 2.6.13 standardmäßig enthalten, um Änderungen im Dateisystem zu verfolgen und den Index aktuell zu halten. Das Programm Rlocate [4] verwendet dafür hingegen ein eigenes Kernel-Modul.
Suchkriterien beziehen sich oft auf Eigenschaften wie den Namen, das Datum oder die Rechte einer Datei. Manche beziehen zusätzlich den eigentlichen Inhalt der Datei oder Metadaten zur Datei mit ein. Insbesondere die Metadaten sind im Zusammenhang mit Desktopsuchmaschinen wie Beagle oder Kat im Gespräch.
Die Suche nach Inhalten und Metadaten setzt aber voraus, dass die Software den entsprechenden Dateitypen unterstützt. Während der Befehl Grep [5] das Dateiformat nicht auswertet, extrahiert KFind den Klartext von OpenOffice- und KOffice-Dokumenten. Ein Programm wie Imgseek [6] oder Gqview sucht sogar in Bildern nach Inhalten.
Suchprogramme
| Programm | Typ | Suchkonzept | Suchkriterien |
|---|---|---|---|
| Beagle | Desktopsuche | indexbasiert | Inhalt und Eigenschaften der Datei, Metadaten |
| Doodle [7] | befehlsbasierte Suche | indexbasiert | Dateiname, Metadaten, optional Dateiinhalt |
| Find | befehlsbasierte Suche | unmittelbar | Dateieigenschaften |
| Grep | befehlsbasierte Textrecherche | unmittelbar | Dateiinhalt |
| Gnome-search-tool | Gnome-Dateisuche | teils indexbasiert, teils unmittelbar | Inhalt und Eigenschaften der Datei |
| Kat | Desktopsuche | indexbasiert | Inhalt und Eigenschaften der Datei, Metadaten |
| KFind | KDE-Dateisuche | teils indexbasiert, teils unmittelbar | Inhalt und Eigenschaften der Datei, Metadaten |
| Locate, Slocate, Rlocate | einfache, schnelle Dateinamensuche via Befehl | indexbasiert | Dateiname |
Unmittelbar
Der Befehl Find ist ein leistungsfähiger Vertreter der unmittelbaren Suche nach Dateieigenschaften. Geben Sie nur find ein, zeigt der Befehl rekursiv alle Dateien des aktuellen Verzeichnisses. Mit find -name "*.jpg" finden Sie alle Dateien, deren Name auf .jpg endet. Achten Sie darauf, das Suchmuster in Anführungszeichen zu setzen, damit die Shell es nicht verarbeitet.
Als Platzhalter verwenden Sie * für ein oder mehrere Zeichen sowie ? für genau ein Zeichen. Mit eckigen Klammern geben Sie Ziffern und Buchstabenbereiche an: Der Ausdruck [013] steht für die Ziffern 0, 1 und 3, während [a-d] den Bereich von a bis d repräsentiert.
Wollen Sie in einem anderen als dem aktuellen Verzeichnis suchen, geben Sie es vor dem Suchkriterium an, wie das Beispiel find /tmp -name "*.jpg" zeigt. Ersetzen Sie -name durch -iname, damit die Suche nicht zwischen Groß- und Kleinbuchstaben unterscheidet.
Alternativ steht mit der Option -regex die Möglichkeit offen, reguläre Ausdrücke[8] einzubinden. Der Befehl prüft dabei, ob der reguläre Ausdruck auf den kompletten Pfad der Datei passt. Reguläre Ausdrücke sind sehr leistungsfähig und vielfältig.
Mit Find suchen Sie zudem nach anderen Dateieigenschaften wie der Dateigröße (-size), den Rechten (-perm), dem Benutzer (-user, -uid), der Gruppe (-group, -gid) sowie den Zeitpunktem des letzten Zugriffs (-atime, -amin, -anewer), der letzten Änderung (-mtime, -mmin) oder der Erstellung (-ctime, -cmin, -cnever).
So zeigt find -mtime -3 alle Dateien, deren Änderungsdatum sich innerhalb der letzten drei Tage verändert hat, während find -ctime +3 eine Liste aller Dateien erstellt, die mehr als drei Tagen alt sind.
Mit den Operatoren -and und -or verbinden Sie mehrere Ausdrücke; mit ! negieren Sie eine Suche. So findet find -name "*.txt" -and -ctime -3 alle Dateien, deren Namen auf *.txt enden und die jünger als 3 Tage sind, während find ! -name "*tmp*" alle Dateien findet, deren Name nicht tmp enthält.
Wie Find die Dateien anzeigt, das beeinflussen die Optionen -printf– oder -fprintf. So zeigt find -printf "%f %s\n" für jede Datei den Namen ohne Pfad sowie die Größe in Bytes.
Mit -exec führt Find für jede Datei den angegebenen Befehl aus. Die Schreibweise ist dabei etwas umständlich: So zeigt find -name *.jpg -exec jpeginfo \{\} \; zum Beispiel zu jedem JPEG-Bild die Auflösung und die Farbtiefe an, sofern der Befehl Jpeginfo installiert ist. Der Platzhalter {} markiert den Pfad zur gefundenen Datei und das Semikolon das Ende des Befehlsaufrufes. Die Escape-Zeichen (\) verhindern, dass die Shell Platzhalter und Semikolon für sich beansprucht.
Finden in Sekunden
Nachteil von Find ist die mitunter lange Suchzeit. Für eine schnelle Suche eignet sich der Befehl Locate besser, da er auf einen Index zurückgreift. Diesen Index erstellt das Programm Updatedb mit Hilfe des Befehls Find. Der Index enthält nur Dateinamen inklusive Pfade. Nach etwas anderen können Sie nicht suchen.
Ein Cron-Job sorgt für die regelmäßige Aktualisierung des Indexes [9]. Führen Sie als Root den Befehl updatedb aus, wenn Sie den Index manuell aktualisieren möchten. Cron verwirft Jobs komplett, wenn der Computer zu dem angegebenen Zeitpunkt nicht eingeschaltet ist. Das Programm Anacron dagegen führt den Job so bald wie möglich aus, wenn sich der Computer wieder in Betrieb befindet.
Der Befehl Locate versteht die gleichen Platzhalter wie Find, findet jedoch auch ohne diese Teilbereiche des Pfadnamens. Der Befehl locate README findet also die selben Dateien wie der Befehl locate *README*. Mit der Option -i suchen Sie unabhängig von Groß- und Kleinschreibung, mit -r anhand eines regulären Ausdrucks.
Der Befehl Locate beachtet bei der Anzeige des Ergebnisses die Zugriffsrechte nicht. Das wirft Probleme auf, wenn Updatedb die Indexdatenbank wie üblich mit vollen Root-Rechten erstellt. Ein regulärer Benutzer findet dann Dateien, die nur einen anderen Benutzer des Systems oder den Root-Benutzer etwas angehen. Auch wenn der Zugriff auf eine solche Datei verwehrt bleibt, weiß er zumindest von deren Existenz.
Dieses Problem umgeht Secure Locate (Slocate) [10], das nur Dateien anzeigt, die der Benutzer auch sehen darf. Der Befehl verwendet dabei einen eigenen Index, den Sie mit slocate -u oder wie gehabt mit updatedb aktualisieren. Für Debian gibt es ein Paket (slocate), während Suse-Anwender nicht umhin kommen, das Programm selbst zu kompilieren.
Die Suchbefehle Find und Locate zeigen Suchergebnisse an, wie sie kommen, anstatt sie alphabetisch zu sortieren. Leiten Sie die Ausgabe des Suchbefehls, wie in find -name *.txt | sort, an Sort weiter, um eine sortierte Ausgabe zu erhalten.

/usr/share/doc.” width=”277″ height=”300″ />
Abbildung 1: Der Befehl Locate auf der Suche nach Liesmich-Dateien in/usr/share/doc. Neben Find und Locate gibt es mit Which und Whereis noch zwei spezialisierte Suchprogramme, die nur in vorgegebenen Pfaden suchen. So ermittelt Which den Aufenthaltsort einer ausführbaren Datei im Suchpfad ($PATH), während Whereis zusätzlich nach Manpages und Quelltexten fahndet.
Textrecherche
Mit Grep suchen Sie im Inhalt einer Datei. So sucht grep "Beispiel" artikel.html in der Datei artikel.html nach dem Begriff Beispiel. Mit der Option -i sucht grep unabhängig von Groß- und Kleinbuchstaben.
Wie Find und Locate unterstützt Grep Dateimuster. Mit grep "Beispiel" * suchen Sie in allen Dateien des aktuellen Verzeichnisses nach dem Begriff Beispiel und mit -r schalten Sie die rekursive Suche ein.
Nach Mustern suchen Sie mit Hilfe eines regulären Ausdrucks. So findet grep "B.*n" städte.txt in der Datei städte.txt sowohl Bonn als auch Berlin. Die Buchstaben B und n nimmt Grep dabei, wie sie sind. Der Punkt hingegen steht für ein beliebiges Zeichen und das Sternchen gibt an, dass ein solches keinmal oder beliebig oft vorkommen darf.
Der Befehl Grep kommt oft im Duo mit anderen Befehlen zum Einsatz. So schauen Sie mit dpkg -l | grep Paketname oder rpm -qa | grep Paketname, ob ein bestimmtes Debian- oder RPM-Paket installiert ist. Mit grep "Ausdruck" probieren Sie einen regulären Ausdruck interaktiv aus. Wie viele andere Befehle verwendet Grep die Standardeingabe, wenn Sie keine Datei angeben. Versuchen Sie es mit grep "B.*n" und geben Sie die Städtenamen Berlin, Bonn und Frankfurt ein.
Aufräumen
Beim Aufräumen hilft eine Übersicht, welche Dateien und Verzeichnisse wieviel Platz auf der Festplatte belegen. Für einzelne Dateien zeigt der Befehl ls -l die Größe in Bytes an. Verwenden Sie ls -lh, um die Größe mundgerecht in Kilobytes, Megabytes oder Gigabytes umgerechnet zu bekommen.
Die Größe eines Verzeichnisses samt aller Unterverzeichnisse erfahren Sie mit dem Befehl du -sh. Die Größe der Unterverzeichnisse bekommen Sie angezeigt, wenn Sie die Option -s weglassen. Mit -a gibt der Befehl zusätzlich die Größe jeder Datei an.
Eine grafische Alternative zu Du stellt Filelight dar. Das KDE-Programm erstellt für ein Verzeichnis eine Tortengrafik, deren einzelne Tortenstücke angeben, wieviel Platz ein Verzeichnis oder eine Datei belegen. Klicken Sie auf ein Tortenstück, um es in der Ansicht zu zentrieren und so noch mehr Details zu erfahren. Mit dem Knopf, der einen Pfeil nach links zeigt, kommen Sie wieder zur vorherigen Ansicht zurück.
Glossar
-
rekursiv
-
Lösung eines Problems, in dem eine Funktion sich selbst aufruft. Hier: Durchsuchen eines Verzeichnisses mitsamt aller Unterverzeichnisse.
-
Backend
-
Teil eines Programm, das die eigentliche Arbeit verichtet.
-
Frontend
-
Programm oder Teil eines Programms, das die Benutzeroberfläche zur interaktiven Eingabe und Anzeige von Daten bereit stellt.
-
Index
-
Zusammenfassende Datenstruktur zum schnellen Auffinden von Daten anhand bestimmter Kriterien.
-
Metadaten
-
Daten, die Informationen über andere Daten enthalten. Beispiele: Der Aufnahmezeitpunkt eines Digitalfotos, der Titel eines im MP3- oder Ogg-Vorbis-Format gespeicherten Liedes oder der Autor eines OpenDocument-Dokumentes.
-
reguläre Ausdrücke
-
Ein Ausdruck, der Untermengen einer Zeichenkette beschreibt. Reguläre Ausdrücke kommen oft beim Auswerten von Texte zum Einsatz.
-
Cron-Job
-
Aufgabe, die das System regelmäßig zu einem bestimmten Zeitpunkt ausführt.
Infos
[1] Find und Locate: Christian Baun, “Spürnasen”, LinuxUser 05/2005, S. 88, http://www.linux-user.de/ausgabe/2005/05/088-find/
[2] Beagle: Tim Schürmann, “Spürhund”, LinuxUser 07/2005, S. 64, http://www.linux-user.de/ausgabe/2005/07/064-beagle/
[3] Kat: http://kat.mandriva.com
[4] Rlocate: http://sourceforge.net/projects/rlocate/
[5] Grep: Heike Jurzik, “Stecknadel im Heuhaufen”, LinuxUser 05/2004, S. 76, http://www.linux-user.de/ausgabe/2004/05/076-zubefehl/
[6] Imgseek: Carsten Schnober, “Immer das richtige Bild”, LinuxUser 10/2005, S. 34
[7] Doodle: http://gnunet.org/doodle/
[8] Reguläre Ausdrücke: Martin Möller, “Strukturierte Suche”, LinuxUser 08/2005, S. 90, http://www.linux-user.de/ausgabe/2005/08/090-regex/
[9] Cron: Heike Jurzik, “Punktlandung”, LinuxUser 02/2006, S. 94, http://www.linux-user.de/ausgabe/2006/02/094-zubefehl/
[10] Slocate: http://sourceforge.net/projects/slocate/





