Conoscere la data di creazione di un file in GNU/Linux

Questo post non sarebbe mai nato se non fosse stato per Lorenzo, che si è trovato davanti alla necessità di risalire alla data di creazione di un file. E si è accorto che questo dato non è di immediata reperibilità. Vista l’importanza di quel suo post, mi sembra giusto darne ulteriore visibilità.

Nota di aggiornamento

Con le recenti versioni di stat è possibile reperire questa informazione:

$ stat filename 
  File: filename
  Dim.: 487350          Blocchi: 952        Blocco di IO: 4096   file regolare
Device: 8,17    Inode: 56368081    Links: 1
Accesso: (0644/-rw-r--r--)  Uid: ( 1000/    aldo)   Gid: ( 1000/    aldo)
Accesso  : 2022-12-18 09:08:16.340484099 +0100
Modifica : 2019-05-07 12:17:11.000000000 +0200
Cambio   : 2021-11-13 23:14:06.304345519 +0100
Creazione: 2020-10-18 07:55:44.026567659 +0200

È anche possibile farlo con ls:

ls -l --time=birth filename

che restituisce:

-rw-r--r-- 1 aldo aldo 487350 18 ott  2020 filename

In Ext4 è possibile farlo con:

ls -i filename

che restituisce l’inode del file:

6029808 filename

e quindi:

sudo debugfs -R 'stat 6029808' /dev/sda3

dove /dev/sda3 è la partizione in cui risiede il file. Ed infatti, creando un file di test e dando quel comando, l’output è:

Inode: 6029808 Type: regular Mode: 0644 Flags: 0x80000
 Generation: 3337172570 Version: 0x00000000:00000001
 User: 1000 Group: 1000 Size: 0
 File ACL: 0 Directory ACL: 0
 Links: 1 Blockcount: 0
 Fragment: Address: 0 Number: 0 Size: 0
  ctime: 0x4e47fa9b:c3e1fd20 -- Sun Aug 14 18:40:59 2011
  atime: 0x4e47fa9b:c3e1fd20 -- Sun Aug 14 18:40:59 2011
  mtime: 0x4e47fa9b:c3e1fd20 -- Sun Aug 14 18:40:59 2011
 crtime: 0x4e47fa9b:c3e1fd20 -- Sun Aug 14 18:40:59 2011
 Size of extra inode fields: 28
 EXTENTS:
 (END)

dove la quartultima riga contiene il dato che ci interessa, cioè crtime (creation time).

Gli altri sono:

ctime (change time)
Ora del cambiamento, che può includere anche solo una modifica ai permessi senza apertura del file.
atime (access time)
Ora di accesso al file.
mtime (modification time)
Ora di modifica del file.

Schematicamente, ecco cosa avviene (la x indica un cambio del timestamp):

ctime atime mtime crtime
Creazione file × × × ×
Apertura file ×
Modifica file × × ×
Cambio permessi ×

Tabella 1. Quali attributi di un file vengono modificati a seconda dell’azione eseguita.


Grazie a Lorenzo per le preziose informazioni.

Photo credits: ToniVC, The Passage of Time, CC by-nc-nd, 2008.