9. BESTANDEN ZOEKEN
Bestanden vinden
Als je intussen met de opdrachten cd en ls de directories en hun inhoud bekeken
hebt, dan weet je, dat een Linux-systeem nogal wat bestanden bevat. Wat nu, als je een bepaald bestand
zoekt en niet weet waar het te vinden is?
Linux zou Linux niet zijn, als daar ook niet een opdracht voor bestond; ja, zelfs meerdere opdrachten!
De bekendste is find. Dit is een zeer krachtige zoekopdracht (of moet ik zeggen: vindopdracht...),
met tal van mogelijkheden, waar we hier maar een heel klein deeltje van bespreken.
Stel, dat je een bestand zoekt met de naam mkfontdir en je hebt geen idee, waar dat staat. Dan kun
je het vinden met de opdracht:
find / -name mkfontdir
De computer zal wel even wat werk hebben aan de uitvoering van deze opdracht. En ook zul je tal van
foutmeldingen te zien krijgen. Dit laatste komt, doordat je geen teogangsrechten hebt op bepaalde delen
van je systeem (tenzij je als root ingelogd bent, maar dan krijg je die foutmeldingen ook niet...). Maar
tussen de foutmeldingen komt ook de juiste plaats van je bestand tevoorschijn: /usr/X11R6/bin/mkfontdir
(of een andere plaats, afhankelijk van je distributie e.d.).
Er is wel een manier om die foutmeldingen te vermijden:
find / -name mkfontdir 2>/dev/null
De uitleg van de toevoeging 2>/dev/null komt in een later artikel nog wel aan de orde, maar zorgt
ervoor, dat de foutmeldingen niet meer op je scherm verschijnen.
Eerst maar eens wat uitleg over de opbouw van de opdracht:
Met de / wordt aangegeven, waar find moet beginnen met zoeken. In dit geval dus in de
root-directory. find zal ook alle sub-directories daaronder doorzoeken. Vandaar, dat het even duurde
voor de opdracht uitgevoerd was...
Als je weer, dat een bestand ergens onder een bepaalde directorie moet staan, kun je de zoekopdracht ook
wat verfijnen. Zo moet het bestand killall ergens in de /etc-directory staan:
find /etc -name killall
Nu zal de uitvoering heel wat sneller gaan...
De optie -name geeft aan, dat find moet zoeken naar een bestand met een bepaalde naam.
Er bestaan ook opties, die een bestand op datum of grootte zoeken, maar daarvoor mag je weer even in de
man- of info-pages duiken...
Jokers
Maar wat nu, als je zelfs de naam van het bestand niet goed meer weet? Stel, je hebt een bestand gemaakt,
waarin de naam van je broer Piet voorkwam, bv. briefpiet.txt, maar je weet de bestandsnaam niet meer.
Dan kun je find ook niet vertellen naar welk bestand gezocht moet worden...
Ook daar bestaat een oplossing voor, nl. het gebruik van jokers. In ons voorbeeld zou je het bestand kunnen
vinden met find / -name *piet*.
Een * is een joker, en geeft aan, dat er nul of meer willekeurige tekens i.p.v. dat sterretje
mogen staan. Een ander joker-teken is ?, wat staat voor precies één teken.
Deze jokers zijn niet alleen te gebruiken in de find-opdracht, maar in bijna alle Linux-commando's
Nog meer vinden
Een andere opdracht om bestanden te vinden is locate. Met deze opdracht doorzoekt Linux een
database-bestand, waarin alle bestanden en hun lokatie zijn opgenomen. Zo'n database-bestand moet natuurlijk
regelmatig bijgewerkt worden. Dat gebeurt met de opdracht updatedb. Deze opdracht mag normaal
gesproken alleen door root uitgevoerd worden (of gebruik su).
Met de opdracht locate txt wordt gezocht naar alle bestanden en directories waarin de letters txt
voorkomen. Probeer maar eens, dan wordt het je snel duidelijk. Ook zul je merken, dat het zoeken (vinden) veel
sneller gaat dan met find, doordat maar één bestand doorzocht moet worden.
kijk ook voor meer opties en bijzonderheden over deze opdrachten in de man- en info-pages.
Laatst herzien op 18-12-2006
|