Dateien schneller finden
Sucht man eine Datei auf der Festplatte, so kann man zum Beispiel find(1) dazu benutzen:
# find / -name "*<Teil des Names der gesuchten Datei>*"
Da dabei jedes mal die ganze Festplatte durchsucht wird, ist dies nicht der effektivste Weg, wenn man mehrere Dateien sucht. Dafür gibt es locate(1). Vor dem ersten Gebrauch von locate muss eine Datenbank erstellt werden, auf die locate später zurückgreift:
# /usr/libexec/locate.updatedb
>>> WARNING
>>> Executing updatedb as root. This WILL reveal all filenames
>>> on your machine to all login users, which is a security risk.
Erstellt man die Datenbank als root-Benutzer, so können alle Benutzer des Systems den Inhalt von Verzeichnissen herausfinden, von denen sie normalerweise nicht die Berechtigungen haben. Dies kann auf Mehrbernutzersystemen ein Problem sein. Dort sollte die Datenbank als unprevilegierter Benutzer erstellt werden:
# su -m nobody -c /usr/libexec/locate.updatedb
Ist die Datenbank erstellt, so kann sie mit locate durchsucht werden, wenn man eine Datei sucht:
# locate <Teil des Names der gesuchten Datei>
Möchte man, dass die Gross-/Kleinschreibung ignoriert wird, so kann man zusätzlich die -i Option verwenden.
Die locate-Datenbank wird wöchentlich automatisch auf FreeBSD durch das periodic weekly Skript /etc/periodic/weekly/310.locate und auf OpenBSD durch /etc/weekly aktualisiert.
Comments
Für Debian gibt es slocate: http://packages.debian.org/stable/utils/slocate
"This locate can index all files on your system, but only files and directories which the invoking user has access to will be displayed."
Gibt sicher ein Port davon.
slocate kannte ich gar nicht und es ist auch nicht in den Ports vorhanden. Ich hab es hier mal auf einem FreeBSD 6.2 installiert. Funktioniert auch ganz gut. Ich kann updatedb als root ausführen, die Datenbank wird erstellt und ich sehe danach auch nur die Dateien die ich als Benutzer sehen darf. Allerdings kriege ich auch manchmal folgende Fehlermeldung:
slocate in free(): error: chunk is already free
Abbruch
Mal kucken, evtl. liegts auch an meinem Patch, damit ich slocate zum Laufen gebracht habe...