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 ×

Grazie a Lorenzo per le preziose informazioni.

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