Le blog-notes de Mickaël

/var/log/mickaël

Script affichage date de création dossiers / fichiers sur système de fichiers ext4

Rédigé par Mickaël Aucun commentaire
Classé dans : Scripts Mots clés : script, date création, ext4

Un petit script qui me sert au quotidien pour afficher les dates de créations de dossiers ou fichiers sur un système de fichiers ext4.

Celui-ci affiche les dates de création par ordre croissant.

Sous GNU/Linux, il existe différents types d'horodatage :

Le mtime qui correspond à la date de modification ( avec les commandes vi, nano, echo par exemple ).

Le atime qui est la date du dernier accès ( avec les commandes cat, more, tail par exemple ).

Le ctime qui est la date de dernière modifications des métadonnées ( avec les commandes chmod, chown par exemple).

/!\ Lorsqu'un nouveau fichier ou répertoire est créé, le atime, ctime et mtime afficheront le même horodatage.

Avec le système de fichiers ext4, nous pouvons en plus via debugfs obtenir la date de création.

Ici, nous pouvons vérifier avec la commande ls les différents horodatages selon les commandes passées.

root@srvdebian:~# touch /home/mickael/fichier
root@srvdebian:~# ls -l /home/mickael/fichier
-rw-r--r-- 1 root root 0 déc.   2 20:28 /home/mickael/fichier
root@srvdebian:~# echo bonjour > /home/mickael/fichier
root@srvdebian:~# ls -l /home/mickael/fichier
-rw-r--r-- 1 root root 8 déc.   2 20:32 /home/mickael/fichier
root@srvdebian:~# cat /home/mickael/fichier
bonjour
root@srvdebian:~# ls -lu /home/mickael/fichier
-rw-r--r-- 1 root root 8 déc.   2 20:45 /home/mickael/fichier
root@srvdebian:~# chmod 777 /home/mickael/fichier
root@srvdebian:~# ls -lc /home/mickael/fichier
-rwxrwxrwx 1 root root 8 déc.   2 20:52 /home/mickael/fichier

Je peux vérifier les 3 horodatage simultanément avec la commande stat.

Je peux voir également que l'horodatage concernant la date de création du fichier est vide.

root@srvdebian:~# stat /home/mickael/fichier
  Fichier : /home/mickael/fichier
   Taille : 8             Blocs : 8          Blocs d'E/S : 4096   fichier
Périphérique : 801h/2049d    Inœud : 1048595     Liens : 1
Accès : (0777/-rwxrwxrwx)  UID : (    0/    root)   GID : (    0/    root)
 Accès : 2019-12-02 20:45:11.684130283 +0100
Modif. : 2019-12-02 20:32:20.927796279 +0100
Changt : 2019-12-02 20:52:16.732186557 +0100
  Créé : -

Pour trouver la date de création d'un dossier ou d'un fichier, 3 étapes sont nécessaires :

La première est de trouver l'inode :

L'inode correspond a un numéro qui est attribué à chaque fichier ou dossier.

L'inode contient toutes les informations sur un fichier ou un dossier donné telles l'User ID et le Group ID, le type de fichier, la taille du fichier, les droits d'accès...

Pour trouver ce numéro, 2 commande sont possibles.

root@srvdebian:~# stat -c %i /home/mickael/fichier
1048595
root@srvdebian:~# ls -i /home/mickael/fichier | awk '{print $1}'
1048595

Une fois le numéro d'inode trouvé, nous devons trouver sur quel numéro de partition est situé le fichier ou dossier.

Pour cela, 2 commandes sont possibles.

root@srvdebian:~# df /home/mickael/fichier | awk 'NR==2 {print $1}'
/dev/sda1
root@srvdebian:~# df /home/mickael/fichier | tail -1 | awk '{print $1}'
/dev/sda1

Maintenant que nous avons le numéro d'inode et le numéro de partition, nous allons pouvoir trouver la date de création.

 Pour cela, plusieurs commandes sont possibles, selon la forme d'affichage que l'on souhaite.

root@srvdebian:~# debugfs -R 'stat <1048595>' /dev/sda1 2>/dev/null |  grep 'crtime'
crtime: 0x5de565d7:ad8a2300 -- Mon Dec  2 20:28:23 2019
root@srvdebian:~# debugfs -R 'stat <1048595>' /dev/sda1 2>/dev/null |  grep 'crtime' | awk -F '--' {'print $2'} | awk {'print $1" "$3" "$2" "$5" "$4'}
Mon 2 Dec 2019 20:28:23

Petite subtilité du script :

Si vous souhaitez afficher les fichiers et dossiers, vous devrez utiliser le paramètre : for fichiers in $(ls -1rt) 

root@srvdebian:~# ./check_crtime /home/mickael/test
Voici les dates de création des fichiers et dossiers présents dans /home/mickael/test :

fichier2 : Mon 2 Dec 2019 23:29:05
fichier3 : Mon 2 Dec 2019 23:32:03
dossier1 : Mon 2 Dec 2019 23:32:20
fichier1 : Mon 2 Dec 2019 23:35:32
dossier2 : Mon 2 Dec 2019 23:55:03

Pour n'afficher que les dossiers, vous devrez utiliser le paramètre : for fichiers in $(ls -d */) 

root@srvdebian:~# ./check_crtime /home/mickael/test
Voici les dates de création des fichiers et dossiers présents dans /home/mickael/test :

dossier1 : Mon 2 Dec 2019 23:32:20
dossier2 : Mon 2 Dec 2019 23:55:03

Pour n'afficher que les fichiers, vous devrez utiliser le paramètre : for fichiers in $(find -type f | xargs ls -1rt) 

root@srvdebian:~# ./check_crtime /home/mickael/test
Voici les dates de création des fichiers et dossiers présents dans /home/mickael/test :

fichier2 : Mon 2 Dec 2019 23:29:05
fichier3 : Mon 2 Dec 2019 23:32:03
fichier1 : Mon 2 Dec 2019 23:35:32

Écrire un commentaire

Quelle est la deuxième lettre du mot giqhb ?

Fil RSS des commentaires de cet article