Come cambia ctime?


8

Sto cercando di capire con precisione quando viene modificato il timestamp ctime di un file. In molti punti (ad esempio, nella risposta accettata qui ) si suggerisce che qualsiasi modifica agli attributi del file cambierà anche ctime. Tuttavia, questo non sembra essere vero, almeno sul mio Ubuntu 12.04 (sì, lo so, un po 'vecchio ...):

cat file.txt > /dev/null

cambia l'atime, quindi cambia gli attributi del file (nell'inode del file), ma non cambia il ctime.

Altre fonti (ad es. Qui e qui ) suggeriscono che solo alcune operazioni sugli attributi del file cambiano effettivamente il tempo, ma non viene fornito un elenco preciso.

Dove posso trovare un riferimento preciso a quali operazioni cambiano il tempo?


Forse il problema è correlato cat, lo hai esaminato con touch?
Mahdi,

Risposte:


8

Esistono tre timestamp sui sistemi Unix:

  • atime: Tempo di accesso

    Questo timestamp indica quando è stato effettuato l' accesso al file l'ultima volta, incluso solo l'accesso in lettura.

  • ctime: Cambia ora

    Questo timestamp indica quando gli attributi del file (informazioni sull'inode) sono stati modificati l'ultima volta. Ciò include ad esempio proprietà e autorizzazioni, ma una modifica del contenuto attiva anche un aggiornamento di questo timestamp.

    Si noti che le modifiche all'atime sembrano essere un'eccezione in quanto non attivano un aggiornamento ctime. Ciò è probabilmente dovuto al fatto che un semplice accesso in lettura che è sufficiente per attivare un aggiornamento atime non apporta alcuna modifica rilevante agli attributi del file. E uno degli scopi principali di ctime è aiutare gli strumenti di backup per determinare se un file è cambiato. L'atime è un'informazione irrilevante per tali strumenti e l'aggiornamento di un backup solo per aggiornare un atime modificato perché qualcuno ha letto il file sarebbe inutile.

    Non sono sicuro, ma alcune persone pensano che questo comportamento (le modifiche a atime non aggiornano ctime) sia dovuto solo alle opzioni di mount (come relatime) del file system sottostante che memorizza e ritarda gli aggiornamenti atime nell'inode per motivi di prestazioni in memoria e li applica solo agli inode reali sul disco (attivando un aggiornamento ctime) in determinate condizioni.
    @kos l'ha provato e apparentemente anche quando si monta un FS con l'opzione `strictatime``, il ctime sembra non aggiornarsi mai se l'atime cambia.

  • mtime: Tempo di modifica

    Questo timestamp indica quando il contenuto del file è stato modificato l'ultima volta.


Quindi un semplice accesso in lettura usando cat FILENAMEsolo cambia l' atime , ma non il ctime poiché nessun attributo di file è stato modificato. L' atime modificato non conta.


Questo è esattamente il punto: perché il tempo cambiato non conta? Non è un attributo di file?
VeryHardCoder

@VeryHardCoder Ho cercato di elaborare la mia risposta in quel punto e ho aggiunto alcune spiegazioni.
Byte Commander
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.