Chrooter apache
Matériel
Ajout disque dur
Ajout carte
Audit des disques durs
Gestion des peripheriques
Disquette d'installation
Ajout d'un scanner
Graver en ligne de commande
Astuces
Ajout d'une imprimante
Réseau
Configuration reseau
Dns
Serveur cvs
Proxy squid 
Installation serveur ftp
Installation qmail 
Installation serveur courrier sous debian
Outil TCP/IP 
Le serveur samba
Connexion a distance securisee
Client/serveur vnc
Configurer apache
Dyndns
Sécurité
Chiffrer un fichier/dossier
Securiser son poste
Mur pare feu pas a pas
Authentification ht-access
Surveillance de serveur CACTI
Snort
Snort-inline
Securiser Apache avec mod_security
Filtrage squid/squidguard/dansguardian
Auditer son site web
Sécuriser son linux
Installer un Lamp avec ssl
Contrer les scans de ports
Traitement anti-spam
Installer/Utiliser tripwire
Faire des sauvegardes incrémentales
Divers
Utilisation de lilo
Les commandes Linux
Le multi-tache
Le crontab
Exploration de la configuration
Quotas
Messagerie
Installer une application
Debugger ses applications
Le format RPM
Mise a jour du noyau
Qemu
Tour d'horizon des principaux p2p
Récupération du système
Bips d'un pc
Astuces windows
Table Ascii
Lamerland
Conversion de fichiers musicaux
Compiler ses rpms
Liens
hakin9
Secureroot.com
Hackerthreads.org
Defcon
Hackerlounge
Les derniers exploits
Tous les codes sources
Securite sous Linux
Les logiciels libres quotidiens
Ezine divers
Madchat
Textes divers
Archives
 
Traductions LG
Toutes les traductions
Traductions Phrack
Toutes les traductions

Il y a actuellement 6 visiteurs connectés sur le site !

Google
Find
Find

 

Recherche complete de fichiers
Criteres
-name, -iname
Type
-user et -group, -uid et -gid
Size
Empty
-atime, -mtime et -ctime
Newer
Perm
-links et -inum
commandes
ls
Exec
Ok
critères AND / OR / NOT

 

Recherche

La commande find permet de rechercher des fichiers au sein de l'arborescence du système de fichiers, à l'aide de critères et la possibilité d'agir sur les résultats retournés.



find repertoires critères options

La commande find étant récursive, il suffit d'indiquer un répertoire de base pour que toute l'arborescence depuis ce répertoire soit développée. L'option de base est -print (souvent implicite sur la plupart des Unix) qui permet d'afficher sur écran les résultats.
$ find . -print
.
./fic1
./fic2
./fic3
./fic4
./rep1
./liste
./mypass
./users
./liste2
./ls.txt
./toto.tar.gz
./nohup.out
./liste_ls


Le chemin précisé étant relatif, l'affichage est relatif. Si le chemin précisé était l'absolu, l'affichage aurait été absolu.

Criteres

Les options permettent de définir les critères de recherche. Elles peuvent être combinées et groupées entre elles, sous forme et ET et de OU logiques.

-name, -iname

L'option -name permet une sélection par noms de fichiers. Il est possible d'utiliser les critères de recherches (caractères spéciaux) déjà vus. Le critère est idéalement placé en guillemets. Avec -iname, on n'effectue pas de différences entre les minuscules et les majuscules.

$ find . name "fic*" -print
./fic1
./fic2
./fic3
./fic4

Nettoyage de fichiers temporaires avec -name
On peut utiliser find pour nettoyer des répertoires et des sous-répertoires des fichiers temporaires générés par une utilisation normale, et de ce fait économiser de la place. Pour cette opération, utilisez la commande suivante:

$ find . \( -name a.out -o -name '*.o' -o -name 'core' \) -exec rm {} \;

Le masque de fichier identifiant le type de fichier à supprimer est placé entre parenthèses; chaque masque de fichier est précédé par -name. Cette liste peut être étendue pour inclure n'importe quel fichier temporaire devant être nettoyé. Pendant la compilation et l'articulation du code, les programmeurs et leurs outils génèrent des types de fichier comme dans cet exemple: a.out, *.o, et core. D'autres utilisateurs ont des fichiers temporaires générés diffèremment et peuvent adapter leur commande, en usant des masques de fichier tels que *.tmp, *.junk, et ainsi de suite. Il peut aussi être utile de placer la commande dans un script appelé clean, que l'on peut exécuter au besoin.

-Type

L'option -type permet une sélection par type de fichier. Nous avons vu au début du cours qu'outre les exécutables, liens, répertoires et fichiers simples étaient présent d'autres types de fichiers.
Code fichier Type de fichier
bFichier spécial en mode bloc
c Fichier spécial en mode caractère
dR épertoire (directory)
f fichier normal
l lien symbolique
p tube nommé (pipe)
s Socket (sur certains Unix)


$ find . -name "re*" -type d -print ./rep1 ./rep2

-user et -group, -uid et -gid

Les options -user et -group permettent une recherche sur le propriétaire et le groupe d'appartenance des fichiers. Il est possible de préciser le nom (utilisateur, groupe) ou l'ID (UID, GID). On peut aussi préciser -uid et -gid avec les numéros UID et GID.

$ find . -type f -user oracle -group dba -print
./fic1
./fic3

-Size

L'option -size permet de préciser la taille des fichiers recherchés.
* -size 5 : recherche les fichiers d'une taille de 5 blocs (512 octets par bloc, soit ici 2560 octets)
* -size 152c : recherche les fichiers d'une taille de 152 caractères (octets)
* -size 10k : recherche les fichiers d'une taille de 10ko (10*1024 octets = 10240 octets)
* -size +/- valeur[c/k] : si ? alors recherche des fichiers ayant une taille inférieure à celle indiquée, si + alors recherche des fichiers ayant une taille supérieure à celle indiquée.

$ find /tmp -type f -size +100k -print
/tmp/quota.user
/tmp/seb/ls.txt
/tmp/seb/liste_ls
/tmp/messages
/tmp/oracledml_715.log
/tmp/oracledml_716.log
/tmp/dml2_ae_ajout_RM_FS_AS_BM_MSE_Juillet2002.lst
/tmp/oracledml_714.log
/tmp/dml4_ae_compta_RM_FS_AS_BM_MSE_Juillet2002.lst
/tmp/Corrections_avant_valo_juillet_2002.lst
/tmp/DML_40.lst

Empty

L'option -empty recherche des fichiers ou répertoires vides, c'est à dire de taille nulle.

Liste les fichiers de longueur nulle grace à la commande

$ find . -empty -exec ls {} \;
Après avoir trouvé des fichiers vides, vous pourriez souhaiter les supprimer en remplacant la commande ls par rm.

-atime, -mtime et -ctime

* -atime : recherche sur la date du dernier accès (access time)
* -mtime : recherche sur la date de dernière modification (modification time)
* -ctime : recherche sur la dare de création (creation time, en fait la date de dernière modification du numéro d'inode)

Ces trois options ne travaillent qu'avec des jours (périodes de 24 heures). 0 est le jour même, 1 24 heures, 2 48 heures, ...
Les signes + ou ? permettent de préciser les termes « de plus » et « de moins » :

* -mtime 1 : fichiers modifiés hier (entre 24 et 48 heures)
* -mtime -3 : fichiers modifiés il y a moins de trois jours (72 heures)
* -atime +4 : fichiers modifiés il y a plus de 4 jours (plus de 96 heures)
$ find /tmp -type f -size +100k -ctime +5 -print
/tmp/quota.user
/tmp/oracledml_714.log
/tmp/Corrections_avant_valo_juillet_2002.lst

-newer

L'option -newer permet de rechercher des fichiers plus récemment modifiés que celui indiqué. Par exemple rechercher un fichier plus récent que toto.txt :
$ find . -newer toto.txt -print

-perm

L'option -perm permet d'effectuer des recherches sur les autorisations d'accès (droits, SUID, SGID, Sticky). Les droits doivent être précisés en base 8 (valeur octale) et complets. Le caractère « - » placé devant la valeur octale signifie que les fichiers recherchés doivent au moins avoir les droits désirés. Ex pour rw-rw-rw- (666).
$ find /tmp -perm 666 -print
-rw-rw-rw- 1 root system 9650 Aug 14 11:15 /tmp/LOG/load_logi.log

-links et -inum

L'option -links permet une recherche par nombre de hard links. On peut aussi préciser les signes + ou ? (plus de n liens et moins de n liens). Un fichier normal seul possède 1 lien. Un répertoire 2 liens (L'entrée dans le catalogue dont il fait partie et dans .). Pour une recherche de liens symboliques il faudra utiliser l'option -type l.

$ find . -type f -links +2 -print
./fic2
./hardlink3_fic2
./hardlink_fic2
./hardlink2_fic2

L'option -inum permet une recherche par numéro d'inode. Elle est utile dans le cas d'une recherche de tous les liens portant un même numéro d'inode. Le numéro d'inode est visible par l'option -i de la commande ls.

$ ls -i
95 fic1 643 hardlink_fic2 36 liste_ls 205 seb1
643 fic2 219 lien2_symbol_fic1 705 ls.txt 284 seb2
707 fic3 95 lien_fic1 237 mypass 110 toto.tar.gz
546 fic4 14 lien_symbol_fic1 886 nohup.out 212 users
643 hardlink2_fic2 266 liste 916 rep1
643 hardlink3_fic2 1006 liste2 881 rep2

$ find . -inum 95 -print
./fic1
./lien_fic1

Commandes

Outre l'option -print on trouve deux autres options permettant d'effectuer une action sur les fichiers trouvés. Pour l'option -printf permettant un format précis de la sortie, on se reportera au man pages.

Copie du contenu d'un répertoire
La commande find vous permet de copier le contenu entier d'un répertoire tout en préservant les permissions, les propriétaires de chaque fichier et sous-répertoire. Il suffit de combiner find avec la commande cpio comme cecis:
$ cd /path/to/source/dir

$ find . | cpio -pdumv /path/to/destination/dir

La commande cpio est une commande servant à copier des fichiers à l'intèrieur ou en dehors d'une archive cpio ou tar, en préservant automatiquement les permissions et les propriétaires de chaque fichier et sous-répertoire

Ls

L'option -ls affiche des informations détaillées sur les fichiers trouvés correspondant au critère au lieu du simple nom de fichier.
$ find . -inum 95 -ls -print
95 0 -rwxr-xr-x 2 oracle dba 0 Aug 12 11:05 ./fic1 ./fic1
95 0 -rwxr-xr-x 2 oracle dba 0 Aug 12 11:05 ./lien_fic1 ./lien_fic1

Exec

L 'option -exec va exécuter la commande située juste après pour chaque occurrence trouvée. Quelques remarques :

1. -exec doit obligatoirement être la dernière option de la commande find.
2. La commande exécutée par -exec doit se terminer par un « ; ». Ce caractère spécial doit s'écrire \; pour ne pas être interprété par le shell.
3. Pour passer comme paramètre à la commande le fichier trouvé par find, il faut écrire {} (substitution du fichier).
Exemple pour effacer tous les liens symboliques du répertoire courant (avec le détail des fichiers supprimés) :

$ find . -type l -ls -exec rm -f {} \;
14 0 lrwxrwxrwx 1 oracle system 4 Aug 14 14:48 ./lien_symbol_fic1 -> fic1
219 0 lrwxrwxrwx 1 oracle system 4 Aug 14 14:48 ./lien2_symbol_fic1 -> fic1


find . -name *.gif -exec ls {} \;

Le paramètre -exec a un réel pouvoir. Quand un fichier est trouvé qui correspond aux critères de recherche, le paramètre -exec définit ce qu'il faut faire de ce fichier. Par exemple:

1. Recherche depuis le répertoire courant et en dessous, en utilisant le point (.) juste après find.
2. Repère tous les fichiers dont le nom finit par .gif (images).
3. Liste tous les fichiers trouvés, grâce a la commande ls.

Contenir des fichiers LOG et TMP
Pour contenir des fichiers LOG et TMP file en cas d'applications générant beaucoup de ce genre de fichiers, on peut placer les commandes suivants dans une tache cron à lancer quotidiennement:

$ find $LOGDIR -type d -mtime +0 -exec compress -r {} \;

$ find $LOGDIR -type d -mtime +5 -exec rm -f {} \;

La première commande s'exécute dans tous les répertoires (-type d) trouvés dans la variable $LOGDIR dans laquelle les données d'un fichier ont été modifiées depuis les dernières 24 (-mtime +0) et les compresse (compress -r {}) pour économiser de l'espace disque. La seconde commande efface les fichiers (rm -f {}) s'ils sont plus anciens qu'une semaine de travail (-mtime +5), pour augmenter l'espace disque.

Ok

L'option -ok est identique à l'option -exec sauf que pour chaque occurrence, une confirmation est demandée à l'utilisateur.
$ find . -inum 95 -ok rm -f {} \;
rm ... ./fic1 > (yes)? n
rm ... ./lien_fic1 > (yes)? y

critères AND / OR / NOT

Il est possible de combiner les options de critère de sélection. Sans aucune précision c'est le ET logique qui est implicite.
Critère Action
-a AND, ET logique
-o OR, OU logique
! NOT, NON logique
(...) groupement des combinaisons. Les parenthèses doivent être vérouillées \(...\).


Exemple avec tous les fichiers ne contenant pas fic dans leur nom, et tous les fichiers n'étant ni normaux ni des répertoires.

$ find . ! -name "*fic*" -print
.
./rep1
./liste
./mypass
./users
./liste2
./ls.txt
./toto.tar.gz
./nohup.out
./liste_ls
./rep2
./seb1
./seb2
$ find . ! \( -type f -o type d \) -ls
409 0 lrwxrwxrwx 1 oracle system 4 Aug 14 15:21 ./lien_fic1 -> fic1
634 0 lrwxrwxrwx 1 oracle system 4 Aug 14 15:21 ./lien_fic2 -> fic2

Sources de l'article


 

Forum
Forum d'entraide
Blog
Le blog
News
Les news du site
Php/Mysql
Formulaire en php
Administrer un serveur Mysql
Session en php
Gerer ses bases mysql
Les bases php
Securiser ses scripts PHP
Controler ses programmes avec RATS
Convertir une base sql en utf8
Astuces php
Programmation
Python rapide
Tutorial Python
Tutorial Perl
Tutorial Perl complet
Tutoriel ruby
Tutoriel C
Introduction à gawk
Filtres et utilitaires
Find
Programmation Shell
Ecriture de scripts bash
Expressions regulieres
Vi
Introduction a Javascript
Compiler avec gcc
Astuces en Bash
Cracking
Tutoriel Assembleur
Guide du cracking pour débutant
Assembleur
Manual Unpacking
Techniques de Protection
Différentes failles Web
Arp spoofing dans un réseau switché
Les intrusions
Les attaques externes
Defacage
Defacage complet
Buffer overflow
Netcat
Injection sql
Injection sql(suite)
John the Ripper
Spoofer un email
Utiliser google
La faille system
Usurper une identité
Le rooting
Shellcode sous Unix
La faille race condition
La faille xss
La faille xss (2)
Attaques sur un routeur
P2P
Azureus pas-a-pas
News
Lire les news de Linux-pour-lesnuls.com au format RSS
Distros
Gestion des paquets debian
101 commandes debian
Graphisme
Effet neon dans GIMP
Effet vapeur dans GIMP
Cours fonctionnalités de GIMP
Humour
Ensemble
Divers