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

Detlef Lechner Detlef.Lechner at gmx.net
Mo Dez 11 22:20:10 CET 2006


Hallo Sven,

g2cu

Am Montag, den 11.12.2006, 16:00 +0100 schrieb Sven Guckes:

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

Ja, nach Möglichkeit schränkt man die Suche im Dateibaum gleich zu
Beginn ein. Dann braucht das Programm nicht so viel zu suchen und wird
schneller fertig.
 
Als Anfänger habe ich aber nicht denselben Überblick wie ein Fortgeschrittener. Der weiß eventuell schon: "Das kann sich nur in einem Unterverzeichnis von /usr befinden." 

> wenn du aber nur ein programm suchst,
> dann sollte es in $PATH zu finden sein,

Ist das eine unumstößliche Regel?

Wie mir zu Ohren gekommen ist, halten sich die Linuxer ja nicht einmal
an den File-System-Standard. 
   
> 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".

Klar. Nur bin ich nicht immer sicher, daß die Datei sich im $PATH befinden muß.

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

Bei Debian und Ubuntu heißt es jedenfalls '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.

Die Dateinamenvervollständigung mittels der Tab-Taste 
benutze ich zunehmend häufig.

> > > >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"?

Gefühlt. Unter den hier vorliegenden Umständen lohnt es sich nicht zu
messen.

> 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.

Das ziehe ich eigentlich auch vor. 
Bis jetzt gilt bei mir aber meist: Wenn ich unter Windows mit den
windowseigenen Werkzeugen eine Datei suche und diese Werkzeuge mir
melden, daß die Datei nicht da sei, dann ist sie nicht da. Wenn ich
unter Linux mit linuxeigenen Werkzeugen eine Datei suche und die
Werkzeuge melden mir, die Datei sei nicht da, dann bin ich nicht sicher,
ob sie sich nicht irgendwo doch noch versteckt hat.
 
> 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. :-)

Damit könnte ich auch leben. Aber ich weiß noch nicht so richtig, welche
Dateien mir außerhalb von $PATH durch die Lappen gehen.

Nach dem (schlechten) Debian-Buch, das ich habe, aktualisiert updatedb
die Datenbank aller Dateien des Systems. Wie schränkst Du diesen Bereich
auf den Bereich $PATH ein? 

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

> ===
> $ 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

Ich habe Deine Kommandos/Programme am Ende nicht verstanden. Ich habe
die Syntax und Semantik davon noch zuwenig studiert.

Gruß
Detlef

-- 
Debian 4.0 "etch" Linux 2.6.17-grml#1 SMP PREEMPT 2006-07-25 i686
Webbrowser 2.14.3, Evolution 2.6.3, OO.o ODE 680_m4 Build-1
MD97600, WinXP MCE




Mehr Informationen über die Mailingliste linux-l