[linux-l] Re: find -> updatedb+locate

Sven Guckes maillist-belug at guckes.net
Mo Dez 11 16:00:42 CET 2006


* Detlef Lechner <Detlef.Lechner at gmx.net> [2006-12-11 13:18]:
> Am Montag, den 11.12.2006, 09:03 +0000 schrieb Rocco Rutte:
> > >> > Um das Programm zu finden, benötigt der Laptop-Rechner mehrere Sekunden.
> > Ist das ungenau formuliert, oder sucht er wirklich
> > nur nach "Programmen" oder nach "Dateien"?
>
> Ich bin nicht sicher, daß ich Dich richtig verstanden habe.
> Wie oben mitgeteilt, habe ich den Befehl "find / -name hald" erteilt.

du laesst "find" beim root verzeichnis beginnen -
und dann muss es das ganze dateisystem durchsuchen.
ist das nicht ein wenig zu viel?

wenn du aber nur ein programm suchst,
dann sollte es in $PATH zu finden sein,
dh in einer liste von verzeichnissen.

wenn man "find" auf $PATH beschraenkt, dann
sollten hierbei auch schnellere ergebnisse
kommen als bei einer suche ueber "alles".

fuer die suche nach ausfuehrbaren dateien
im $PATH gibt es ein eigenes programm: which

bei einigen shells ist dies sogar eine eigene, dh
interne funktion (heisst manchmal auch "whence").

die namen im $PATH werden sogar ge-hash-t, so dass
praefixe mittels tab vervollstaendigt werden koennen.
also einfach zB mal "w" und danach ein TAB eingaben.

> > >Das geht bei mir unter Windows_XP schneller.
> > Ich möchte mal behaupten, dass in einer typischen Windows-Installation
> > um Größenordnungen weniger Files da sind
>
> Eine Größenordnung ist der Faktor 10. Bei mir ist der
> Faktor vielleicht 10, auch wenn mein Linux-System noch
> nicht so weit ausgebaut ist wie mein Windows-Rechner.

faktor 10?  hast du das gemessen?  oder lediglich "gefuehlt"?

ich vermute, dass die funktion in windows an
einer guenstigen stelle anfaengt zu suchen.

nur weiss man bei windows kaum, was es eigentlich macht.
darum benutze ich lieber ein system, dass es erlaubt
die funktionsweise ueber den source code nachzuvollziehen.

meine loesung:
die dateien in meinem $HOME indiziere ich mit "updatedb"
und suche dann in diesem index mittels "locate".

die erstellung des index dauerte  16 sekunden,
die ermittlung aller eintraege ca 18 sekunden.
und das fuer 400,000+ eintraege in ca 4.1MB.
damit kann ich leben. :-)

welche aehnlich tools bietet eigentlich windows,
die vergleichbar schnell und kostenguentig sind?
(rhetoric question.  no need to answer this.)

Sven

===
$ which updb
updb () {
        updatedb -U "$HOME" -o $HOME/.locatedb
}

$ date; updb; date
Mon Dec 11 15:33:32 CET 2006
Mon Dec 11 15:33:48 CET 2006

$ ls -l ~/.locatedb
-rw------- 1 guckes wwwuser 4.1M Dec 11 15:33 .locatedb

$ time ( locate -d ~/.locatedb . | wc -l )
407002
(; locate -d ~/.locatedb . | wc -l; )  1.32s user 8.88s system 56% cpu 17.915 total



Mehr Informationen über die Mailingliste linux-l