CV Edwin Kessels

Met behulp van het find-commando kunnen bestanden, directories en dergelijke gezocht worden op basis van een aantal specificaties. Zo is het mogelijk om alle log-bestanden (*.log) van de eigenaar oracle te zoeken. Naast het zoeken van bestanden, kan het find-commando ook worden gebruikt om bepaalde bestanden te selecteren waarop vervolgens een bewerking wordt uitgevoerd (bijvoorbeeld gzip voor het comprimeren van bestanden). De eenvoudigste manier van zoeken is het gebruik van de -name op. Hiermee kunnen bestanden en diretories op naam (eventueel met wildcards) worden gezocht.

De punt achter het find-commando betekent dat vanaf de huidige directory wordt gezocht naar bestanden die met log eindigen (bijvoorbeeld weblog en web.log). Find zoekt standaard recursief, wat inhoud dat ook alle subdirectories worden doorzocht. Met behulp van de -name optie wordt case-sensitive gezocht: een bestand of directory die eindigt op LOG, wordt niet gevonden. Om een zoekopdracht case-insensitive te maken, moet de -iname optie worden gebruikt:

Standaard wordt er gezocht naar files, directories, symbolic links, pipes en dergelijke. Om op een specifiek item te zoeken (bijvoorbeeld files) moet de -type optie worden gebruikt. De meeste gebruikte waarden zijn ‘-type f’ voor het zoeken naar alleen files en ‘-type d’ voor het zoeken naar alleen directory. Om alleen de files te zoeken waarvan de naam met een A of a beginnen, kan het volgende commando gebruikt worden:

Achter het find commando, kan de directory gespecificeerd worden waarin gestart wordt met de zoekopdracht. Om bijvoorbeeld vanuit elke willekeurige directory te zoeken in $ORACLE_HOME naar bestanden die eindigen met log, kan het volgende commando worden uitgevoerd:

Met het find commando kan ook worden gezocht op bepaalde tijdkenmerken van bestanden en directories. Hiervoor zijn ondermeer de opties -mtime (modification tijd in dagen) en -mmin (modificatietijd in minuten). Om alle bestanden te zoeken die de laatste 5 dagen zijn gewijzigd, kan het volgende commando wordt gebruikt:

Met onderstaand commando worden de bestanden getoond die de laatste 5 minuten gewijzigd zijn:

Standaard wordt het resultaat (de gevonden bestanden en dergelijke) in de vind-volgorde weergegeven. Standaard kan de sortering niet worden aangegeven in het find-commando. Met behulp van het sort-commando kan de output wel gesorteerd worden. Om de output alfabetisch te sorteren, kan het volgende commando worden uitgevoerd:

In het find-commando kan ook worden gespecificeerd dat er alleen naar bestanden en dergelijke van een bepaalde gebruiker (optie -user) of bepaalde groep (optie -group) gezocht moet worden. Dit kan handig zijn wanneer een bepaald proces onder een verkeerde gebruiker (bijvoorbeeld root) wordt gestart. Het kan dan voorkomen dat bepaalde bestanden een andere eigenaar en/of groep krijgen. Wanneer het proces weer onder de correcte gebruiker wordt gestart, kunnen ‘access denied’ melding verschijnen omdat de gebruiker geen toegang tot de bestanden heeft. Deze situatie doet zich ondermeer voor indien het Oracle proces opmn als root wordt gestart. Indien dit geval worden er een aantal bestanden in de $ORACLE_HOME directory met eigenaar root aangemaakt. Om deze bestanden op te sporen, kan het volgende commando worden uitgevoerd:

Soms kan het ook handig zijn om op bepaalde file-permissies te zoeken, dit om bijvoorbeeld te bepalen of bestanden ‘writable’ zijn voor bepaalde groepen. Met de optie -perm kan worden gespecificeerd waarop gezocht moet worden. Om op permissie 777 te zoeken, kan het volgende commando worden uitgevoerd:

Indien het niet wenselijk om recursief in alle subdirectories te zoeken, kan met de -maxdepth optie worden aangegeven hoe diep moet worden gezocht. Indien -maxdepth 1 wordt gespecificeerd, wordt alleen in de start-directory gezocht. Met -maxdepth 2 wordt ook in de subdirectories van de ‘hoofddirectory’ gezocht, maar niet in eventuele subdirectories van deze subdirectory. Om naa log-bestanden te zoeken in de huidige directory en niet in de subdirectories, moet het volgende commando worden uitgevoerd

 Acties uitvoeren op resultaat van find

Het is mogelijk om op basis van resultaat van een find commando, bepaalde bewerkingen uit te voeren. Met de -exec optie kan een actie worden gespecificeerd (bijvoorbeeld ls -l) waarin de notatie {} kan worden gebruikt om de gevonden bestandsnaam te representeren. Om van elk gevonden bestand een volledige list te tonen (ls -ltr), moet het volgende commando worden uitgevoerd:

Om alle log-files in een bepaalde directory te comprimeren (met gzip), kan het volgende commando wordt uitgevoerd:

 

Overige handige find-constructies