GNU/Linux >> Tutoriels Linux >  >> Linux

Tutoriel sur la commande de recherche Linux (avec exemples)

Lorsqu'il s'agit de localiser des fichiers ou des répertoires sur votre système, la commande find sous Linux est sans précédent. Il est simple à utiliser, mais dispose de nombreuses options différentes qui vous permettent d'affiner votre recherche de fichiers.

Lisez la suite pour voir des exemples de la façon dont vous pouvez utiliser cette commande pour trouver quoi que ce soit sur votre système. Chaque fichier n'est plus qu'à quelques frappes une fois que vous savez utiliser la commande find sous Linux.

Rechercher un répertoire

Vous pouvez indiquer à la commande find de rechercher spécifiquement des répertoires avec l'option -type d. Ainsi, la commande find ne recherchera que les noms de répertoires correspondants et non les noms de fichiers.

$ find /path/to/search -type d -name "name-of-dir"

Rechercher les fichiers cachés

Étant donné que les fichiers et répertoires cachés sous Linux commencent par un point, nous pouvons spécifier ce modèle de recherche dans notre chaîne de recherche afin de répertorier de manière récursive les fichiers et répertoires cachés.

$ find /path/to/search -name ".*"

Rechercher des fichiers d'une certaine taille ou supérieure à X

L'option -size sur find nous permet de rechercher des fichiers d'une taille spécifique. Il peut être utilisé pour rechercher des fichiers d'une taille exacte, des fichiers plus grands ou plus petits qu'une certaine taille ou des fichiers qui correspondent à une plage de taille spécifiée. Voici quelques exemples :

Rechercher des fichiers dont la taille est supérieure à 10 Mo :

$ find /path/to/search -size +10M

Rechercher des fichiers dont la taille est inférieure à 10 Mo :

$ find /path/to/search -size -10M

Rechercher des fichiers dont la taille est exactement de 10 Mo :

$ find /path/to/search -size 10M

Rechercher des fichiers dont la taille est comprise entre 100 Mo et 1 Go :

$ find /path/to/search -size +100M -size -1G

Rechercher dans une liste de fichiers

Si vous avez une liste de fichiers (dans un fichier .txt, par exemple) que vous devez rechercher, vous pouvez rechercher votre liste de fichiers avec une combinaison des commandes find et grep. Pour que cette commande fonctionne, assurez-vous simplement que chaque modèle que vous souhaitez rechercher est séparé par une nouvelle ligne.

$ find /path/to/search | grep -f filelist.txt

L'option -f sur grep signifie "fichier" et nous permet de spécifier un fichier de chaînes à faire correspondre. Ainsi, la commande find renvoie tous les noms de fichiers ou de répertoires qui correspondent à ceux de la liste.

Rechercher pas dans une liste

En utilisant la même liste de fichiers que nous avons mentionnée dans l'exemple précédent, vous pouvez également utiliser la commande find pour rechercher tous les fichiers qui ne adapter les modèles à l'intérieur du fichier texte. Encore une fois, nous utiliserons une combinaison des commandes find et grep; nous avons juste besoin d'une option supplémentaire spécifiée avec grep :

$ find /path/to/search | grep -vf filelist.txt

L'option -v sur grep signifie "correspondance inverse" et renverra une liste de fichiers qui ne correspondent à aucun des modèles spécifiés dans notre liste de fichiers.

Définir la profondeur maximale

La commande find effectuera une recherche récursive par défaut. Cela signifie qu'il recherchera dans le répertoire spécifié le modèle que vous avez spécifié, ainsi que tous les sous-répertoires du répertoire que vous lui avez demandé de rechercher.

Par exemple, si vous indiquez à find de rechercher dans le répertoire racine de Linux (/), il recherchera l'intégralité du disque dur, quel que soit le nombre de sous-répertoires de sous-répertoires existants. Vous pouvez contourner ce comportement avec l'option -maxdepth.

Spécifiez un nombre après -maxdepth pour indiquer à find le nombre de sous-répertoires à rechercher récursivement.

Rechercher des fichiers uniquement dans le répertoire courant et ne pas rechercher de manière récursive :

$ find . -maxdepth 0 -name "myfile.txt"

Rechercher des fichiers uniquement dans le répertoire courant et un sous-répertoire plus profond :

$ find . -maxdepth 1 -name "myfile.txt"

Rechercher des fichiers vides (de longueur nulle)

Pour rechercher des fichiers vides avec find, vous pouvez utiliser le drapeau -empty. Rechercher tous les fichiers vides :

$ find /path/to/search -type f -empty

Rechercher tous les répertoires vides :

$ find /path/to/search -type d -empty

Il est également très pratique de coupler cette commande avec l'option -delete si vous souhaitez supprimer automatiquement les fichiers ou répertoires vides renvoyés par find.

Supprimer tous les fichiers vides d'un répertoire (et sous-répertoires) :

$ find /path/to/search -type f -empty -delete

Rechercher le plus grand répertoire ou fichier

Si vous souhaitez déterminer rapidement quels fichiers ou répertoires de votre système occupent le plus d'espace, vous pouvez utiliser find pour effectuer une recherche récursive et générer une liste triée de fichiers et/ou de répertoires en fonction de leur taille.

Comment afficher le plus gros fichier d'un répertoire :

$ find /path/to/search -type f -printf "%s\t%p\n" | sort -n | tail -1

Notez que la commande find a été triée sur deux autres utilitaires Linux pratiques :sort et tail. La commande sort mettra la liste des fichiers dans l'ordre selon leur taille, et la commande tail ne sortira que le dernier fichier de la liste, qui est aussi le plus grand.

Vous pouvez ajuster la commande tail si vous souhaitez afficher, par exemple, les 5 fichiers les plus volumineux :

$ find /path/to/search -type f -printf "%s\t%p\n" | sort -n | tail -5

Alternativement, vous pouvez utiliser la commande head pour déterminer le(s) plus petit(s) fichier(s) :

$ find /path/to/search -type f -printf "%s\t%p\n" | sort -n | head -5

Si vous souhaitez rechercher des répertoires au lieu de fichiers, spécifiez simplement "d" dans l'option type. Comment afficher le plus grand répertoire :

$ find /path/to/search -type d -printf "%s\t%p\n" | sort -n | tail -1

Rechercher les fichiers d'ensemble setuid

Setuid est l'abréviation de "set user ID on execution", qui est une autorisation de fichier qui permet à un utilisateur normal d'exécuter un programme avec des privilèges élevés (tels que root).

Cela peut être un problème de sécurité pour des raisons évidentes, mais ces fichiers peuvent être facilement isolés avec la commande find et quelques options.

La commande find a deux options pour nous aider à rechercher des fichiers avec certaines permissions :-user et -perm. Pour trouver des fichiers pouvant être exécutés avec les privilèges root par un utilisateur normal, vous pouvez utiliser cette commande :

$ find /path/to/search -user root -perm /4000

Dans la capture d'écran ci-dessus, nous avons inclus l'option -exec afin d'afficher un peu plus de sortie sur les fichiers qui trouvent des retours avec. L'ensemble de la commande ressemble à ceci :

$ find /path/to/search -user root -perm /4000 -exec ls -l {} \;

Vous pouvez également remplacer "root" dans cette commande par tout autre utilisateur que vous souhaitez rechercher en tant que propriétaire. Ou, vous pouvez rechercher tous les fichiers avec des autorisations SUID et ne pas spécifier d'utilisateur du tout :

$ find /path/to/search -perm /4000

Rechercher les fichiers d'ensemble sgid

La recherche de fichiers avec SGID défini est presque la même que la recherche de fichiers avec SUID, sauf que les autorisations pour 4000 doivent être changées en 2000 :

$ find /path/to/search -perm /2000

Vous pouvez également rechercher des fichiers dont le SUID et le SGID sont définis en spécifiant 6000 dans l'option perms :

$ find /path/to/search -perm /6000

Répertorier les fichiers sans autorisation refusée

Lorsque vous recherchez des fichiers avec la commande find, vous devez disposer d'autorisations de lecture sur les répertoires et sous-répertoires dans lesquels vous effectuez la recherche. Si vous ne le faites pas, find affichera un message d'erreur mais continuera à chercher dans les répertoires pour lesquels vous avez l'autorisation.

Bien que cela puisse se produire dans de nombreux répertoires différents, cela se produira certainement lors de la recherche dans votre répertoire racine.

Cela signifie que lorsque vous essayez de rechercher un fichier sur tout votre disque dur, la commande de recherche va produire une tonne de messages d'erreur.

Pour éviter de voir ces erreurs, vous pouvez rediriger la sortie stderr de find vers stdout et la diriger vers grep.

$ find / -name "myfile.txt" 2>%1 | grep -v "Permission denied"

Cette commande utilise l'option -v (inverse) de grep pour afficher toutes les sorties à l'exception des lignes indiquant "Autorisation refusée".

Rechercher les fichiers modifiés au cours des X derniers jours

Utilisez l'option -mtime de la commande find pour rechercher des fichiers ou des répertoires qui ont été modifiés au cours des X derniers jours. Il peut également être utilisé pour rechercher des fichiers de plus de X jours ou des fichiers qui ont été modifiés il y a exactement X jours.

Voici quelques exemples d'utilisation de l'option -mtime dans la commande find :

Rechercher tous les fichiers qui ont été modifiés au cours des 30 derniers jours :

$ find /path/to/search -type f -mtime -30

Rechercher tous les fichiers qui ont été modifiés il y a plus de 30 jours :

$ find /path/to/search -type f -mtime +30

Rechercher tous les fichiers qui ont été modifiés il y a exactement 30 jours :

$ find /path/to/search -type f -mtime 30

Si vous souhaitez que la commande find affiche plus d'informations sur les fichiers qu'elle trouve, comme la date de modification, vous pouvez utiliser l'option -exec et inclure une commande ls :

$ find /path/to/search -type f -mtime -30 -exec ls -l {} \;

Trier par heure

Pour trier les résultats de la recherche en fonction de l'heure de modification des fichiers, vous pouvez utiliser l'option -printf pour répertorier les heures de manière triable et diriger cette sortie vers l'utilitaire de tri.

$ find /path/to/search -printf "%T+\t%p\n" | sort

Cette commande triera les fichiers les plus anciens vers les plus récents. Si vous souhaitez que les fichiers les plus récents apparaissent en premier, passez simplement l'option -r (inverse) pour trier.

$ find /path/to/search -printf "%T+\t%p\n" | sort -r

Différence entre localiser et trouver

La commande locate sous Linux est un autre bon moyen de rechercher des fichiers sur votre système. Il n'est pas fourni avec une pléthore d'options de recherche comme la commande de recherche, donc c'est un peu moins flexible, mais c'est toujours pratique.

$ locate myfile.txt

La commande de localisation fonctionne en recherchant une base de données qui contient tous les noms des fichiers sur le système. La commande updatedb met à jour cette base de données.

Étant donné que la commande de localisation n'a pas à effectuer une recherche en direct de tous les fichiers du système, elle est beaucoup plus efficace que la commande de recherche. Mais en plus du manque d'options, il y a un autre inconvénient :la base de données des fichiers ne se met à jour qu'une fois par jour.

Vous pouvez mettre à jour cette base de données de fichiers manuellement en exécutant la commande updatedb :

$ updatedb

La commande de localisation est particulièrement utile lorsque vous devez rechercher un fichier sur tout le disque dur, car la commande de recherche prendra naturellement beaucoup plus de temps, car elle doit parcourir chaque répertoire en temps réel.

Si vous recherchez un répertoire spécifique, connu pour ne pas contenir un grand nombre de sous-répertoires, il est préférable de s'en tenir à la commande find.

Charge CPU de la commande find

Lors de la recherche dans des tas de répertoires, la commande find peut être gourmande en ressources. Cela devrait intrinsèquement permettre aux processus système plus importants d'avoir la priorité, mais si vous devez vous assurer que la commande find utilise moins de ressources sur un serveur de production, vous pouvez utiliser la commande ionice ou nice.

Surveillez l'utilisation du processeur de la commande find :

$ top

Réduisez la priorité d'entrée/sortie de la commande de recherche :

$ ionice -c3 -n7 find /path/to/search -name "myfile.txt"

Réduisez la priorité CPU de la commande find :

$ nice -n 19 find /path/to/search -name "myfile.txt"

Ou combinez les deux utilitaires pour vraiment garantir un faible niveau d'E/S et une faible priorité du processeur :

$ nice -n 19 ionice -c2 -n7 find /path/to/search -name "myfile.txt"

J'espère que vous trouverez le tutoriel utile. Continuez à revenir.


Linux
  1. 25 exemples pratiques de commande de recherche utiles sous Linux

  2. Commande JQ sous Linux avec exemples

  3. Utilisation de la commande Linux find – Utilisation avec des exemples

  4. Comment rechercher des fichiers avec la commande fd sous Linux

  5. Commande Linux rsync avec des exemples pratiques

15 Commande Linux ps avec exemples

Commande de recherche Linux avec des exemples pratiques

Commande IP Linux avec exemples

Comment rechercher des fichiers avec la commande fd sous Linux

Commande lsof sous Linux avec exemples

Commande comm Linux avec exemples