GNU/Linux >> Tutoriels Linux >  >> Linux

Papa, je l'ai trouvé !, 15 exemples de commandes de recherche Linux impressionnants (Part2)

Il y a quelque temps, nous avons passé en revue 15 exemples pratiques de commande de recherche (Partie I). La commande Rechercher peut faire bien plus que simplement rechercher des fichiers en fonction de leur nom.
 
Dans cet article (Partie 2), discutons de 15 exemples avancés de commande de recherche y compris — rechercher des fichiers en fonction de l'heure à laquelle ils sont consultés, modifiés ou modifiés, rechercher des fichiers de manière comparative, effectuer des opérations sur des fichiers trouvés, etc.,
 
Ramesh Natarajan : C'est ma douce petite fille sur cette photo. Elle était très heureuse d'apercevoir l'otarie dans l'aquarium de Californie à Long Beach.

Rechercher des fichiers en fonction de l'accès/de la modification/de l'heure de changement

Vous pouvez rechercher des fichiers en fonction des trois attributs de temps de fichier suivants.

  1. Heure d'accès du dossier. Le temps d'accès est mis à jour lors de l'accès au fichier .
  2. Heure de modification du dossier. L'heure de modification est mise à jour lorsque le contenu du fichier est modifié .
  3. Modifier l'heure du dossier. L'heure de changement est mise à jour lorsque les données d'inode changent .

 
Dans les exemples suivants, la différence entre l'option min et l'option heure est l'argument.

  • min argument traite son argument comme minutes . Par exemple, min 60 =60 minutes (1 heure).
  • argument temporel traite son argument comme 24 heures . Par exemple, temps 2 =2*24 heures (2 jours).
  • Lors du calcul de 24 heures, les parties fractionnaires sont ignorées. Ainsi, 25 heures sont prises pour 24 heures, et 47 heures sont également prises pour 24 heures, seules 48 heures sont prises pour 48 heures. Pour obtenir plus de clarté, reportez-vous à la section -atime de la commande find page de manuel.

Exemple 1 :Rechercher des fichiers dont le contenu a été mis à jour au cours de la dernière heure

Pour rechercher les fichiers en fonction de l'heure de modification du contenu, l'option -mmin et -mtime est utilisée. Voici la définition de mmin et mtime de la page de manuel.

  • -mmin n Les données du fichier ont été modifiées pour la dernière fois n minutes il y a.
  • -mtime n Les données du fichier ont été modifiées pour la dernière fois n*24 heures il y a.

 
L'exemple suivant trouvera les fichiers dans le répertoire et les sous-répertoires actuels, dont le contenu a été mis à jour au cours de la dernière heure (60 minutes)

# find . -mmin -60

 
De la même manière, l'exemple suivant trouve tous les fichiers (sous le système de fichiers racine /) qui ont été mis à jour au cours des dernières 24 heures (1 jour).

# find / -mtime -1

Exemple 2 :Rechercher des fichiers consultés avant 1 heure

Pour rechercher les fichiers en fonction de l'heure d'accès au fichier, l'option -amin et -atime est utilisée. Voici la définition de amin et atime de la page de manuel find.

  • -amin n Le fichier a été consulté pour la dernière fois n minutes il y a
  • -atime n Le fichier a été consulté pour la dernière fois n*24 heures il y a

 
L'exemple suivant trouvera les fichiers dans le répertoire et les sous-répertoires actuels, qui ont été consultés au cours de la dernière heure (60 minutes)

# find -amin -60

 
De la même manière, l'exemple suivant trouve tous les fichiers (sous le système de fichiers racine /) qui ont été consultés au cours des dernières 24 heures (1 jour).

# find / -atime -1

Exemple 3 :Rechercher des fichiers qui ont été modifiés exactement avant 1 heure

Pour rechercher les fichiers en fonction de l'heure de changement d'inode du fichier, l'option -cmin et -ctime est utilisée. Voici la définition de cmin et ctime de la page de manuel find.

  • -cmin n L'état du fichier a été modifié pour la dernière fois n minutes il y a.
  • -ctime n L'état du fichier a été modifié pour la dernière fois n*24 heures il y a.

 
L'exemple suivant trouvera les fichiers dans le répertoire et les sous-répertoires actuels, qui ont changé au cours de la dernière heure (60 minutes)

# find . -cmin -60

 
De la même manière, l'exemple suivant trouve tous les fichiers (sous le système de fichiers racine /) qui ont été modifiés au cours des dernières 24 heures (1 jour).

# find / -ctime -1

Exemple 4 :Restreindre la sortie de la recherche uniquement aux fichiers. (Afficher uniquement les fichiers en tant que résultats de la commande de recherche)

La commande de recherche ci-dessus affichera également les répertoires, car les répertoires sont accessibles lorsque le fichier qu'ils contiennent est accessible. Mais si vous voulez que seuls les fichiers soient affichés, donnez -type f dans la commande find comme
 
La commande de recherche suivante affiche les fichiers consultés au cours des 30 dernières minutes.

# find /etc/sysconfig -amin -30
.
./console
./network-scripts
./i18n
./rhn
./rhn/clientCaps.d
./networking
./networking/profiles
./networking/profiles/default
./networking/profiles/default/resolv.conf
./networking/profiles/default/hosts
./networking/devices
./apm-scripts
[Note: The above output contains both files and directories]

# find /etc/sysconfig -amin -30 -type f
./i18n
./networking/profiles/default/resolv.conf
./networking/profiles/default/hosts
[Note: The above output contains only files]

Exemple 5 :Restreindre la recherche uniquement aux fichiers non masqués. (Ne pas afficher les fichiers cachés dans la sortie de recherche)

Lorsque nous ne voulons pas que les fichiers cachés soient répertoriés dans la sortie de la recherche, nous pouvons utiliser l'expression régulière suivante.
La recherche ci-dessous affiche les fichiers qui ont été modifiés au cours des 15 dernières minutes. Et il répertorie uniquement les fichiers non masqués. c'est-à-dire les fichiers cachés qui commencent par un . (point) ne sont pas affichés dans la sortie de recherche.

# find . -mmin -15 \( ! -regex ".*/\..*" \)

Rechercher des fichiers de manière comparative à l'aide de la commande Rechercher

L'esprit humain peut mieux se souvenir des choses par référence, par exemple, je veux trouver des fichiers que j'ai modifiés après avoir modifié le fichier "test". Vous pouvez trouver des fichiers en vous référant à la modification des autres fichiers comme suit.

Exemple 6 :Rechercher des fichiers modifiés après la modification d'un FICHIER particulier

Syntax: find -newer FILE

 
L'exemple suivant affiche tous les fichiers modifiés après la modification des fichiers /etc/passwd. Ceci est utile si vous souhaitez suivre toutes les activités que vous avez effectuées après avoir ajouté un nouvel utilisateur.

# find -newer /etc/passwd

Exemple 7 :Rechercher des fichiers auxquels on accède après la modification d'un FICHIER spécifique

Syntax: find -anewer FILE

 
L'exemple suivant affiche tous les fichiers auxquels on accède après avoir modifié /etc/hosts. Si vous vous souvenez d'avoir ajouté une entrée à /etc/hosts et que vous souhaitez voir tous les fichiers auxquels vous avez accédé depuis, utilisez la commande suivante.

# find -anewer /etc/hosts

Exemple 8 :Rechercher des fichiers dont le statut a été modifié après la modification d'un FICHIER spécifique.

Syntax: find -cnewer FILE

 
L'exemple suivant affiche tous les fichiers dont l'état a été modifié après la modification de /etc/fstab. Si vous vous souvenez de l'ajout d'un point de montage dans le /etc/fstab et souhaitez connaître tous les fichiers dont le statut a été modifié depuis, utilisez la commande suivante.

find -cnewer /etc/fstab

Effectuer n'importe quelle opération sur les fichiers trouvés à partir de la commande Rechercher

Nous avons examiné de nombreuses façons différentes de rechercher des fichiers à l'aide de la commande de recherche dans cet article et aussi dans notre article précédent. Si vous n'êtes pas familier avec la recherche de fichiers de différentes manières, je vous recommande fortement de lire la partie 1.
 
Cette section explique comment effectuer différentes opérations sur les fichiers à partir de la commande find. c'est-à-dire comment manipuler les fichiers renvoyés par la sortie de la commande find.
 
Nous pouvons spécifier n'importe quelle opération sur les fichiers trouvés à partir de la commande find.

find <CONDITION to Find files> -exec <OPERATION> \;

 
L'OPÉRATION peut être quelque chose comme :

  • commande rm pour supprimer les fichiers trouvés par la commande find.
  • commande mv pour renommer les fichiers trouvés.
  • commande ls -l pour obtenir des détails sur les fichiers de sortie de la commande find.
  • md5sum sur rechercher les fichiers de sortie de la commande
  • commande wc pour compter le nombre total de mots dans les fichiers de sortie de la commande find.
  • Exécuter n'importe quelle commande shell Unix sur rechercher les fichiers de sortie de la commande.
  • ou Exécutez votre propre script shell personnalisé / commande pour trouver les fichiers de sortie de la commande.

Exemple 9 :ls -l dans la sortie de la commande find. Liste longue les fichiers qui ont été modifiés au cours de la dernière heure.

# find -mmin -60
./cron
./secure

# find -mmin -60 -exec ls -l {} \;
-rw-------  1 root root 1028 Jun 21 15:01 ./cron
-rw-------  1 root root 831752 Jun 21 15:42 ./secure

Exemple 10 :Recherche uniquement dans le système de fichiers actuel

Les administrateurs système voudraient chercher dans le système de fichiers racine, mais pas dans les autres partitions montées. Lorsque plusieurs partitions sont montées et que vous souhaitez effectuer une recherche dans /. Vous pouvez faire ce qui suit.
 
La commande suivante recherchera les fichiers *.log à partir de /. c'est-à-dire que si vous avez plusieurs partitions montées sous / (racine), la commande suivante recherchera toutes ces partitions montées.

# find / -name "*.log"

 
Cela recherchera le fichier uniquement dans le système de fichiers actuel. Voici la définition xdev de la page de manuel find :

  • -xdev Ne descendez pas les répertoires sur d'autres systèmes de fichiers.

 
La commande suivante recherchera les fichiers *.log à partir de / (racine) et uniquement dans le système de fichiers actuel. c'est-à-dire que si vous avez plusieurs partitions montées sous / (racine), la commande suivante ne recherchera PAS toutes ces partitions montées.

# find / -xdev -name "*.log"

Exemple 11 :Utilisation de plusieurs { } dans la même commande

Le manuel indique qu'une seule instance de {} est possible. Mais vous pouvez utiliser plusieurs {} dans la même commande, comme indiqué ci-dessous.

# find -name "*.txt" cp {} {}.bkup \;

 
Utiliser ce {} dans la même commande est possible mais l'utiliser dans une commande différente n'est pas possible, disons que vous voulez renommer les fichiers comme suit, ce qui ne donnera pas le résultat attendu.

find -name "*.txt" -exec mv {} `basename {} .htm`.html \;

Exemple 12 :Utilisation de { } dans plusieurs instances.

Vous pouvez le simuler en écrivant un script shell comme indiqué ci-dessous.

# mv "$1" "`basename "$1" .htm`.html"

 
Ces guillemets sont destinés à gérer les espaces dans le nom du fichier. Et puis appelez ce script shell à partir de la commande find comme indiqué ci-dessous.

find -name "*.html" -exec ./mv.sh '{}' \;

Donc, pour une raison quelconque, si vous souhaitez que le même nom de fichier soit utilisé plusieurs fois, écrire le script shell simple et transmettre les noms de fichiers en tant qu'arguments est le moyen le plus simple de le faire.

Exemple 13 :Redirection des erreurs vers /dev/null

Rediriger les erreurs n'est pas une bonne pratique. Un utilisateur expérimenté comprend l'importance d'imprimer l'erreur sur le terminal et de la corriger.
 
Particulièrement dans la commande find, la redirection des erreurs n'est pas une bonne pratique. Mais si vous ne voulez pas voir les erreurs et que vous souhaitez les rediriger vers null, procédez comme indiqué ci-dessous.

find -name "*.txt" 2>>/dev/null

 
Parfois, cela peut être utile. Par exemple, si vous essayez de trouver tous les fichiers *.conf sous / (racine) à partir de votre compte, vous pouvez recevoir de nombreux messages d'erreur "Autorisation refusée", comme indiqué ci-dessous.

$ find / -name "*.conf"
/sbin/generate-modprobe.conf
find: /tmp/orbit-root: Permission denied
find: /tmp/ssh-gccBMp5019: Permission denied
find: /tmp/keyring-5iqiGo: Permission denied
find: /var/log/httpd: Permission denied
find: /var/log/ppp: Permission denied
/boot/grub/grub.conf
find: /var/log/audit: Permission denied
find: /var/log/squid: Permission denied
find: /var/log/samba: Permission denied
find: /var/cache/alchemist/printconf.rpm/wm: Permission denied
[Note: There are two valid *.conf files burned in the "Permission denied" messages]

 
Donc, si vous souhaitez simplement afficher la sortie réelle de la commande de recherche et non le message d'erreur "Autorisation refusée", vous pouvez rediriger le message d'erreur vers /dev/null comme indiqué ci-dessous.

$ find / -name "*.conf" 2>>/dev/null
/sbin/generate-modprobe.conf
/boot/grub/grub.conf
[Note: All the "Permission denied" messages are not displayed]

Exemple 14 :remplacer l'espace par un trait de soulignement dans le nom du fichier.

Les fichiers audio que vous téléchargez sur Internet sont généralement accompagnés d'espaces. Mais avoir de l'espace dans le nom du fichier n'est pas si bon pour les systèmes de type Linux. Vous pouvez utiliser la combinaison de commandes rechercher et renommer comme indiqué ci-dessous pour renommer les fichiers, en remplaçant l'espace par un trait de soulignement.
 
Ce qui suit remplace l'espace dans tous les fichiers *.mp3 par _

$ find . -type f -iname “*.mp3″ -exec rename “s/ /_/g” {} \;

Exemple 15 :Exécuter deux commandes de recherche en même temps

Comme indiqué dans les exemples de la commande find dans sa page de manuel, voici la syntaxe qui peut être utilisée pour exécuter deux commandes en une seule traversée.
 
L'exemple de commande find suivant traverse le système de fichiers une seule fois, répertoriant les fichiers et répertoires setuid dans /root/suid.txt et les fichiers volumineux dans /root/big.txt.

# find /    \( -perm -4000 -fprintf /root/suid.txt '%#m %u %p\n' \) , \
 \( -size +100M -fprintf /root/big.txt '%-10s %p\n' \)

Nos autres 15 articles de la série d'exemples

  • 15 exemples pratiques de commande de recherche Unix – Partie 1
  • 15 exemples pratiques de commandes Linux Grep
  • Maîtriser l'historique de la ligne de commande Unix avec 15 exemples
  • Manipuler des fichiers audio à l'aide de 15 exemples de commandes Awesome Sox (Sound eXchange)
  • 15 exemples de commandes PostgreSQL avancées
  • 15 excellents hacks, trucs et astuces pour la recherche Google
  • 15 exemples avancés de DBA PostgreSQL
  • 15 utilisations pratiques des exemples de commandes Mysqladmin
  • 15 exemples de tâches Cron Linux impressionnants

 
Si vous devez revenir, mettez cette page en signet sur del.icio.us pour une référence pratique.


Linux
  1. 5 outils de ligne de commande pour trouver rapidement des fichiers sous Linux

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

  3. 25 exemples simples de la commande Linux find

  4. trouver des exemples de commandes sous Linux

  5. diff Exemples de commandes sous Linux

Commande lsof sous Linux (10 exemples)

Comment rechercher des fichiers avec la commande fd sous Linux

Tutoriel sur la commande de recherche Linux (avec exemples)

Maman, j'ai trouvé ! - 15 exemples pratiques de commande de recherche Linux

Commande lsof sous Linux avec exemples

Commande comm Linux avec exemples