Vous êtes sur la page 1sur 10

ISTA-Lazaret

Cours Linux

locate : une recherche rapide


La premire faon d'effectuer une recherche que nous allons voir est de loin la plus simple. La commande s'appelle locate ("localiser"). Elle est trs rapide.

Utiliser locate

Son utilisation est intuitive, il suffit d'indiquer le nom du fichier que vous voulez retrouver. Par exemple : Code : Console - Slectionner - Slectionner mateo21@mateo21-desktop:~$ locate notes.txt
/home/mateo21/notes.txt

La commande a retrouv notre fichier notes.txt qui tait situ dans /home/mateo21. Essayons maintenant de retrouver ces vieilles photos d'Australie... Code : Console - Slectionner - Slectionner mateo21@mateo21-desktop:/var/log$ locate australie
/home/mateo21/photos/australie1.jpg /home/mateo21/photos/australie2.jpg /home/mateo21/photos/australie3.jpg

Locate vous donne tous les rsultats qui contiennent le mot "australie" dans leur nom. Que ce soient des fichiers ou des dossiers, elle ne fait pas la diffrence. Elle vous donne la liste complte des fichiers qu'elle a trouvs. Il existe aussi la commande slocate qui est un peu plus rcente, mais on ne la retrouve pas sur toutes les distributions par dfaut. Vous pouvez toutefois l'installer rapidement avec un aptget si vous ne l'avez pas. La commande slocate est identique locate, la diffrence prs qu'elle vrifie les droits des fichiers avant de les lister. Avec slocate, un utilisateur ne pourra donc pas voir un nom de fichier apparatre s'il n'a pas le droit de le lire, tandis qu'avec un locate le nom du fichier serait apparu dans les rsultats quand mme.

La base de donnes des fichiers

Je ne comprends pas. Je viens de crer des fichiers (avec la commande touch par exemple), et locate ne me renvoie aucun rsultat. Pourquoi ?

Formateur : Mr Lemrini

Spcialit : TRI 1

ISTA-Lazaret

Cours Linux

C'est justement le dfaut de locate dont je voulais vous parler : la commande ne fait pas la recherche sur votre disque dur entier mais sur une base de donnes de vos fichiers.

Votre problme, c'est que les fichiers viennent tout juste d'tre crs et n'ont pas encore t rpertoris dans la base de donnes. Ils ne seront donc pas dcouverts par locate. Une fois par jour, votre systme mettra jour la base de donnes. Donc, si vous ressayez demain, il est probable que locate trouve enfin votre fichier. Mais... je ne vais pas attendre 24h pour retrouver un fichier tout de mme ! Non, bien sr ! Vous pouvez forcer la commande locate reconstruire la base de donnes des fichiers du disque dur. Cela se fait avec la commande updatedb, excuter en root (avec sudo) : Code : Console - Slectionner - Slectionner sudo updatedb La mise jour de la liste des fichiers peut tre un peu longue, il faudra patienter. Une fois que c'est fini, ressayez de faire un locate, il devrait maintenant trouver votre fichier. En rsum, locate est pratique car rapide et facile utiliser. Cependant, locate donne parfois trop de rsultats car elle recherche dans tous les rpertoires du disque dur, elle n'est donc pas trs prcise. De plus, les fichiers qui viennent tout juste d'tre crs ne seront pas dcouverts, moins d'excuter updatedb. .

find : une recherche approfondie


find est la commande de recherche par excellence pour retrouver des fichiers, mais aussi pour effectuer des oprations sur chacun des fichiers trouvs. Elle est trs puissante, permet de faire donc beaucoup de choses, et par consquent... elle est un peu complexe. Formateur : Mr Lemrini

Spcialit : TRI 1

ISTA-Lazaret

Cours Linux

Savoir la manipuler est toutefois indispensable, donc dcouvrons-la !

find recherche les fichiers actuellement prsents

Contrairement locate, find ne va pas lire dans une base de donnes mais va au contraire parcourir tout votre disque dur. Cela peut tre trs long si vous avez plusieurs Go de donnes !

Avec cette mthode de recherche vous ne risquez pas de rater un fichier rcent qui aurait pu tre cr aujourd'hui. Et ce n'est pas le seul avantage, loin de l !

Fonctionnement de la commande find

La commande find s'utilise de la faon suivante : find "o" "quoi" "que faire avec" (seul le paramtre "quoi" est obligatoire)

O : c'est le nom du dossier dans lequel la commande va faire la recherche. Tous les sous-dossiers seront analyss. Contrairement locate, il est donc possible de limiter la recherche /home par exemple. Par dfaut, si ce paramtre n'est pas prcis, la recherche s'effectuera dans le dossier courant et ses sous-dossiers. Quoi : c'est le fichier rechercher. On peut rechercher un fichier par son nom, mais aussi en fonction de sa date de dernire cration, de sa taille, etc. Ce paramtre est obligatoire. Que faire avec : il est possible d'effectuer des actions automatiquement sur chacun des fichiers trouvs (on parle de "post-traitement"). L'action la plus courante consiste afficher simplement la liste des fichiers trouvs, mais nous verrons que nous pouvons 3 Spcialit : TRI 1

Formateur : Mr Lemrini

ISTA-Lazaret

Cours Linux

faire bien d'autres choses. Par dfaut, la commande find affiche les rsultats trouvs et ne fait rien d'autre avec.

Utilisation basique de la commande find

Commenons doucement, et voyons des exemples pratiques. Nous allons tout d'abord rechercher un fichier et afficher sa position. Recherche partir du nom

Je vais utiliser dans un premier temps le seul paramtre obligatoire : le nom du fichier retrouver. Je me place dans mon rpertoire home et je vais essayer de retrouver un fichier appel "logo.png" que j'ai gar. Je dois crire : Code : Console - Slectionner - Slectionner find -name "logo.png" Le -name "logo.png" est un paramtre qui demande retrouver un fichier qui s'appelle trs exactement logo.png. Voici le rsultat : Code : Console - Slectionner - Slectionner mateo21@mateo21-desktop:~$ find -name "logo.png"
/home/mateo21/projet/images/logo.png

Si la recherche n'affiche rien, cela signifie qu'aucun fichier n'a t trouv. Comme nous n'avons pas prcis o rechercher, find a cherch dans le rpertoire dans lequel nous nous trouvions et dans ses sous-rpertoires. Le ~ de l'invite de commande signifie que j'tais dans mon home, c'est--dire dans /home/mateo21/. Tous les sous-rpertoires ont t analyss. Maintenant, si je suis dans mon home mais que je veux rechercher dans un autre rpertoire, il faudra prciser en premier paramtre le rpertoire dans lequel chercher. Par exemple, si je veux retrouver tous les fichiers qui s'appellent "syslog" situs dans /var/log (et ses sous-rpertoires), je dois crire :

Formateur : Mr Lemrini

Spcialit : TRI 1

ISTA-Lazaret

Cours Linux

Code : Console - Slectionner - Slectionner find /var/log/ -name "syslog" Essayons a ! Code : Console - Slectionner - Slectionner mateo21@mateo21-desktop:~$ find /var/log/ -name "syslog"
/var/log/syslog /var/log/installer/syslog

Les paramtres correspondent ceux que je vous ai prsents un peu plus tt :


O : dans /var/log (et les sous-dossiers) Quoi : le fichier "syslog"

Il n'y a pas de paramtre "Que faire avec", donc par dfaut find choisit d'afficher les fichiers trouvs. Notez que, contrairement locate, find rcupre uniquement la liste des fichiers qui s'appellent exactement comme demand. Ainsi, s'il existe un fichier nomm "syslog2", il ne sera pas list dans les rsultats. Pour qu'il le soit, il faut utiliser le joker : l'toile * ! Exemple : Code : Console - Slectionner - Slectionner mateo21@mateo21-desktop:~$ find /var/log/ -name "syslog*"
/var/log/syslog.3.gz /var/log/syslog.5.gz /var/log/syslog.4.gz /var/log/syslog /var/log/syslog.6.gz /var/log/syslog.2.gz /var/log/syslog.1.gz /var/log/installer/syslog /var/log/syslog.0

Ici, nous avons affich tous les fichiers qui commenaient par syslog. Si on avait voulu avoir la liste des fichiers qui se terminent par syslog, on aurait crit "*syslog". De mme, si on avait voulu avoir la liste des fichiers qui contiennent syslog, que ce soit au dbut, au milieu ou la fin, on aurait crit "*syslog*". L'toile est donc un joker qui signifie "il peut y avoir n'importe quels caractres cet endroit". Et si je veux rechercher sur tout le disque dur, et pas seulement dans un dossier ? Formateur : Mr Lemrini 5 Spcialit : TRI 1

ISTA-Lazaret

Cours Linux

Facile, il suffit d'indiquer le rpertoire racine /. Je vous rappelle que sous Linux, tous les dossiers sont situs dans un sous-niveau de /. C'est un petit peu l'quivalent du "C:" sous Windows. Code : Console - Slectionner - Slectionner find / -name "syslog" La recherche depuis la racine prend beaucoup de temps si vous avez de nombreux fichiers. De plus, si vous n'tes pas root vous aurez de nombreux messages d'erreur vous indiquant que vous n'avez pas le droit d'aller dans certains rpertoires. En gnral, moins d'tre trs patient (ou dsespr), on ne fait pas de recherche depuis la racine.

Recherche partir de la taille

Vous ne connaissez pas le nom du fichier que vous recherchez ? Pas de panique ! Il y a bien d'autres faons de retrouver des fichiers (ou des dossiers d'ailleurs). Par exemple, on peut rechercher tous les fichiers qui font plus de 10 Mo. Code : Console - Slectionner - Slectionner mateo21@mateo21-desktop:/var$ find ~ -size +10M
/home/mateo21/souvenirs.avi /home/mateo21/backups/backup_mai.gz /home/mateo21/backups/backup_juin.gz

Rappel : le tilde "~" signifie "Rechercher dans mon home", en l'occurence chez moi Au lieu de se baser sur le nom, on se base ici sur la taille (-size). Le "+10M" indique que l'on recherche des fichiers de plus de 10Mo. On peut aussi utiliser "k" pour les Ko, "G" pour les Go, etc. Vous pouvez aussi utiliser un moins "-" la place du "+" pour avoir par exemple les fichiers de moins de 10 Mo. Et si vous enlevez le "+", la commande cherchera des fichiers de 10 Mo exactement (ni plus, ni moins). Recherche partir de la date de dernier accs

Vous tes sr d'avoir accd votre rapport au format .odt il y a moins de 7 jours, mais vous n'arrivez pas le retrouver ? Formateur : Mr Lemrini 6 Spcialit : TRI 1

ISTA-Lazaret

Cours Linux

Avec -atime, vous pouvez indiquer le nombre de jours qui vous sparent du dernier accs un fichier. Code : Console - Slectionner - Slectionner mateo21@mateo21-desktop:~$ find -name "*.odt" -atime -7
/home/mateo21/ecriture/resume_infos_juin.odt

J'ai ici combin une recherche avec le nom et une recherche avec la date. Si je ne me souvenais mme plus de l'extension du fichier, j'aurais d utiliser seulement -atime, mais a m'aurait probablement donn beaucoup de fichiers (en fait tous les fichiers modifis depuis 7 jours dans mon rpertoire personnel !). L encore, vous pouvez utiliser un "+" la place... ou mme enlever le signe pour rechercher un fichier qui aurait t accd il y a exactement 7 jours. Rechercher uniquement des rpertoires ou des fichiers

On peut aussi rechercher uniquement des rpertoires ou des fichiers. Utilisez :


-type d : pour rechercher uniquement des rpertoires (directories). -type f : pour rechercher uniquement des fichiers (files).

Par dfaut, find cherche des rpertoires ET des fichiers. Ainsi, si vous avez un fichier appel syslog et un rpertoire appel syslog, les deux rsultats seront affichs. Pour avoir uniquement les rpertoires qui s'appellent syslog (et pas les fichiers), tapez donc : Code : Console - Slectionner - Slectionner find /var/log -name "syslog" -type d

Utilisation avance avec manipulation des rsultats

Pour l'instant, n'avons pas indiqu de paramtre "que faire avec" pour effectuer une action sur les rsultats trouvs. Par dfaut, les noms des fichiers trouvs taient affichs. En fait,

Formateur : Mr Lemrini

Spcialit : TRI 1

ISTA-Lazaret

Cours Linux

Code : Console - Slectionner - Slectionner

find ~ -name "*.jpg"


...est quivalent crire : Code : Console - Slectionner - Slectionner find ~ -name "*.jpg" -print -print signifie "Afficher les rsultats trouvs". Si le -print n'est pas crit, la commande comprend toute seule qu'elle doit afficher la liste des fichiers. On peut cependant remplacer ce -print par d'autres paramtres. Afficher les fichiers de faon formate

Par dfaut, on liste juste les noms des fichiers trouvs. On peut cependant avec l'option -printf (qui rappellera certains le langage C) manipuler un peu ce qui est affich. Exemple : Code : Console - Slectionner - Slectionner
mateo21@mateo21-desktop:~$ find . -name "*.jpg" -printf "%p - %u\n" ./photos/australie1.jpg - mateo21 ./photos/australie2.jpg - mateo21 ./photos/australie3.jpg - mateo21

Ici, j'affiche le nom du fichier, un tiret, et le nom du propritaire de ce fichier. Le \n permet d'aller la ligne. Je vous conseille fortement de lire la doc, la section "-printf" (faites une recherche). Direction : man find ! Vous y trouverez tous les lments utilisables avec -printf, en plus du %p et du %u. Supprimer les fichiers trouvs

Un des usages les plus courants de find, part retrouver des fichiers, consiste les supprimer. Si je veux faire le mnage dans mon home, et par exemple supprimer tous mes fichiers jpg, je vais crire ceci :

Formateur : Mr Lemrini

Spcialit : TRI 1

ISTA-Lazaret

Cours Linux

Code : Console - Slectionner - Slectionner find ~ -name "*.jpg" -delete Soyez bien sr de ce que vous faites ! Il n'y aura pas de confirmation !

Et voil, toutes les images ont disparu. Appeler une commande

Avec -exec, vous pouvez appeler une commande qui effectuera une action sur chacun des fichiers trouvs. Imaginons que je souhaite mettre un chmod 600 pour chacun de mes fichiers jpg, pour que je sois le seul pouvoir les lire : Code : Console - Slectionner - Slectionner find ~ -name "*.jpg" -exec chmod 600 {} \; La commande n'affiche rien s'il n'y a pas eu d'erreur. Euh, comment a marche ce truc ? Pour chaque fichier .jpg trouv, on excute la commande qui suit -exec :

Cette commande ne doit PAS tre entre guillemets. Les accolades {} seront remplaces par le nom du fichier. La commande doit finir par un \; obligatoirement.

Exercice : essayez de regrouper tous les fichiers .jpg parpills dans votre rpertoire home dans un dossier "images".

Formateur : Mr Lemrini

Spcialit : TRI 1

ISTA-Lazaret

Cours Linux

Si le fait que la commande ne vous demande pas de confirmation vous ennuie, vous pouvez utiliser -ok la place de -exec. Le principe est le mme, mais on vous demandera une confirmation pour chaque fichier rencontr. Il faudra rpondre par "y" (yes) ou "n" (no) chaque fois.

Formateur : Mr Lemrini

10

Spcialit : TRI 1