Les 6a Vind je weg
Paul Wiegmans (paul@bonhoeffer.nl)
laatst gewijzigd
Inhoud: find, which, whereis, locate, updatedb, slocate
Intro
Hoe zoek je bestanden in Linux? Hiervoor zijn de hulpprogrammas
find, which, whereis en locate. Enkele hulpprogrammas versnellen het zoeken aanzienlijk.
which
Dit commando geeft je de locatie van een commando. Alle commandos die je
direct kunt uitvoeren, worden gezocht in enkele mappen. Wanneer een
gebruiker iets op de commandoregel tikt, zoekt Linux die bestand op in
de mappen aangegeven in de PATH-variabele. Je kunt zien wat in de
PATH-variabele staat:
echo $PATH
Wanneer Linux het commando gevonden heeft, wordt het geladen en
uitgevoerd.
Het which commando geeft je nu de map waarin Linux het bestand heeft
kunnen vinden. Alleen executable bestanden, m.a.w. commandos worden
hiermee gevonden door which. Which gebruik je zo
which bestand
waarbij bestand een uitvoerbaar bestand is. Een werkend voorbeeld
which which
whereis
Met whereis kun je niet alleen het uitvoerbare bestand vinden, maar ook
de sourcecode en de manpage hiervan en eventueel nog andere bestanden.
Verder wordt het gebruikt net zoals which :
whereis lilo
Dit geeft alle bestanden die bij het lilo commando, bijvoorbeeld
configuratiebestanden in /etc , of man pages voor het commando.
find
Omdat which alleen uitvoerbare bestanden in het PATH vindt, kun je niet
alle bestanden opzoeken. Daarvoor is het find commando. Het findcommando
zit wat ingewikkelder in elkaar en kent veel meer mogelijkheden om
bestanden te zoeken. In zijn simpelste vorm gebruik je het
zo:
find map -name zoekbestand
Hier gaat find zoeken in map genaamd "map" en bovendien alle submappen hieronder en het toont elk
bestand genaamd "zoekbestand". Je kunt inplaats van bestand ook een
gedeeltelijke bestandspecificatie opgeven met een joker, bijvoorbeeld brief* of docum??? .
Je kunt hierbij ook de rootmap opgeven als je het hele systeem wilt
afzoeken. Bedenk wel dat het afzoeken van de hele harde schijf van de
computer wat tijd in beslag neemt! Een werkend voorbeeld is dit
find / -name "vmlinu*"
Het is sterk aan te raden de bestandsnaam voor find tussen dubbele
aanhalingstekens te zetten. Als je dat niet doet, en je gebruikt jokers
in de naam (bijv * of ? ) dan gaat het niet werken. De shell
interpreteert de jokers voordat find de parameters leest.
Zeker wanneer je find start als een gewone gebruiker zonder speciale rootprivileges, en laat
zoeken op de hele schijf, zal het vaak komen op plaatsen waar jij geen
leesrechten hebt. Find geeft dan een foutmelding en de uitvoer wordt
rommelig. Je kunt deze foutmeldingen, waarin je meestal toch niet bent
geinteresseerd, afvangen door de foutmeldingen in de bittenbak te
sturen.
find / -name "vmlinu*" 2> /dev/null
Zo krijg je alleen de informatie die je zoekt.
Locate
Omdat het zoeken van de hele schijf veel tijd kost heeft men ooit
het idee gekregen om alle bestandsnamen in een database te bewaren. Het zoeken in een
database gaat
veel sneller dan het zoeken op een schijf in alle mappen. Het commando
daarvoor is locate :
locate naam
zoekt naar bestand "naam". Het zoeken gaat veel sneller, maar heeft ook
een nadeel. De database moet wel bijgewerkt worden. Als er veel
bestanden verwijderd of aangemaakt zijn, dan klopt de database niet
meer. De database kun je dan met de hand bijwerken met het commando
updatedb
Dat kost natuurlijk evenveel tijd en ook verwerkingscapaciteit als het
commando find gebruikt. Als je de database bijwerkt ga je daar
niet op wachten. Je kunt dit commando dan beter in de achtergrond
uitvoeren met
updatedb &
Linux doet dat automatisch een maal per dag en in de achtergrond zodat
de gebruiker dat niet merkt.
Opdrachten
- Zoek het uitvoerbaar bestand icewm.
- Zoek het uitvoerbaar bestand lilo.
- Zoek het uitvoerbaar bestand useradd . Waarom kun je het niet
vinden?
- Werk de locate-database bij
- Zoek met find het bestand lilo.conf op .
- Zoek met locate lilo.conf op . Wat is sneller?
- zoek met whereis alle bestanden met de naam "lilo"
- zoek met whereis alle bestanden met de naam "ssh"
- zoek naar alle bestanden genaamd linux