Cet article présentera deux outils utiles pour rechercher des fichiers dans le système de fichiers Linux. Le premier est le find
commande, qui peut être trouvée dans n'importe quelle distribution Linux, et la seconde est locate
, qui nécessite une installation.
Rechercher la commande
La commande find fait partie de Linux par défaut. Il propose de multiples paramètres pour affiner votre recherche.
Rechercher par nom
La commande de recherche la plus simple consiste à rechercher par le nom de l'endroit où vous vous trouvez :
$ find -name "FILE_NAME"
Vous pouvez spécifier le répertoire dans lequel vous souhaitez rechercher le fichier :
$ find /home -name my_file.txt
$ find / -name my_other_file.txt
Tenez compte du fait que cette commande est sensible à la casse. Si vous voulez ignorer la casse, utilisez :
$ find -iname "FILE_NAME"
Recherche inversée
Si vous souhaitez rechercher des fichiers qui ne respectent pas le modèle spécifié, vous pouvez annuler les paramètres de recherche en utilisant le -not
paramètre ou \!
. Par exemple :
$ find -not -name "FILE_NAME_TO_AVOID"
or
$ find \! -name "FILE_NAME_TO_AVOID"
Rechercher par type de fichier
Le file
La commande vous permet également de rechercher des types de fichiers. Certains descripteurs de types de fichiers courants sont :
f
:fichier normald
:répertoirel
:lien symbolec
:périphériques de caractèresb
:bloquer les appareils
Le type de fichier souhaité va après le -type
attribut.
Par exemple, pour trouver tous les fichiers JSON sous le etc
répertoire :
$ find /etc -type f -name "*.json"
Rechercher par taille de fichier
Il existe également un paramètre permettant de filtrer le résultat de la recherche en fonction de la taille des fichiers :-size
.
Pour les unités de taille, vous pouvez utiliser les suffixes suivants :
c
:octetsk
:kilo-octetsM
:mégaoctetsG
:gigaoctetsb
:blocs de 512 octets
Et pour préciser si vous parlez d'une taille exacte, inférieure ou supérieure à utilisez les préfixes suivants :
- Recherche exacte :pas de préfixe
- Moins de :
-
préfixe - Supérieur à :
+
préfixe
Par exemple, pour trouver les fichiers de 3 gigaoctets sous le répertoire personnel :
$ find /home -size 3G
Pour tous les fichiers de moins de 3 gigaoctets :
$ find /home -size -3G
Fichiers de plus de 3 gigaoctets :
$ find /home -size +3G
Recherche par heure
Vous pouvez également rechercher des fichiers en fonction de leur dernier accès, modification ou changement.
- Heure d'accès :
-atime
pour la dernière fois que le fichier a été lu. - Heure de modification :
-mtime
pour la dernière fois que le contenu du fichier a été modifié. - Modifier l'heure :
-ctime
pour la dernière fois où les métadonnées d'inode du fichier ont été modifiées.
Il est également possible de comparer à un fichier de référence pour renvoyer les plus récents :
$ find / -newer file_name
Pour les heures, les paramètres spécifiés sont en jours . Les mêmes préfixes qu'en recherche par taille peuvent être utilisés :
$ find /home -mtime 3
$ find /home -atime -2
$ find /home -ctime +5
Pour rechercher des fichiers en utilisant le temps en minutes, vous pouvez utiliser :
$ find /home -mmin 3
Rechercher par propriétaire et autorisations
Il y a aussi des paramètres pour trouver des fichiers selon leurs propriétaires (-user
et -group
) et leurs autorisations (-perm
):
$ find /home -user my_user
$ find /home -group my_group
$ find /home -perm 777
Définir la profondeur de recherche
Lors d'une recherche dans un répertoire, le find
renverra tous les fichiers de ce répertoire, même s'ils se trouvent dans d'autres sous-répertoires. Pour contrôler cette profondeur, vous pouvez définir une profondeur maximale, une profondeur minimale ou les deux.
Par exemple, pour rechercher uniquement dans le répertoire supérieur et un niveau de sous-répertoires, vous pouvez définir le -maxdepth
paramètre à 2 :
$ find -maxdepth 2 -name my_file
Pour définir la profondeur minimale où find
devriez rechercher vous utilisez le -mindepth
paramètre :
$ find -mindepth 5 -name my_file
Ces paramètres peuvent être combinés :
$ find -mindepth 4 -maxdepth 7 -name my_file
Exécuter des commandes sur les résultats
Comme vu dans les commandes de profondeur, tous les find
les paramètres peuvent être combinés pour obtenir des résultats très spécifiques. Lorsque vous obtenez les résultats souhaités, il est possible d'exécuter des commandes dessus en utilisant le -exec
paramètre.
Lorsque vous combinez des paramètres de recherche, vous pouvez également utiliser le -and
et -or
options pour personnaliser vos critères de recherche. Quand aucun d'entre eux n'est utilisé, le -and
est la valeur par défaut.
Par exemple, pour modifier les autorisations sur tous les fichiers sous /my_dir
répertoire qui ont actuellement 777 autorisations sur 664, utilisez ce qui suit :
$ cd /my_dir
$ find . -type f -perm 777 -exec chmod 664 {} \;
Outil de localisation
Le locate
la commande est une alternative à find
. La différence est qu'il utilise une base de données des fichiers du système de fichiers afin qu'il puisse fonctionner plus rapidement. Pour installer le locate
outil que vous pouvez utiliser :
- Pour les distributions Ubuntu/Debian :
$ sudo apt install mlocate`
- Pour les distributions CentOS/RHEL :
$ sudo yum install mlocate`
Locate utilise une tâche cron pour mettre à jour la base de données quotidiennement, mais elle peut être mise à jour manuellement en utilisant :
$ sudo updatedb
Pour rechercher le "basename", à savoir que la requête est contenue uniquement dans le nom du fichier et non dans le chemin du fichier, utilisez le -b
drapeau :
$ locate -b name
Pour trouver des fichiers qui existent encore (après le dernier updatedb
appel) utilisez le -e
drapeau :
$ locate -e name
Pour les statistiques de la base de données générée, utilisez :
$ locate -S
Conclusion
La recherche de fichiers dans la ligne de commande Linux peut être difficile. Les outils présentés dans cet article permettent de gérer et de rechercher facilement des fichiers. En comprenant les différents paramètres, la recherche peut être aussi précise que l'on le souhaite.
Utilisez l'onglet Commentaires pour faire des commentaires ou poser des questions. Vous pouvez également démarrer une conversation avec nous.