Professional Documents
Culture Documents
Cours Linux
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.
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. .
Spcialit : TRI 1
ISTA-Lazaret
Cours Linux
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 !
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.
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
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.
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
-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
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
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 !
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