Command Line - File System - Linux

Come vedere la data di creazione di un file su Linux

In questo articolo analizzeremo come Linux gestisce il tempo, perché il comando ls a volte omette l’anno di modifica e per quale motivo il campo relativo alla data di creazione del file (Birth) può risultare vuoto. Analizzeremo una peculiarità della gestione dei timestamp dei file ed il motivo pere cui comandi come ls o strumenti di diagnostica come stat possono restituire comportamenti apparentemente anomali.

Il mistero dell’anno mancante nel comando ls

Quando si esegue un elenco dettagliato dei file con il comando ls -l (o tramite il comune alias ll), balza subito all’occhio un dettaglio: per alcuni file viene mostrato l’anno, mentre per altri compare l’orario di modifica. Questo comportamento non è un bug, ma una precisa logica di visualizzazione standard introdotta per ottimizzare lo spazio e dare priorità alle informazioni più rilevanti

  • meno di 6 mesi, se il file è stato modificato di recente (negli ultimi sei mesi rispetto alla data corrente del sistema), ls mostra il mese, il giorno e l’orario esatto, omettendo l’anno
  • più di 6 mesi, se la modifica è più datata viene mostrato l’anno di modifica al posto dell’ora
ls -l /etc

[...]
-rw-r--r--.  1 root root      624 May 16  2022 updatedb.conf
-rw-r--r--.  1 root root       28 Mar  1 16:39 vconsole.conf
[...]

Per ovviare a questa approssimazione visiva e ottenere l’anno esatto senza calcoli temporali, l’amministratore di sistema ha a disposizione formati più rigidi

ls -l --time-style=full-iso /etc

[...]
-rw-r--r--.  1 root root      624 2022-05-16 14:09:39.000000000 +0200 updatedb.conf
-rw-r--r--.  1 root root       28 2026-03-01 16:39:04.392179579 +0100 vconsole.conf
[...]

Anatomia dei Timestamp con stat

Per un’analisi forense o di debug accurata, il comando stat rappresenta lo strumento più adatto. A differenza di lsstat interroga direttamente l’inode del file system, restituendo tre metriche temporali distinte

  • Modify (mtime): identifica l’ultima volta in cui il contenuto del file è stato modificato (es. scrittura di nuove righe)
  • Change (ctime): registra l’ultimo cambio di metadati. Questo valore si aggiorna se cambiano i permessi (chmod), il proprietario (chown) o il nome del file, anche se il contenuto rimane invariato
  • Access (atime): traccia l’ultima volta in cui il file è stato letto o aperto da un processo
stat updatedb.conf

  File: updatedb.conf
  Size: 624             Blocks: 8          IO Block: 4096   regular file
Device: fd00h/64768d    Inode: 33705243    Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Context: system_u:object_r:etc_t:s0
Access: 2026-05-15 00:00:01.232449205 +0200
Modify: 2022-05-16 14:09:39.000000000 +0200
Change: 2026-05-10 22:33:40.569184832 +0200
 Birth: 2026-05-10 22:33:40.532184776 +0200

stat vconsole.conf

  File: vconsole.conf
  Size: 28              Blocks: 8          IO Block: 4096   regular file
Device: fd00h/64768d    Inode: 34038112    Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Context: system_u:object_r:locale_t:s0
Access: 2026-05-10 20:41:36.571594119 +0200
Modify: 2026-03-01 16:39:04.392179579 +0100
Change: 2026-03-01 16:39:04.392179579 +0100
 Birth: -

Il campo “Birth” vuoto in Linux

Nelle versioni moderne di stat, è presente una quarta voce: Birth (o btime), progettata per indicare la data di creazione originaria del file. Tuttavia, non è raro osservare un output nullo, rappresentato da un trattino (). La mancanza di questo dato è legata a tre precisi fattori tecnologici

  • Limiti del File System (ext3 vs ext4), storicamente i file system Unix e Linux (come ext3) non prevedevano uno spazio nell’inode per memorizzare il momento della creazione del file. Sebbene i file system moderni come ext4 e xfs supportino nativamente il btime, la presenza di partizioni formattate con tecnologie legacy impedisce la visualizzazione di questo valore
  • Versioni del Kernel Linux e syscall statx, il supporto a livello di kernel per la lettura della data di creazione è stato standardizzato in modo efficiente solo a partire dalla versione 4.11 del kernel Linux, grazie all’introduzione della system call statx(). Sistemi operativi enterprise datati o non aggiornati potrebbero non esporre questa informazione all’area utente
  • Protocolli di Rete (NFS e Samba), se il file risiede su una condivisione di rete (es. NFS o versioni non aggiornate di Samba) o all’interno di determinati container e layer di astrazione hardware, il metadato Birth può essere rimosso o non propagato correttamente durante il transito dei dati tra client e server