Spiegazione dei timestamp dei file Linux: un tempo, mtime y ctime

Contenuti

Un laptop che mostra una finestra di terminale con finestre di terminale aggiuntive piene di testo in background.

quando “cambiadono significa “modificato”? Quando parliamo di timestamp dei file Linux. In questa guida, spiegheremo come il sistema li aggiorna e come modificarli da soli.

La differenza tra atime, mtime y ctime

Ogni file Linux ne ha tre timestamp: il timestamp di accesso (un tempo), il timestamp modificato (mtime) e timestamp modificato (ctime).

Il timestamp di accesso è l'ultima volta che è stato letto un file. Ciò significa che qualcuno ha utilizzato un programma per visualizzare il contenuto del file o leggere alcuni valori da esso. Nulla è stato modificato o aggiunto al file. Si è fatto riferimento ai dati, ma non sono stati modificati.

Un timestamp modificato indica l'ultima volta che il contenuto di un file è stato modificato. Un programma o una procedura ha modificato o manipolato il file. "Modificato" significa che qualcosa all'interno del file è stato modificato o eliminato, o sono stati aggiunti nuovi dati.

I timestamp modificati non si riferiscono alle modifiche apportate al contenuto di un file. Piuttosto, è l'ora in cui i metadati relativi al file sono stati modificati. Modifiche ai permessi dei file, come esempio, aggiornerà il timestamp modificato.

Il file system standard ext4 Linux alloca anche lo spazio per un timestamp di creazione file nelle sue strutture di file system interne., ma questo non è stato ancora implementato. Qualche volta, questo timestamp è completato, ma non può dipendere dai valori che contiene.

L'anatomia di un timestamp

I timestamp di Linux contengono un numero anziché una data e un'ora. Questo numero è il numero di secondi trascorsi da quando Era Unix, che cos'era mezzanotte? (00:00:00) del 1 di gennaio di 1970, Su Tempo Universale Coordinato (UTC). I secondi intercalari vengono ignorati nei timestamp di Linux, quindi non sono analoghi al tempo reale.

Quando Linux deve mostrare un timestamp, traduci il numero di secondi in una data e un'ora. Questo rende più facile la comprensione per gli umani.. La posizione e il fuso orario del computer che visualizza il file guida la conversione del numero di secondi in data e ora. Assicura inoltre che il mese sia nella lingua corretta.

Quindi, Quanti secondi possono essere memorizzati in un timestamp? Tanto, 2.147.483.647, per essere precisi. Questo è molto, ma è abbastanza?? Se lo aggiungi all'epoca Unix e poi lo traduci in una data e un'ora, arriverà martedì 19 di gennaio di 2038 a 03:14:07 sono. Avremo bisogno di uno schema diverso per i timestamp prima di tale data.

Visualizzazione della data e dell'ora

Quando usi il -l (lunga lista) opzione con ls, Come mostrato di seguito, puoi vedere il timestamp modificato:

ls -l dp.c

Se vuoi vedere il timestamp di accesso, usa el -lu (tempo di accesso) opzione come questa:

ls -lu dp.c

E infine, per vedere il timestamp della modifica, puoi usare il -lc opzione (cambia ora); scrivi quanto segue:

ls -lc dp.c

I timestamp sopra mostrano che il contenuto del file è stato modificato l'ultima volta su 21 aprile 2019. I timestamp di accesso e di modifica sono identici perché il file è stato copiato da un altro computer a questo. 20 di gennaio di 2020, ed entrambi i timestamp sono stati aggiornati in quel momento.

Per visualizza tutti i timestamp contemporaneamente, utilizzare il stat comando come segue:

stat dp.c

I fusi orari sono elencati nella parte inferiore dello schermo. Come potete vedere, hanno una componente frazionaria di secondo molto precisa. Alla fine di ogni timestamp, vedrai anche un -0500 oh -0400 .

Questi sono offset di fuso orario. Il file system registra i timestamp in UTC e li converte nel fuso orario locale quando li visualizza stat. Il computer che abbiamo utilizzato per la ricerca di questo post è impostato come se fosse nel fuso orario standard orientale (È) Dagli Stati Uniti d'America. UU.

Quel fuso orario è cinque ore indietro rispetto all'UTC quando EST è in vigore. Nonostante questo, è quattro ore indietro rispetto a UTC quando è in vigore l'ora legale orientale (EDT). In Aprile 2019, quando il timestamp modificato è stato cambiato, L'EDT era in vigore. Ecco perché due dei timestamp hanno una compensazione di cinque ore, ma quello modificato ha una compensazione di quattro ore.

Gli offset e i fusi orari non vengono memorizzati da nessuna parte. Non c'è né un inode né uno spazio del filesystem dedicato a contenere questi valori. Devi calcolarli al volo usando il timestamp (che è sempre in ora UTC), il fuso orario locale del computer che visualizza il file e se era in vigore l'ora legale.

Además verá una marca de tiempo de “Nascita”, che è riservato alla data di creazione del file. Esto no está implementado y verá un guión-Invece di un timestamp.

IMPARENTATO: Tutto ciò che avresti sempre voluto sapere sugli inode in Linux

Modifica data e ora

Se desideri, può cambiare i timestamp di un file. Puoi usare il touch comando per modificare l'accesso o modificare i timestamp, entrambi:

touch -a dp.c

Per determinare un nuovo timestamp di accesso, userei il -a (tempo di accesso) opzione. Questo comando imposta il timestamp di accesso all'ora corrente del computer:

stat dp.c

Il timestamp di accesso è cambiato, come previsto. Nonostante questo, anche il timestamp modificato è stato aggiornato; E 'normale.

Per cambiare il timestamp modificato, puoi usare il -m (tempo di modifica) opzione:

touch -m dp.c
stat dp.c

Questa volta, timestamp modificati e modificati aggiornati.

Puoi usare il -d (Data) se si desidera modificare contemporaneamente l'accesso e i timestamp modificati. Puoi anche specificare un'ora e una data; non sei limitato a cambiare i timestamp al presente.

Utilizzeremo il seguente comando per determinare l'accesso e i timestamp modificati al 10:30:45 del 15 di gennaio di 2020:

tocco -d "2020-01-15 10:30:45" dp.c
stat dp.c

Ora abbiamo impostato l'accesso e modificato i timestamp su una data nel passato. Anche il timestamp modificato è stato aggiornato all'ora corrente del computer.

Puoi anche usare il -r (riferimento) opzione, come mostrato di seguito, se vuoi determinare i timestamp di un file sui valori dei timestamp di un altro:

touch dp.c -r dice_words.sl3
stat dp.c

Poi, siamo praticamente tornati al punto di partenza, con una miscela di -0400 e -0500 timestamp.

Facciamo qualcosa che influisca solo sul timestamp modificato. Useremo il chmod comando per dare un file eseguibile eseguire i permessi per tutti gli utenti:

chmod +x dp
dp statistica

Il timestamp modificato è stato l'unico che è stato aggiornato. Questo perché il file stesso non è stato modificato, non è stato effettuato l'accesso o modificato. Nonostante questo, i metadati sul file era modificare.

IMPARENTATO: Come usare il comando chmod in Linux

Come il file system aggiorna i timestamp

Quando si monta un file system, ci sono opzioni che puoi usare per specificare come quel file system dovrebbe funzionare o essere trattato. Questi sono memorizzati nel /etc/fstab file, che viene letto ed elaborato al momento dell'avvio. Inoltre puoi configurare le opzioni per dettare lo schema che dovrebbero usare per aggiornare il timestamp di accesso.

Le seguenti sono alcune delle alternative più comuni:

  • tempo rigoroso (programma rigoroso): Questa opzione aggiorna il timestamp di accesso dei file ogni volta che si accede ad essi. C'è un sovraccarico collegato a questo approccio, ma alcuni server possono beneficiare di questo schema. Ha poco merito su un desktop o un laptop.
  • noatime (senza un'ora): Questa opzione disabilita completamente l'aggiornamento dei timestamp di accesso per file e directory. Nonostante questo, i timestamp modificati continueranno ad essere aggiornati.
  • nodoratime (Sin Atime): Questa opzione abilita i timestamp di accesso per l'aggiornamento dei file, ma lo disabilita per le directory.
  • relazione (tempo relativo): Questa opzione aggiorna il timestamp di accesso solo se ne aveva più di 24 ore o se quello precedente era più vecchio dei timestamp modificati o modificati in questo momento. Questo trova un buon equilibrio tra i timestamp di accesso che vengono aggiornati troppo frequentemente o non aggiornati affatto.

Diamo un'occhiata a /etc/fstab file per questo computer e vedere quali opzioni sono impostate:

less /etc/fstab

il /etc/fstab Il file viene visualizzato per noi, come mostrato di seguito.

Ecco il contenuto del file senza il wrapper:

# /ecc/fstab: informazioni sul file system statico.
#
# Use 'blkid' to print the universally unique identifier for a
# dispositivo; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# <file system> <punto di montaggio> <genere> <opzioni opzioni> <Spazzatura> <passare>
# / was on /dev/sda1 during installation
UUID=4a143d08-8695-475b-8243-b13b56050fc2 / ext4 errors=remount-ro 0 1
/swapfile none swap sw 0 0

Solo hay dos entradas, y una de ellas es un archivo de intercambio, que podemos ignorar. El otro se monta en la raíz del sistema de archivos ( / ) y estaba en el dispositivo /dev/sda1 al momento dell'installazione. Questa è la prima partizione sul primo disco rigido, e si scopre che contiene a ext4 File System.

L'unica opzione che ottieni è errors=remount-ro, che dice al sistema operativo di rimontare questo file system come di sola lettura se ci sono errori nel tentativo di montarlo come un file system di lettura-scrittura.

Perché, nessuna menzione di come verrà gestito il timestamp di accesso. Immergiamoci e vediamo cosa /proc/mounts ci puoi dire. Canalizzeremo l'output di /proc/mounts attraverso grep. Nuestra cadena de búsqueda será “sda”, l'identificatore del disco rigido.

Scriviamo quanto segue:

cat /proc/mounts | grep "sda"

Ora vediamo le seguenti opzioni:

  • rw: Il file system verrà montato come file system di lettura/scrittura.
  • relazione: El sistema de archivos utilizará el esquema detiempo relativopara actualizar las marcas de tiempo de acceso.

Da dove viene? bene il relatime Lo schema viene utilizzato nelle seguenti situazioni:

  • Quando il valori predeterminati /etc/fstab l'opzione è usata.
  • Quando il relazione /etc/fstab l'opzione è usata.
  • Quando le opzioni di data e ora di accesso non vengono utilizzate in /etc/fstabe stai usando il kernel Linux 2.6.30 o più recente.

I nostri /etc/fstab biglietto per il ext4 il file system non ha specificato un'opzione di aggiornamento del timestamp di accesso, quindi Linux ha preso la decisione sensata e ha usato relatime.

IMPARENTATO: Come scrivere un file fstab in Linux

I timestamp sono importanti

I timestamp ci danno un modo semplice per vedere quando è stato effettuato l'accesso, un file è stato modificato o cambiato. Ma, cosa è più importante?, fornire un modo per eseguire il backup e sincronizzare il software per determinare quali file devono essere sottoposti a backup.

La capacità di manipolare i timestamp sarà utile ogni volta che devi convincere con la forza un programma a includere o ignorare un file o un insieme di file.

Iscriviti alla nostra Newsletter

Non ti invieremo posta SPAM. Lo odiamo quanto te.