Nous utilisons des cookies pour améliorer votre expérience. En poursuivant votre navigation sur ce site, vous acceptez l'utilisation de cookies.


Politique de confidentialité

Recherche de fichiers dans un système Linux

 

Recherche de fichiers dans un système Linux

Les systèmes Linux peuvent facilement contenir des centaines de milliers de fichiers. Comment pouvez-vous trouver un fichier particulier lorsque vous en avez besoin ? La première étape consiste à organiser vos fichiers logiquement dans des répertoires de manière réfléchie, mais il existe plusieurs autres façons de trouver des fichiers, en fonction de ce que vous recherchez.

Pour trouver n'importe quel fichier, find est un programme de force brute qui parcourt fichier par fichier une hiérarchie de répertoires pour localiser une cible. locate est beaucoup plus rapide, en recherchant dans un index préconstruit que vous générez selon vos besoins.

Pour trouver des programmes, les commandes which et type vérifient tous les répertoires dans le chemin de recherche de l'interpréteur de commandes. type est intégré à l'interpréteur de commandes bash (et donc disponible uniquement lorsque vous exécutez bash), tandis que which est un programme (normalement /usr/bin/which) ; type est plus rapide et peut détecter les alias de l'interpréteur de commandes. En revanche, whereis examine un ensemble connu de répertoires, plutôt que votre chemin de recherche.

Commande locate

Sur la plupart des systèmes Linux, la commande updatedb est exécutée une fois par jour pour rassembler les noms des fichiers de votre système Linux dans une base de données. En exécutant la commande locate, vous pouvez effectuer une recherche dans cette base de données pour trouver l'emplacement des fichiers qui y sont stockés.

Voici quelques éléments que vous devez savoir sur la recherche de fichiers à l'aide de la commande locate :

  •  Il y a des avantages et des inconvénients à utiliser locate pour trouver des noms de fichiers plutôt que la commande find. La commande locate trouve les fichiers plus rapidement car elle effectue une recherche dans une base de données au lieu de devoir rechercher en direct dans tout le système de fichiers. L'inconvénient est que la commande locate ne peut pas trouver les fichiers ajoutés au système depuis la dernière mise à jour de la base de données.
  •  Tous les fichiers de votre système de fichiers ne sont pas stockés dans la base de données. Le contenu du fichier /etc/updatedb.conf limite les noms de fichiers qui sont collectés en éliminant certains types de montage, types de systèmes de fichiers, types de fichiers et points de montage. Par exemple, les noms de fichiers ne sont pas collectés à partir de systèmes de fichiers montés à distance (cifs, nfs, etc.) ou de CD ou DVD montés localement (iso9660). Les chemins contenant des fichiers temporaires (/tmp) et des fichiers spool (/var/spool/cups) sont également ajoutés. Vous pouvez ajouter des éléments pour mettre à jour (ou supprimer certains éléments que vous ne voulez pas élaguer) la base de données locate selon vos besoins. Sous ubuntu, le fichier updatedb.conf contient les éléments suivants :
PRUNE_BIND_MOUNTS="yes"
# PRUNENAMES=".git .bzr .hg .svn"
PRUNEPATHS="/tmp /var/spool /media /var/lib/os-prober /var/lib/ceph /home/.ecryptfs /var/lib/schroot"
PRUNEFS="NFS afs autofs binfmt_misc ceph cgroup cgroup2 cifs coda configfs curlftpfs debugfs devfs devpts devtmpfs ecryptfs ftpfs fuse.ceph fuse.cryfs fuse.encfs fuse.glusterfs fuse.gvfsd-fuse fuse.mfs fuse.rozofs fuse.sshfs fusectl fusesmb hugetlbfs iso9660 lustre lustre_lite mfs mqueue ncpfs nfs nfs4 ocfs ocfs2 proc pstore rpc_pipefs securityfs shfs smbfs sysfs tmpfs tracefs udev udf usbfs"

En tant qu'utilisateur normal, vous ne pouvez pas voir les fichiers de la base de données locate que vous ne pouvez pas voir normalement dans le système de fichiers. Par exemple, si vous ne pouvez pas taper ls pour afficher les fichiers du répertoire /root, vous ne pouvez pas localiser les fichiers stockés dans ce répertoire.

Voici quelques exemples d'utilisation de la commande locate pour rechercher des fichiers :

Exemple 1 :
devinfo@ubuntu $ sudo locate .bashrc
/etc/bash.bashrc
/etc/skel/.bashrc
/home/devinfo/.bashrc
/root/.bashrc
/snap/core18/2128/etc/bash.bashrc
/snap/core18/2128/etc/skel/.bashrc
/snap/core18/2128/root/.bashrc
/snap/core18/2128/usr/share/base-files/dot.bashrc
/usr/share/base-files/dot.bashrc
/usr/share/doc/adduser/examples/adduser.local.conf.examples/bash.bashrc
/usr/share/doc/adduser/examples/adduser.local.conf.examples/skel/dot.bashrc

Lorsqu'elle est exécutée en tant qu'utilisateur normal, locate ne trouve que .bashrc dans /etc/skel, les répertoires partagés et le répertoire personnel de l'utilisateur. Exécutée en tant que root, la même commande localise les fichiers .bashrc dans le répertoire personnel de tous les utilisateurs.

Options de recherche pour locate
  •  -d : Indiquer quel index utiliser
  •  -i : Recherche insensible à la casse.
  •  -r regexp : Recherche les fichiers correspondant à l'expression régulière donnée.

Contrairement à la commande find, qui utilise l'option -name pour rechercher les noms de fichiers, la commande locate localise le motif demandé s’il existe dans une partie quelconque du chemin du fichier. La commande locate trouve les fichiers et répertoires contenant le motif recherché.

Commande find

find [répertoires] [expression]

La commande find est la meilleure pour rechercher dans votre système de fichiers des fichiers basés sur une variété d'attributs. Une fois les fichiers trouvés, vous pouvez également agir sur ces fichiers (à l'aide de l'option -exec ou -ok) en exécutant les commandes de votre choix.

Lorsque vous exécutez la commande find, elle recherche dans votre système de fichiers en direct, ce qui la rend plus lente que locate, mais elle vous donne une vue à jour des fichiers de votre système Linux. Cependant, vous pouvez également indiquer à find de commencer à un point particulier du système de fichiers afin que la recherche soit plus rapide en limitant la zone du système de fichiers à rechercher.

Presque tous les attributs de fichier auxquels vous pouvez penser peuvent être utilisés comme option de recherche. Vous pouvez rechercher des noms de fichiers, la propriété, la permission, la taille, les temps de modification et d'autres attributs. Vous pouvez même utiliser des combinaisons d'attributs.

Exemple 2 :
devinfo@ubuntu:~$ sudo find /etc -name passwd
/etc/passwd
/etc/pam.d/passwd
Exemple 3 :
devinfo@ubuntu:~$ sudo find /etc -iname '*passwd*'
/etc/passwd
/etc/passwd-
/etc/security/opasswd
/etc/pam.d/chpasswd
/etc/pam.d/passwd
Options utiles
OptionsDescription
 -name motif
 -path motif
 -lname motif 
Le nom (-name), le chemin d'accès (-path) ou le lien symbolique symbolique (-lname) du fichier souhaité doit correspondre à ce motif qui peut inclure les caractères génériques *, ? et []. (Vous devez cependant échapper les caractères génériques afin qu'ils soient ignorés par l'interpréteur de commandes et transmis littéralement à find). Les chemins d'accès sont relatifs à l'arborescence des répertoires recherchés.
 -iname motif
 -ipath motif
 -ilname motif 
Les options -iname, -ipath, et -ilname sont les mêmes que identiques à celles de -name, -path et -lname, respectivement, mais sont insensibles à la casse.
-type tLocaliser uniquement les fichiers de type t. Cela inclut les fichiers ordinaires (f), les répertoires (d), les liens symboliques (l), les périphériques bloc (b), les périphériques de caractères (c), les pipes nommés (p) et les sockets (s).
 -atime N
 -ctime N
 -mtime N 
Le fichier a été consulté pour la dernière fois (-atime), modifié pour la dernière fois (-mtime) ou a subi un changement d'état (-ctime) il y a exactement N*24 heures. Utilisez +N pour "supérieur à N" ou -N pour "inférieur à N".
-size N [bckw]Considérons des fichiers de taille N, qui peuvent être donnés en blocs (b), en caractères d'un octet (c), en kilo-octets (k) ou en mots de deux octets (w). Utilisez +N pour "supérieur à N" ou -N pour "inférieur à N".
-user nomLe fichier appartient à l'utilisateur donné.
-group nomLe fichier appartient au groupe donné.
-perm modeLe fichier a des autorisations égales au mode. Utilisez - mode pour vérifier que tous les bits donnés sont définis, ou +mode pour vérifier que l'un des bits donnés est défini.
-printAfficher simplement le chemin d'accès au fichier, par rapport au répertoire de recherche.
-exec cmd ;

Appelez la commande shell donnée, cmd. Assurez-vous d'échapper à tous les métacaractères du shell, y compris le point-virgule final requis, afin qu'ils ne soient pas immédiatement évalués sur la ligne de commande. De plus, le symbole "{}" (assurez-vous de le citer ou de l'échapper) représente le chemin d'accès au fichier trouvé. Un exemple complet est :

find . -exec ls '{}' \;
-ok cmd ;Identique à -exec, mais demande également à l'utilisateur avant d'invoquer chaque commande.

Vous pouvez évaluer plusieurs expressions en même temps avec les opérateurs suivants :

expression1 -a expression2l'opérateur logique Et. (C'est la valeur par défaut si deux expressions apparaissent côte à côte, donc le "-a" est optionnel).
expression1 -o expression2l'opérateur logique Ou.
 ! expression
 -not expression 
Négation de l'expression.

Commande which

La commande which localise un fichier exécutable dans le chemin de recherche de votre shell.

which fichier

Exemple 4 :
devinfo@ubuntu:~$ which cat
/usr/bin/cat
devinfo@ubuntu:~$ which vi
/usr/bin/vi

Si plusieurs programmes de votre chemin de recherche ont le même nom (par exemple, /usr/bin/who et /usr/local/bin/who), which ne signale que le premier.

Commande type

La commande type, comme which, localise un fichier exécutable dans le chemin de recherche de votre shell :

Exemple 5 :
devinfo@ubuntu:~$ type cat vi nslookup
cat est /usr/bin/cat
vi est /usr/bin/vi
nslookup est /usr/bin/nslookup

Cependant, le type est intégré au shell bash, alors qu'il s'agit d'un programme sur disque. En tant que commande intégrée à l'interpréteur de commandes, type est plus rapide que which ; cependant, elle n'est disponible que dans certains interpréteurs de commandes tels que bash.

Commande whereis

whereis [options] fichiers

La commande whereis tente de localiser les fichiers donnés en recherchant une liste de répertoires codée en dur. Elle peut trouver des exécutables, de la documentation et du code source. whereis est un peu bizarre car sa liste de répertoires peut ne pas inclure ceux dont vous avez besoin.

Exemple 6 :
devinfo@ubuntu:~$ whereis cat vi man
cat: /usr/bin/cat /usr/share/man/man1/cat.1.gz
vi: /usr/bin/vi /usr/share/man/man1/vi.1.gz
man: /usr/bin/man /usr/local/man /usr/share/man /usr/share/man/man7/man.7.gz /usr/share/man/man1/man.1.gz
Options utiles
 -b
 -m
 -s 
Liste uniquement les exécutables (-b), les pages de manuel (-m) ou les fichiers de code source source (-s).
 -B dirs... -f
 -M dirs... -f
 -S dirs... -f 
Recherchez des exécutables (-B), des pages de manuel (-M) ou des fichiers de code source (-S) uniquement dans les répertoires donnés. Vous devez suivre la liste des répertoires avec l'option -f avant de lister les fichiers que vous recherchez.

Partager ce cours avec tes amis :
Rédigé par ESSADDOUKI Mostafa
ESSADDOUKI
The education of the 21st century opens up opportunities to not merely teach, but to coach, mentor, nurture and inspire.