Come visualizzare la data di creazione, ultima modifica e accesso ai files in Linux utilizzando i comandi debugfs e stat
In Linux tutte le informazioni relative ad un file (i metadati, la data di creazione, ultima modifica....) sono salvate in un "inode", abbreviazione di "index node", ed ogni file è identificato da un "numero di inode".
Quando creo un file o una directory e viene creato un inode identificato da un numero univoco, ad esempio 1441809: un "inode" è un record nella tabella di un hard disk, che contiene varie informazioni su uno specifico file o directory o qualunque altro oggetto del filesystem. Tra queste informazioni abbiamo la dimensioni del file (o della directory), il suo proprietario e gruppo di appartenenza, la data di ultima modifica ed accesso, i permessi, ....
Per saperne di più sugli inode leggi questo articolo.
Vediamo assieme come visualizzare le seguenti informazioni relative ad un file:
- ctime (change time): identifica la data di ultima modifica del file, sia che si tratti del suo contenuto che dei suoi attributi (ad esempio i permessi)
- atime (access time): identifica la data di ultimo accesso al file
- mtime (modification time): identifica la data di ultima modifica del solo contenuto del file (SOLO del suo contenuto, non dei suoi attributi)
- crtime (creation time): identifica la data di creazione del file
Per ottenere queste quattro informazioni abbiamo bisogno di alcune informazioni preliminari
1: indentifichiamo il numero di inode del file
Innanzitutto, individuiamo utilizzando il comando "ls" il numero di inode del file/directory che ci interessa analizzare, ad esempio un file chiamato "index.php" presente nella directory "/var/www/html" del nostro server
# ls -i /var/www/html/index.php
72802306 /var/www/html/index.php
72802306 è il numero di inode che stavamo cercando. Prendi nota di questo numero.
Alternativamente avremmo potuto usare il comando "stat"
# stat /var/www/html/index.php
File: `/var/www/html/index.php'
Size: 2 Blocks: 8 IO Block: 4096 regular file
Device: 811h/2065d Inode: 72802306 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2018-04-29 01:01:08.000000000 +0200
Modify: 2014-12-16 18:39:30.000000000 +0100
Change: 2014-12-16 18:39:48.000000000 +0100
2 - individuiamo il device in cui risiede il nostro file
Oltre al numero di inode dobbiamo sapere qual'è il device dove risiede in nostro file nel filesystem.
Utilizziamo il comando "df" in questo modo, e, ad esempio nel nostro sistema linux, otteniamo questa informazione
# df -h
/dev/sda1 190G 25G 155G 14% /
tmpfs 63G 0 63G 0% /dev/shm
/dev/sdb1 2.3T 24G 2.1T 2% /myfolder
Il nostro file è localizzato in /dev/sdb1
3 - visualizziamo le informazioni sul file
Con le informazioni ottenute al punto 1 e 2 possiamo finalmente visualizzare il ctime atime mtime e crtime utilizzando il comando "debugfs" in questo modo
# debugfs -R 'stat <inode_number>' /dev/sdb1
Al posto di "inode_number" mettiamo il numero inode del nostro file
# debugfs -R 'stat <72802306>' /dev/sdb1
Attendiamo qualche istante per l'elaborazione ed otteniamo
debugfs 1.41.12 (17-May-2010)
Inode: 72802306 Type: regular Mode: 0644 Flags: 0x0
Generation: 4054373466 Version: 0x00000000
User: 0 Group: 0 Size: 2
File ACL: 0 Directory ACL: 0
Links: 1 Blockcount: 8
Fragment: Address: 0 Number: 0 Size: 0
ctime: 0x54906e64 -- Tue Dec 16 18:39:48 2014
atime: 0x5ae4fd34 -- Sun Apr 29 01:01:08 2018
mtime: 0x54906e52 -- Tue Dec 16 18:39:30 2014
crtime: 0x54906e64 -- Tue Dec 16 18:39:48 2014
Size of extra inode fields: 4
BLOCKS:
(0):291235844
TOTAL: 1
Come possiamo vedere che il nostro file è stato creato il 16 dicembre 2014 alle ore 18:39, modificato il 29 dicembre 2018, e visualizzato l'ultima volta il 29 aprile 2018 alle ore 01:01