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 ls, stat 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