find : rechercher et bien plus ....
Table des matières
find est un outil de recherche disposant d'un grand nombre d'options. Cette commande peut également enchaîner des actions sur le résultat des recherches et utiliser des expressions régulières comme motifs de recherche
Pour rechercher un fichier, par son nom :
Exemple :
Résultat :
Attention, l'option -name est sensible à la casse. Pour pallier à cela, utiliser l'option -iname :
Résultat :
Si on ne connaît pas le nom exact du fichier, on peut donner une partie de son nom. Les jockers * (un ou plusieurs caractères) et ? (un caractère) sont utilisables :
Résultat :
Si on n'a pas les droits root, et qu'on cherche dans une zone où se trouvent des fichiers que nous ne pouvons lire, la console peut se retrouvée inondée de messages "Permission denied" :
Résultat :
Ajouter en fin de commande 2> /dev/null qui va rediriger la sortie d'erreurs (stderr) sur /dev/null (c'est à dire rien).
Résultat :
L'option -type nous permet de chercher par type d'élément : f pour fichier, d pour répertoire.
Exemple : chercher les fichiers dont le nom contient sm
Résultat :
Exemple : chercher les répertoires dont le nom contient sm
Résultat :
L'option -size nous permet de chercher par la taille du fichier.
Exemple : chercher les fichiers de plus de 10Mo dans /usr/bin
Résultat :
L'option -atime nous permet de chercher par la dernière date d'accès du fichier.
Exemple : chercher les fichiers dans /var/log/samba qui ont été accédés il y a moins de 1 jour (donc aujourd'hui) :
Résultat :
Exemple : chercher les fichiers dans /var/log/samba qui ont été accédés il y a plus de 90 jours :
Résultat :
Exemple : chercher les fichiers dans /var/log/samba qui ont été accédés il y a exactement de 30 jours :
Résultat :
L'option -uid nous permet de chercher les fichiers de l'utilisateur par son UID.
Exemple : chercher les fichiers dans /tmp de l'utilisateur dont l'UID est 1000 :
Résultat :
Sur tous les fichiers trouvés par find, je veux appliquer une commande, on va utiliser l'option -exec.
Exemple : tous les fichiers dont d'UID de l'utilisateur est 500, je veux effectuer un chown pour changer son utilisateur :
Introduction
find est un outil de recherche disposant d'un grand nombre d'options. Cette commande peut également enchaîner des actions sur le résultat des recherches et utiliser des expressions régulières comme motifs de recherche
Utilisation
Utilisation de base
Pour rechercher un fichier, par son nom :
Code BASH :
find <emplacement> -name "<nom fichier>" -print
Exemple :
Code BASH :
find /usr -name "trash.svg" -print
Résultat :
Code :
/usr/share/themes/adriend-light/cinnamon/trash.svg
Attention, l'option -name est sensible à la casse. Pour pallier à cela, utiliser l'option -iname :
Code BASH :
find /usr -iname "TRASH.svg" -print
Résultat :
Code :
/usr/share/themes/adriend-light/cinnamon/trash.svg
Si on ne connaît pas le nom exact du fichier, on peut donner une partie de son nom. Les jockers * (un ou plusieurs caractères) et ? (un caractère) sont utilisables :
Code BASH :
find /usr -iname "tra?h.*" -print
Résultat :
Code :
/usr/share/gvfs/mounts/trash.mount
/usr/share/themes/adriend-light/cinnamon/trash.svg
/usr/share/cinnamon-control-center/sounds/trash.oga
Éviter les erreurs
Si on n'a pas les droits root, et qu'on cherche dans une zone où se trouvent des fichiers que nous ne pouvons lire, la console peut se retrouvée inondée de messages "Permission denied" :
Code BASH :
find . -name "samba" -print
Résultat :
Code :
find: ‘./audit’: Permission denied
find: ‘./lightdm/.config’: Permission denied
find: ‘./lightdm/.cache’: Permission denied
find: ‘./lightdm/.dbus’: Permission denied
find: ‘./speech-dispatcher’: Permission denied
find: ‘./pluto/peer’: Permission denied
find: ‘./httpd’: Permission denied
find: ‘./libvirt’: Permission denied
find: ‘./mariadb’: Permission denied
./samba
find: ‘./samba’: Permission denied
find: ‘./sssd’: Permission denied
find: ‘./ppp’: Permission denied
Ajouter en fin de commande 2> /dev/null qui va rediriger la sortie d'erreurs (stderr) sur /dev/null (c'est à dire rien).
Code BASH :
adrien@linux: /var/log $ find . -name "samba" -print 2> /dev/null
Résultat :
Code :
./samba
Utilisation avancée
Recherche par type de « fichier »
L'option -type nous permet de chercher par type d'élément : f pour fichier, d pour répertoire.
Exemple : chercher les fichiers dont le nom contient sm
Code BASH :
find /var/log/ -type f -name "*sm*"
Résultat :
Code :
/var/log/samba/log.smbd
/var/log/samba/smbd.log
/var/log/samba/old/log.smbd-20140223
/var/log/samba/old/smbd.log-20140303
/var/log/samba/old/log.smbd-20140316
/var/log/samba/old/log.smbd-20140309
/var/log/samba/old/log.smbd-20140303
/var/log/samba/old/smbd.log-20140309
/var/log/samba/old/smbd.log-20140316
/var/log/samba/old/smbd.log-20140223
Exemple : chercher les répertoires dont le nom contient sm
Code BASH :
find /var/log/ -type d -name "*sm*"
Résultat :
Code :
/var/log/samba/cores/smbd
Recherche par taille
L'option -size nous permet de chercher par la taille du fichier.
Exemple : chercher les fichiers de plus de 10Mo dans /usr/bin
Code BASH :
find /usr/bin -size +10M
Résultat :
Code :
/usr/bin/fgfs
/usr/bin/inkscape
/usr/bin/clementine
Recherche par date d'accès
L'option -atime nous permet de chercher par la dernière date d'accès du fichier.
Exemple : chercher les fichiers dans /var/log/samba qui ont été accédés il y a moins de 1 jour (donc aujourd'hui) :
Code BASH :
find /var/log/samba/ -atime -1
Résultat :
Code :
/var/log/samba/
/var/log/samba/10.6.0.38.log
/var/log/samba/10.5.26.125.log
/var/log/samba/cores
/var/log/samba/cores/smbd
/var/log/samba/cores/nmbd
/var/log/samba/10.5.150.125.log
/var/log/samba/10.5.2.213.log
/var/log/samba/10.5.0.125.log
/var/log/samba/old
/var/log/samba/pc-02-13.log
Exemple : chercher les fichiers dans /var/log/samba qui ont été accédés il y a plus de 90 jours :
Code BASH :
find /var/log/samba/ -atime +90
Résultat :
Code :
/var/log/samba/192.168.1.30.log
/var/log/samba/calvin.log
/var/log/samba/192.168.1.27.log
/var/log/samba/10.6.0.36.log
/var/log/samba/log.127.0.0.1
/var/log/samba/adrien-xp.log
/var/log/samba/10.5.0.14.log
/var/log/samba/pcportable.log
/var/log/samba/10.5.0.25.log
/var/log/samba/sim.log
Exemple : chercher les fichiers dans /var/log/samba qui ont été accédés il y a exactement de 30 jours :
Code BASH :
find /var/log/samba/ -atime 30
Résultat :
Code :
/var/log/samba/liberto.log
/var/log/samba/10.5.0.10.log
Rechercher par UID
L'option -uid nous permet de chercher les fichiers de l'utilisateur par son UID.
Exemple : chercher les fichiers dans /tmp de l'utilisateur dont l'UID est 1000 :
Code BASH :
find /tmp -uid 1000
Résultat :
Code :
/tmp/clementine-art-w12552.jpg
/tmp/clementine-art-T12552.jpg
/tmp/qtsingleapp-clemen-d211-3e8
/tmp/qtsingleapp-clemen-d211-3e8-lockfile
/tmp/.esd-1000
/tmp/.esd-1000/socket
/tmp/ssh-GNTlMKivGCot
/tmp/ssh-GNTlMKivGCot/agent.11426
/tmp/qtsingleapp-clemen-d211-1f4-lockfile
/tmp/.esd-500
/tmp/.ICE-unix/11426
Appeler une commande
Sur tous les fichiers trouvés par find, je veux appliquer une commande, on va utiliser l'option -exec.
Exemple : tous les fichiers dont d'UID de l'utilisateur est 500, je veux effectuer un chown pour changer son utilisateur :
Code BASH :
find / -uid 500 -exec chown adrien {} \;
Lister les dossiers où tout le monde peut écrire
Code BASH :
find / -type d -perm /o+w -exec ls -ld {} \;