3. Recherche de fichiers

man find
man xargs

1. Recherche de fichier avec find

  • Syntaxe :

    find <REPERTOIRE> <CRITERE> [-exec <COMMANDE> {} \;]
    
  • Le paramètre REPERTOIRE indique à find l’emplacement de démarrage de la recherche et CRITERE peut être, parmi beaucoup d'autres, le nom du fichier ou du répertoire que nous recherchons.

Exemples :

find /usr/share/doc -name "x*"
find / -user 1000

find / -user 1000 2> /dev/null
* Les lignes correspondantes sont listées sur la sortie standard.

L'option -ls offre une sortie plus lisible :

find / -user 1000 -ls

On peut également lancer une commande sur cette sortie, comme supprimer le fichier ou changer le mode de permission, en utilisant l'option -exec de find. Par exemple, pour copier tous les fichiers appartenant à l'utilisateur 2015, à condition d'en avoir les droits :

find / -type f -user 2015 –exec cp -a {} ~/backup \;

Dans ce dernier exemple,

  • \; à la fin de la ligne termine la commande -exec
  • et {} remplace chaque ligne trouvée par la commande find.

Recherche avec find et xargs

  • On voit souvent en xargs le compagnon de find. En fait, xargs traite chaque ligne de la sortie standard comme paramètre pour une autre commande. On pourrait utiliser aussi xargs pour supprimer tous les fichiers appartenant à un utilisateur avec cette ligne de commande :
find / -type f -user 2015 | xargs cp -a -t ~/backup
  • Remarque : Certaines commandes comme rm ne savent pas traiter les paramètres trop longs. Il est parfois nécessaire de supprimer tous les fichiers d'un répertoire avec :
ls labs | xargs rm -f

Options courantes de find

  • Exemples d'options courantes :
find /home/francois -name "fichier*"
find labs -iname fichier1.txt
find labs -name "x*" -exec rm {} \;

2. Exercice : Trouver des fichiers SUID/SGID

  • Ici de la page manuel :
find / \( -perm -4000 -fprintf /root/suid.txt '%#m %u %p\n' \) , \
       \( -size +100M -fprintf /root/big.txt '%-10s %p\n' \)
cat /root/suid.txt
cat /root/big.txt
  • Trouver tous les fichiers SUID root :
find / -user root -perm -4000       
  • Trouver tous les fichiers SGID root :
find / -group root -perm -2000
  • Trouver tous les fichiers SUID et SGID appartenant à n’importe qui :
find / -perm -4000 -o -perm -2000
  • Trouver tous les fichiers qui n’appartiennent à aucun utilisateur :
find / -nouser
  • Trouver tous les fichiers qui n’appartiennent à aucun groupe :
find / -nogroup
  • Trouver tous les liens symboliques et leurs cibles.
find / -type l -ls
  • Effacer les fichiers de plus de 5 jours :
find /path/to/directory/ -mindepth 1 -mtime +5 -delete

3. Recherche de fichiers avec locate

  • Syntaxe :
$ locate <CHAINE>
  • locate liste tous les fichiers et répertoires qui correspondent à l'expression.
$ locate fichier1             
  • La recherche avec locate est très rapide. En fait, locate interroge la base de données /var/lib/?locate/?locate.db. Cette base de données est tenue à jour par une tâche quotidienne cron (cronjob) qui lance updatedb.
  • Le fichier /etc/updatedb.conf est lu par updatedb lorsqu'il est lancé manuellement pour déterminer les systèmes de fichiers et les répertoires dont il ne doit pas tenir compte (montages NFS et /tmp par exemple).
  • On peut lancer une mise à jour manuelle :
$ su
# updatedb
# exit
$ locate fichier1

4. Recherche de fichiers avec which

  • Syntaxe :
$ which chaîne
  • which retourne le chemin complet de la commande dont le nom est chaîne en parcourant les répertoires définis dans la variable PATH de l'utilisateur uniquement.

5. Recherche de fichiers avec whereis

  • Syntaxe :
$ whereis chaîne
  • Cette commande affiche le chemin absolu des sources, binaires des pages manuel pour les fichiers correspondant à chaîne en se basant sur le PATH ainsi que sur des répertoires couramment utilisés.

Commentaires