rhel-find

RHEL 10 - La commande find


La commande find est une commande Linux très utile, notamment lorsqu'on est confronté à un grand nombre de fichiers et de dossiers. Elle permet de trouver des éléments, par leur nom, leur type, leur taille, leur date et bien d'autres paramètres.


Structure basique de la commande

find /chemin/où/chercher test action

Critères basiques

  • -name → par nom
  • -iname → par nom (ignorer la casse)
  • -type → par type
  • -size → par taille
  • -user → par utilisateur propriétaire
  • -group → par groupe propriétaire
  • -perm → par permissions
  • -empty → sans contenu
  • -executable → fichiers exécutables ou dossier traversables

Exemples simples

  • Chercher tous les fichiers ayant l'extension .conf dans le dossier /etc

    find /etc -name "*.conf"
  • Chercher tous les fichiers cachés dans le dossier /home/labuser1

    find /home/labuser1/ -type f -name ".*"
  • Chercher tous les fichiers de plus de 50Ko dans le dossier /var/log

    find /var/log -type f -size +50k
  • Chercher tous les liens symboliques appartenant à root dans le dossier /dev/disk

    find /dev/disk -user root -type l
  • Chercher tous les dossiers ayant pour permissions exactes 755 dans le dossier /var/www

    find /var/www -type d -perm 755

Utilisations des opérateurs et combinaisons

Opérateur logique "ou" → -o

  • Chercher tous les dossiers nommés exactement yum ou contenant yum et finissant par .d
    find /etc -type d -name "yum" -o -name "*yum*.d"

Opérateur logique "et" → -a

  • Chercher tous les fichiers ayant pour extension .log et tous les dossiers appartenant à l'utilisateur root non-vides dans le dossier /var/log
    find /var/log \( -type f -name "*.log" -o -type d -user root \) -a -not -empty

Opérateur logique "non" → \! ou -not

  • Chercher tous les fichiers ne finissant pas par .log dans le dossier /var/log
    find /var/log \! -name "*.log" -a -type f

Récursivité

  • -maxdepth → stoppe le traitement à partir du niveau n
  • -mindepth → ne commence à traiter qu'à partir du niveau n

Toujours placer ces options en premier

Exemples

  • Chercher tous les fichiers dans le dossier /var/log sans descendre dans l'arborescence

    find /var/log -maxdepth 1 -type f
  • Chercher tous les fichiers ayant pour extension .conf dans les sous-dossiers du dossier /etc en excluant le dossier lui-même

    find /etc -mindepth 2 -type f -name "*.conf"

Utiliser les critères de temps

  • -mtime → modifié +/-n jours
  • -atime → accédé +/-n jours
  • -ctime → créé +/-n jours
  • -mmin → modifié +/-n minutes
  • -amin → accédé +/-n minutes
  • -cmin → créé +/-n minutes

Exemples

  • Chercher les fichiers modifiés depuis moins d'une heure dans le dossier /var/log

    find /var/log -type f -mmin -60
  • Chercher les fichiers créés depuis moins d'un jour dans le dossier /etc/

    find /etc -type f -ctime -1
  • Chercher les dossiers accédés depuis plus d'une heure dans /tmp

    find /tmp -type d -amin +60

Utiliser les critères de permissions

  • -perm xxx → permissions exactes
  • -perm -xxx → au minimum cette permission
  • -perm /xxx → au moins une permission

Exemple

  • Chercher les dossiers ayant exactement les permissions 755 dans le dossier /home/labuser1

    find /home/labuser1/ -type d -perm 755
  • Chercher les fichiers dont tous les utilisateurs ont au minimum les droits d'exécution dans le dossier /usr/bin

    find /usr/bin/ -type f -perm -111
  • Chercher les dossiers où le groupe propriétaire ou les autres ont au minimum le droit en lecture dans /var/www

    find /var/www -type d -perm /044
  • Chercher tous les fichiers à la racine du système ayant un SUID activé

    find / -type f -perm /4000
  • Chercher tous les dossiers à la racine du système ayant un SGID activé

    find / -type d -perm /2000

Utiliser des actions

  • Chercher et supprimer tous les fichiers ayant pour extension .jpg dans le dossier /home/labuser1

    find /home/labuser1/ -type f -name "*.jpg" -delete
  • Chercher et copier dans backup/ tous les fichiers non-vides du dossier /var/log sans récursivité

    find /var/log -maxdepth 1 -type f -not -empty -exec cp {} backup/ \;

    {} → le résultat de la recherche et \; → marque la fin de la commande

  • Chercher tous les fichiers non-vides du dossier /var/log avec une récursivité de 2 niveaux et écrire le résultat dans sortie.txt

    find /var/log -maxdepth 2 -type f -not -empty -fprint sortie.txt

    Le fichier sortie.txt sera écrasé s'il existait


Sources principales:

  • https://www.redhat.com/en/blog/linux-find-command
  • man find

Fiches RHCSA