GNU/Linux >> Tutoriels Linux >  >> Linux

Trouvez facilement des fichiers et des répertoires sur Linux

Ce didacticiel se concentre sur la recherche de fichiers sous Linux à l'aide des commandes find et locate.

En tant qu'administrateur système, il est très courant de rechercher un fichier spécifique sur votre système de fichiers .

Cependant, il peut parfois être difficile de trouver des fichiers sous Linux système de fichiers, surtout si vous avez des dizaines d'utilisateurs différents.

Deux commandes peuvent vous aider à atteindre votre objectif :trouver et localiser.

Dans ce didacticiel, nous allons voir comment utiliser efficacement ces commandes et comment les régler pour obtenir ce que nous recherchons.

Rechercher des fichiers à l'aide de la commande Rechercher

La première façon de rechercher et de localiser des fichiers sur un hôte Linux consiste à utiliser la commande find.

Par défaut, la commande find est disponible sur toutes les distributions et a la syntaxe suivante

$ find <options> <path> <expression>

Astuce rapide  :avez-vous du mal à vous rappeler si le chemin ou l'expression vient en premier ?

N'oubliez pas que pour le grEP est E xpression P ath, et find est le contraire, donc P à E xpression !

Find est une commande assez puissante car elle a beaucoup plus d'options que la commande de localisation.

Voici toutes les possibilités de la fonction find sous Linux.

Rechercher des fichiers avec rechercher par nom de fichier

L'utilisation la plus courante de la fonction de recherche consiste à localiser des fichiers en fonction de leurs noms de fichiers .

$ find <path> -name <pattern>

La principale différence entre find et locate lorsqu'il s'agit de rechercher des fichiers est que find recherchera les noms de fichiers tandis que locate recherchera les chemins d'accès au fichier.

Par exemple, si nous revenons à l'exemple de niveau d'exécution que nous avons utilisé précédemment, voici comment rechercher des fichiers de niveau d'exécution à l'aide de la commande find.

$ find / -name runlevel*

Qu'est-ce que la partie "2> /dev/null" ?

J'ai redirigé la sortie d'erreur vers /dev/null en utilisant la redirection de sortie pour éviter les messages d'erreur sur la console.

Rechercher des fichiers à l'aide de la recherche par type de fichier

Comme nous l'avons déjà mentionné dans notre article sur les liens physiques et les liens symboliques, les fichiers se voient attribuer des types de fichiers et sont utilisés comme moyen de les différencier.

Voici un récapitulatif de tous les types de fichiers utilisés sous Linux.

  • f :un fichier standard
  • d :un dossier ou un répertoire
  • l :un lien symbolique ou lien symbolique
  • b :bloquer les périphériques (comme un disque dur par exemple)
  • c :périphériques de caractères (ports série, cartes son)
  • p :tube nommé
  • s :prise

Connaissant tous ces types de fichiers, vous pouvez désormais rechercher des fichiers par type de fichier avec la commande de recherche.

$ find <path> -type <filetype>

Par exemple, si nous recherchons tous les liens symboliques sur l'hôte, nous lancerions la commande suivante.

$ find / -type l

Les paramètres peuvent être combinés, par exemple si je recherche tous les liens symboliques dont les noms de fichiers se terminent par ".service" (pour isoler tous les services systemd par exemple), je lancerais la commande suivante.

$ find / -type l -name *.service

Rechercher des fichiers à l'aide d'un modèle (pour les extensions)

Comme pour la commande locate, vous pouvez rechercher des fichiers sous Linux en utilisant un modèle.

Pour rappel, un modèle est une chaîne qui inclut des caractères globaux (tels que *, ? ou des plages).

Cette option est particulièrement utile lorsque vous essayez de rechercher des fichiers dotés d'une extension, par exemple des fichiers Javascript.

Pour rechercher des fichiers sous Linux à l'aide d'un modèle, exécutez la commande suivante

$ find <path> -name ".<extension>"
$ find / -name "*.js"

Fichiers de fichiers sur Linux par propriétaire

Parfois, vous souhaitez isoler des fichiers créés par un certain utilisateur .

Lors de la suppression d'un utilisateur sur votre hébergeur, vous pouvez par exemple vouloir supprimer tous les fichiers associés à cet utilisateur.

Parfois, les utilisateurs créent des fichiers à partir de leur répertoire d'accueil et la suppression d'un répertoire d'accueil d'utilisateur n'est pas suffisante en soi.

Par conséquent, pour trouver des fichiers créés par un certain utilisateur sous Linux, exécutez la commande suivante

$ find <path> -user <user>

Par exemple, pour trouver tous les fichiers appartenant à "john" sur mon hôte, j'exécuterais la commande suivante.

$ find / -user john

Et maintenant, que se passe-t-il si je veux supprimer tous les fichiers appartenant à John avec une simple commande ?

Cela peut être facilement réalisé en utilisant le drapeau de suppression.

$ find / -user john -delete

Rechercher des fichiers sur Linux par autorisations

À l'aide de la commande find, vous pouvez également rechercher et localiser des fichiers qui ont certaines autorisations sur votre hôte.

$ find <path> -perm <permissions>

Pour rappel, voici comment fonctionnent les autorisations de fichiers sous Linux.

Pour trouver tous les fichiers qui ont des autorisations complètes (un 777 étant donné la notation binaire), vous pouvez exécuter la commande suivante.

$ find / -perm 777

Cela peut être très pratique si, pour des raisons de sécurité, vous souhaitez vérifier si aucun fichier n'est configuré avec des autorisations complètes sur votre système.

Rechercher des fichiers avec rechercher par taille

Un autre moyen très pratique de rechercher et de localiser des fichiers sous Linux consiste à trouver la commande find avec l'option size.

L'option de taille vous permet de rechercher des fichiers qui ont exactement la taille que vous spécifiez, supérieure à une taille spécifique ou inférieure à une taille spécifique.

Pour rechercher des fichiers par taille, utilisez la commande suivante

$ find <path> -size <size>

La taille est définie par les préfixes suivants :

  • c :octets
  • b :blocs de 512 octets
  • k : Kilo-octets
  • M :Mégaoctets
  • G :Gigaoctets

Vous pouvez spécifier un "+" si vous recherchez des fichiers supérieurs à la taille spécifiée.

Par exemple, pour trouver des fichiers supérieurs à 1 Go sur votre système, exécutez la commande suivante

$ find / -size +1G

Pour rechercher des fichiers inférieurs à 10 Mo sur votre système , exécutez la commande suivante

$ find / -size -10M

Enfin, pour rechercher des fichiers qui sont exactement la taille spécifiée dans la requête, vous ne devez pas ajouter de préfixes plus ou moins à la commande.

$ find / -size 1024k

La commande qui vient d'être définie trouvera tous les fichiers dont la taille est exactement de 1024 Ko sur votre hébergeur.

Rechercher des fichiers sur Linux par date de modification

Grâce à la recherche, vous pouvez également rechercher des fichiers avec une date de modification, récente ou non.

Cette commande est très pratique et utilisée assez souvent par les administrateurs système pour rechercher des fichiers ou des répertoires récemment modifiés.

Pour rechercher des fichiers à l'aide de Rechercher par date de modification, exécutez la commande suivante

$ find <path> -mtime <time>

Où le temps représente les fichiers modifiés il y a 24* .

Par conséquent, le temps est exprimé en jours.

Comme pour l'option de taille, vous pouvez ajouter un "plus " ou un "moins ” à l'heure de rechercher les fichiers modifiés il y a plus de

Par exemple, pour rechercher des fichiers modifiés il y a exactement 3 heures , vous exécuteriez la commande suivante.

$ find / -mtime 3

Pour rechercher des fichiers modifiés il y a plus d'une semaine , vous exécuteriez la commande suivante

$ find / -mtime +7

Pour rechercher les fichiers modifiés il y a moins de deux jours , vous exécuterez la commande suivante

$ find / -mtime -2

Rechercher des fichiers avec une profondeur dynamique

Comme vous l'avez sans doute remarqué, depuis le début de ce tutoriel, nous donnons des exemples de recherches de fichiers à partir du répertoire racine.

Par conséquent, tous les dossiers sont parcourus de manière récursive.

Cependant, nous pouvons limiter le nombre de répertoires parcourus récursivement à partir d'un répertoire, c'est ce qu'on appelle la profondeur.

Pour limiter les recherches de fichiers à une profondeur donnée , exécutez la requête suivante

$ find <path> -maxdepth <depth>

À titre d'exemple, voici comment vous pouvez limiter les recherches de fichiers au répertoire actuel, sans parcourir les répertoires enfants.

$ find / -maxdepth 1

Vous pouvez évidemment combiner cette commande avec le drapeau name afin de rechercher des fichiers avec un nom donné dans le répertoire courant.

$ find . -maxdepth 1 -name *.tar

Chaining find avec -exec

Dans certains cas, il peut être utile d'enchaîner la commande find avec la commande exec.

L'option exec peut être utilisée pour enchaîner plusieurs commandes :prendre le résultat de la première comme entrée de la seconde.

Disons par exemple que vous souhaitez retrouver tous les fichiers modifiés il y a moins d'une minute

$ find /home/user -mmin -1
./file1

Supposons maintenant que vous souhaitiez supprimer tous les fichiers modifiés il y a moins d'une minute.

Vous pouvez enchaîner la commande find avec l'option -exec en utilisant cette syntaxe.

$ find /home/user -mmin -1 -exec echo rm -f '{}' \;

Évidemment, nous "échoons" d'abord les résultats car nous voulons nous assurer que nous supprimons les bons fichiers.

Lorsque vous êtes prêt à supprimer ces fichiers, supprimez simplement la commande echo.

$ find /home/user -mmin -1 -exec rm -f '{}' \;

Rechercher des fichiers sur Linux à l'aide de la commande Locate

Un autre excellent moyen de rechercher et de localiser des fichiers sous Linux consiste à utiliser le locate commande.

Prérequis

Si la commande de localisation n'est pas disponible sur votre système, assurez-vous de lire la section suivante pour faire fonctionner la localisation sur votre système.

a - Installation de Locate sur les distributions basées sur APT et RPM

Pour installer localiser , vous aurez besoin des privilèges sudo sur votre hôte Linux.

Pour vérifier si locate est installé sur votre hôte, exécutez la commande locate dans la ligne de commande.

$ locate

Si locate est installé sur votre ordinateur, il s'attendra à ce qu'une expression soit fournie

Si locate n'est pas installé sur votre hébergeur, un message d'erreur s'affichera

Pour installer locate sur Ubuntu 18.04 et Debian 10, exécutez la commande suivante.

$ sudo apt-get install mlocate

De même, si vous utilisez une distribution basée sur CentOS ou Fedora, exécutez la commande suivante pour installer locate.

$ sudo yum install mlocate

b – Mise à jour de votre base de données mlocate

La localisation fonctionne avec une base de données locale stockée sur votre système de fichiers qui stocke chaque nom de fichier de votre hôte.

Lors de l'exécution d'une commande de localisation, locate recherchera dans la base de données préparée par updatedb pour le fichier que vous recherchez.

Périodiquement, une tâche cron met à jour mlocate.db fichier pour que vous recherchiez les entrées les plus récentes.

La base de données se trouve dans /var/lib/mlocate/mlocate.db par défaut et le fichier de configuration updatedb est stocké dans /etc/updatedb.conf .

Pour l'instant, vous pouvez laisser les options par défaut et exécuter une simple commande updatedb pour actualiser votre base de données.

$ sudo updatedb

Rechercher les fichiers ayant reçu un modèle de nom

Le moyen le plus simple de rechercher des fichiers sous Linux consiste à fournir un modèle à la commande de localisation .

Par défaut, la syntaxe de la commande locate est la suivante

$ locate [OPTION]... [PATTERN]...

Si vous recherchez un fichier de configuration donné sur votre système, un moyen simple de le trouver consiste à fournir son nom de fichier complet à la commande de localisation.

$ locate updatedb.conf

Comme vous pouvez le voir, la commande de localisation renvoie les chemins complets vers le fichier que je recherche.

Rechercher des fichiers dans des répertoires restreints

Parfois, vous n'avez peut-être pas accès à certains répertoires de votre système.

Par conséquent, vous ne pourrez pas localiser les fichiers qui s'y trouvent.

Prenons l'exemple d'un dossier interdit contenant un fichier nommé "restricted-file ".

Pour localiser les fichiers situés dans des répertoires restreints, vous devez exécuter la commande locate avec les privilèges sudo.

$ sudo locate restricted-file

Rechercher des fichiers à l'aide d'un modèle

À l'aide de la commande de localisation, vous pouvez fournir des "modèles" sous la forme de caractères globaux .

Caractères Globbing , également appelés caractères génériques, sont des caractères utilisés pour faire correspondre une ou plusieurs entrées avec une expression simplifiée.

Le plus populaire est le "* ” qui correspondra à n'importe quel caractère, y compris aucun.

Voici un tableau récapitulatif des caractères globaux et de leurs fonctions.

Caractère générique Description Exemple Matchs Ne correspond pas
* correspond à n'importe quel nombre de caractères dont aucun devco* devconnected, devcoco, devco.com devdevco,
[abc] correspond à un caractère donné entre parenthèses [ab]ab aab, bébé cab
[a-z] correspond à un caractère de la plage (dépendante des paramètres régionaux) donnée entre parenthèses runlevel[0-9] runlevel1, runlevel2, runlevel6 niveaux d'exécution, niveau d'exécution

À titre d'exemple, voici un moyen de localiser tous les fichiers texte sur votre système.

$ locate *.txt

Rechercher des fichiers à l'aide d'une expression régulière

Comme indiqué dans la page de manuel officielle de locate, la commande locate accepte un modèle en entrée.

Cela signifie que vous pouvez fournir une expression régulière à la commande de localisation.

Pour rechercher et localiser des fichiers donnés par une expression régulière, utilisez le –regex option pour la commande de localisation.

$ locate --regex <regex>

Par exemple, pour isoler tous les fichiers commençant par runlevel suivi d'un nombre, vous exécuterez la commande suivante.

$ locate --regex runlevel[0-9]+

Lors de l'utilisation d'expressions régulières, il y a un point important dont vous devez être conscient lors de la localisation des fichiers.

La commande locate recherche les chemins d'accès aux fichiers dans sa base de données locale.

Par conséquent, lors de la recherche de fichiers, vous devez savoir que votre expression régulière doit correspondre au chemin d'accès au fichier et non au nom du fichier uniquement.

Par exemple, si je recherche des fichiers commençant par "run", aucun résultat ne sera renvoyé car le chemin d'accès au fichier commence par "/usr".

Recherchez les fichiers en utilisant l'option insensible à la casse

Lors de la recherche de fichiers sur votre système de fichiers, vous pouvez ne pas être sûr de la façon dont un fichier donné a été nommé.

C'était écrit en majuscule ou en minuscule ? Contient-il des lettres majuscules ?

Pour rechercher et localiser des fichiers à l'aide d'une option insensible à la casse, ajoutez l'option -i à votre commande de localisation.

$ locate -i <file_pattern>

Rechercher des fichiers par contenu à l'aide de grep

Dans certains cas, vous pouvez être intéressé par la recherche de fichiers correspondant à un mot spécifique de la phrase qui se trouve à l'INTÉRIEUR du fichier.

Cela peut se produire par exemple si vous essayez de trouver le fichier contenant des événements de journal spécifiques.

La première façon de rechercher des fichiers correspondant à un mot spécifique consiste à utiliser la commande grep

$ grep -r <pattern> <path>

Remarque :n'oubliez pas l'option "-r" si vous recherchez des fichiers dans des répertoires entiers.

Par example. si vous recherchez tous les fichiers ayant une "erreur" dans leur contenu, situés dans votre répertoire personnel, vous devez taper

$ grep -r error /home/user

Dans certains cas, vous souhaiterez peut-être rechercher des fichiers à partir d'une expression régulière.

Pour rechercher des fichiers à l'aide d'une expression régulière, utilisez l'option "-E".

$ grep -r -E <expression> <path>

Disons par exemple que vous voulez trouver le fichier correspondant au motif "abc" dans l'un de vos fichiers, vous taperez

$ grep -r -E "abc.*" --color /home/user

Remarque :l'option de couleur est utilisée pour mettre en évidence les correspondances à l'aide de la commande grep.

Rechercher des fichiers à l'aide desquels

Un autre excellent moyen de localiser des fichiers sous Linux consiste à utiliser la commande which.

La commande qui est utilisée pour localiser les fichiers associés à une commande spécifique.

Cela peut devenir très pratique lorsque vous ne savez pas où vous avez stocké vos fichiers binaires pour une commande ou si vous avez besoin de localiser une commande afin de l'ajouter à votre PATH.

$ which <command>

Par exemple, pour rechercher les fichiers associés à la commande "ls", vous taperez

$ which ls
/usr/bin/ls

Comme vous pouvez le voir, le chemin complet du fichier vous est donné.

Recherchez les fichiers binaires à l'aide de whereis

De même, il est tout à fait possible de rechercher des fichiers en utilisant la commande whereis.

La commande « whereis » peut être vue comme un sur-ensemble de la commande « which » :« whereis » fournit des informations sur le nom de la commande, l'emplacement du fichier ainsi que l'emplacement des pages de manuel.

Pour exécuter whereis, tapez simplement "whereis" et ajoutez le nom de votre commande.

$ whereis ls
ls: /usr/bin/ls /usr/share/man/man1/ls.1.gz

Plutôt pratique !

Conclusion

Dans le didacticiel d'aujourd'hui, vous avez appris comment rechercher et localiser des fichiers sous Linux à l'aide de deux commandes importantes :locate et find.

Même si les options étaient présentées individuellement, vous devez vous rappeler qu'elles peuvent être combinées afin de pouvoir spécifier encore plus les fichiers que vous recherchez.

Comme toujours, si vous êtes intéressé par l'administration système Linux, nous avons une section complète dédiée à Linux sur notre site Web.


Linux
  1. Rechercher des fichiers et des répertoires sous Linux avec la commande find

  2. Trouver des fichiers et des répertoires sous Linux comme un pro

  3. Commandes de recherche Linux

  4. Comment rechercher et supprimer des répertoires et des fichiers vides sous Linux

  5. Rechercher et copier des fichiers

Comment renommer des fichiers et des répertoires sous Linux

Commande Ls sous Linux (liste des fichiers et des répertoires)

Comment compresser des fichiers et des répertoires sous Linux

3 façons de trouver des fichiers et des répertoires sous Linux

Deux commandes pour trouver facilement des fichiers et des répertoires dans Debian 11

Comment rechercher et supprimer des répertoires vides sous Linux