[GUIDA] Linux: come modificare un file senza cambiarne il timestamp

Come sapete, se aprite e modificate un qualsiasi tipo di file, ad esempio un documento creato con LibreOffice, vengono aggiornati i timestamp riguardanti “l’ora di accesso” e “l’ora di modifica”. Potrebbe tornarvi utile sapere come modificare un file conservando i vecchi timestamp. Prima di mostrarvi come procedere consentitemi un breve riepilogo su questo argomento.

Timestamp su Linux

In Linux ogni file ha tre tipi di timestamp: atime (ora di accesso, access time), mtime (ora di modifica, modification time) e ctime (change time) inoltre c’è il cosiddetto btime (birth time), l’orario di creazione del file. Come suggerisce il nome, i timestamp vengono utilizzati per scoprire quando è stato eseguito l’accesso e modificato un file. Mtime e ctime sono fondamentalmente la stessa cosa: il primo indica le modifiche a un file (aggiunto del testo o cancellato del testo ad esempio), il secondo varia quando varia mtime ma anche quando cambiano la proprietà, o gli attributi o i permessi del file in questione.

Per vedere i timestamp di un file è necessario utilizzare il comando stat appartenente a GNU Coreutils. Ecco come visualizzare il timestamp di un qualsiasi file, nel mio caso lffl.txt:

lffl timestamps linux stat

Modificare un file senza cambiare atime e ctime

I timestamp di un file possono essere aggiornati utilizzando il comando touch.  Dopo aver modificato un file possiamo usare l’opzione -r del comando touch per preservare i timestamp del file. L’opzione -r viene utilizzata per impostare i timestamp di un file sui valori di timestamp di un altro.

Ora vado a modificare il file lffl.txt riportato nell’immagine sopra. Chiaramente i timestamp vengono aggiornati:

lffl timestamp linux stat

Come evitare l’aggiornamento? Prima di modificare il file bisogna avere cura di creare un nuovo file vuoto con il medesimo timestamp del file da modificare. Per farlo usiamo il comando

touch -r lffl.txt lffl.timestamp

Chiaramente il ctime sarà differente ma atime e mtime saranno uguali al file lffl.txt.

lffl timestamp linux stat

Ora modificate il file lffl.txt, salvando le modifiche andrete ad aggiornare i timestamp. Per ripristinare quelli di partenza date il seguente comando:

touch -r lffl.timestamp lffl.txt

Dando nuovamente il comando stat lffl.txt noterete che atime e mtime sono identici a quelli pre-modifica.

Tenete presente che, by design, non possiamo conservare i tmst dell’ora di modifica (ctime). Questo si aggiornerà sempre, a meno di azioni più invasive. Modificare il ctime di un file implica seguire una delle seguenti strade:

  • Impostare l’ora di sistema sull’ora che si desidera imporre, quindi procedere usando il comando touch e infine reimpostare l’ora di sistema corretta;
  • Modificare il kernel per aggiungere un’interfaccia che permetta di cambiare il ctime;
  • Accedendo direttamente all’immagine del disco, ad esempio con debugfs (mon fatelo mentre il filesystem è montato).

sharing-caring-1Seguiteci sul nostro canale Telegram, sulla nostra pagina Facebook e su Google News. Nel campo qui sotto è possibile commentare e creare spunti di discussione inerenti le tematiche trattate sul blog.

L’articolo [GUIDA] Linux: come modificare un file senza cambiarne il timestamp sembra essere il primo su Linux Freedom.


Source: [GUIDA] Linux: come modificare un file senza cambiarne il timestamp