spot_img
More
    spot_img
    HomeTecnologiaTecnologia DigitaleSpiegazione dei timestamp dei file Linux: atime, mtime e ctime

    Spiegazione dei timestamp dei file Linux: atime, mtime e ctime

    -

    Un computer portatile che visualizza una finestra terminale con finestre terminali riempite di testo aggiuntive in background.
    Fatmawati Achmad Zaenuri / Shutterstock

    Quando “modificato” non 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 e ctime

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

    Il timestamp di accesso è l'ultima volta che un file è stato letto. 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. I dati sono stati referenziati ma invariati.

    Un timestamp modificato indica l'ultima volta che il contenuto di un file è stato modificato. Un programma o processo 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, è il momento in cui i metadati relativi al file sono stati modificati. Le modifiche alle autorizzazioni dei file, ad esempio, aggiorneranno il timestamp modificato.

    Il file system ext4 Linux standard alloca anche lo spazio per un timestamp di creazione file nelle sue strutture interne di file system, ma questo non è stato ancora implementato. A volte, questo timestamp è popolato, ma non puoi dipendere dai valori in esso.

    The Anatomy of a Timestamp

    I timestamp di Linux contengono un numero anziché una data e un'ora. Questo numero è il numero di secondi dall'epoca di Unix, che era mezzanotte (00:00:00) il 1 ° gennaio 1970, in Coordinated Universal Time (UTC). I secondi saltati vengono ignorati nei timestamp di Linux, quindi non sono analoghi al tempo reale.

    Quando Linux deve visualizzare un timestamp, traduce il numero di secondi in una data e ora. Questo rende più facile la comprensione per l'uomo. La posizione e il fuso orario in cui si trova il computer che visualizza il file guida la conversione del numero di secondi in una data e ora. Assicura inoltre che il mese sia nella lingua corretta.

    Quindi, quanti secondi possono essere memorizzati in un timestamp? Molto: 2.147.483.647, per essere precisi. È un gran numero, ma è abbastanza? Se lo aggiungi all'epoca di Unix e poi lo traduci in una data e un'ora, ricevi martedì 19 gennaio 2038 alle 03:14:07, tuttavia prima di allora avremo bisogno di uno schema diverso per i timestamp.

    Visualizzazione dei timestamp

    Quando si utilizza il -l (elenco lungo) opzione con ls, come mostrato di seguito, puoi vedere il timestamp modificato:

    ls -l dp.c

    Se si desidera visualizzare il timestamp di accesso, utilizzare il -lu (tempo di accesso) in questo modo:

    ls -lu dp.c

    E infine, per vedere il timestamp del cambiamento, puoi usare il -lc opzione (cambia ora); digitare quanto segue:

    ls -lc dp.c

    I comandi "ls -l dp.c" in una finestra di terminale.

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

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

    stat dp.c

    Il comando "stat dp.c" in una finestra del terminale.

    I fusi orari sono elencati nella parte inferiore del display. Come puoi vedere, hanno una componente dei secondi molto accurata e frazionata. Alla fine di ogni timestamp, vedi anche a -0500 o -0400 .

    Questi sono offset del fuso orario. Il file system registra i timestamp in UTC e li converte nel fuso orario locale quando visualizzato da stat. Il computer che abbiamo utilizzato per ricercare questo articolo è configurato come se fosse nel fuso orario dell'Est standard (EST) degli Stati Uniti

    Quel fuso orario è di cinque ore indietro rispetto a UTC quando EST è in vigore. Tuttavia, sono quattro ore indietro rispetto all'ora UTC quando è in vigore l'ora legale (EDT). Nell'aprile 2019, quando il timestamp modificato è stato modificato, EDT era in vigore. Ecco perché due dei timestamp hanno un offset di cinque ore, ma il modificato ha un offset di quattro ore.

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

    Viene inoltre visualizzato un timestamp “Nascita”, riservato per la data di creazione del file. Questo non è implementato e viene visualizzato un trattino “-“Anziché un timestamp.

    RELAZIONATO: Tutto quello che avresti sempre voluto sapere sugli inode su Linux

    Modifica dei timestamp

    Se lo desideri, puoi modificare i timestamp su un file. Puoi usare il touch comando per modificare l'accesso o i timestamp modificati o entrambi:

    touch -a dp.c

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

    stat dp.c

    Il comando "touch -a dp.c" in una finestra del terminale.

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

    Per modificare il timestamp modificato, è possibile utilizzare -m (orario modificato) opzione:

    touch -m dp.c
    stat dp.c

    Il comando "touch -m dp.c" in una finestra di terminale.

    Questa volta, i timestamp modificati e modificati sono stati aggiornati.

    Puoi usare il -d (data) opzione se si desidera modificare contemporaneamente sia l'accesso sia i timestamp modificati. Puoi anche specificare un orario e una data: non sei limitato alla modifica dei timestamp al presente.

    Utilizzeremo il seguente comando per impostare l'accesso e i timestamp modificati su 10:30:45 il 15 gennaio 2020:

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

    Il

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

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

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

    Il comando "tocca dp.c -r dice_words.sl3" in una finestra del terminale.

    E poi, siamo praticamente tornati da dove siamo partiti, con un misto di -0400 e -0500 timestamp.

    Facciamo qualcosa che riguarda solo il timestamp modificato. Useremo il chmod comando per dare un file eseguibile eseguire autorizzazioni per tutti gli utenti:

    chmod +x dp
    stat dp

    I comandi "chmod + x dp" e "stat dp" in una finestra terminale.

    Il timestamp modificato è stato l'unico che è stato aggiornato. Questo perché il file stesso non è stato modificato, non è stato né consultato né modificato. Tuttavia, i metadati relativi al file era cambiato.

    RELAZIONATO: Come usare il comando chmod su Linux

    In che modo il file system aggiorna i timestamp

    Quando viene montato un file system, ci sono opzioni che è possibile utilizzare per specificare il modo in cui tale file system deve funzionare o essere trattato. Questi sono memorizzati nel file /etc/fstab file, che viene letto ed elaborato all'avvio. È inoltre possibile impostare le opzioni per dettare lo schema da utilizzare per aggiornare il timestamp di accesso.

    Di seguito sono riportate alcune delle opzioni più comuni:

    • strictatime (tempo rigoroso): Questa opzione aggiorna il timestamp di accesso dei file ogni volta che si accede. C'è un sovraccarico associato a questo approccio, ma alcuni server possono beneficiare di questo schema. Ha poco merito su un desktop o un computer portatile.
    • noatime (no atime): Questa opzione disabilita completamente l'aggiornamento dei timestamp di accesso per file e directory. I timestamp modificati, tuttavia, verranno comunque aggiornati.
    • nodiratime (no dir atime): Questa opzione abilita i timestamp di accesso per l'aggiornamento dei file, ma la disabilita per le directory.
    • relatime (tempo relativo): Questa opzione aggiorna il timestamp di accesso solo se era più vecchio di 24 ore o se quello precedente era più vecchio dei timestamp modificati o modificati. Ciò crea un buon equilibrio tra i timestamp di accesso che si aggiornano troppo frequentemente o non si aggiornano affatto.

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

    less /etc/fstab

    Il "less / etc / fstab" in una finestra di terminale.

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

    Il file "/ etc / fstab" in meno in una finestra del terminale.

    Ecco il contenuto del file senza il wrap-around:

    # /etc/fstab: static file system information.
    #
    # Use 'blkid' to print the universally unique identifier for a
    # device; 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).
    #
    #      
    # / was on /dev/sda1 during installation
    UUID=4a143d08-8695-475b-8243-b13b56050fc2 / ext4 errors=remount-ro 0 1
    /swapfile none swap sw 0 0

    Ci sono solo due voci e una è un file di scambio, che possiamo ignorare. L'altro è stato montato alla radice del filesystem ( / ) ed era sul dispositivo /dev/sda1 al momento dell'installazione. Questa è la prima partizione sul primo disco rigido e contiene un ext4 file system.

    L'unica opzione passata è errors=remount-ro, che indica al sistema operativo di reinstallare questo file system in sola lettura se si verificano errori durante il tentativo di montarlo come file system di lettura e scrittura.

    Pertanto, non viene menzionato il modo in cui verrà gestito il timestamp di accesso. Andiamo più a fondo e vediamo cosa /proc/mounts ci può dire. Inoltreremo l'output da /proc/mounts attraverso grep. La nostra stringa di ricerca sarà “sda”, l'identificatore del disco rigido.

    Digitiamo quanto segue:

    cat /proc/mounts | grep "sda"

    Il

    Ora vediamo le seguenti opzioni:

    • rw: Il file system verrà montato come file system di lettura e scrittura.
    • relatime: Il file system utilizzerà lo schema “Atime relativo” per aggiornare i timestamp di accesso.

    Da dove viene? Bene, il relatime lo schema viene utilizzato nelle seguenti situazioni:

    • Quando il default /etc/fstab opzione utilizzata.
    • Quando il relatime /etc/fstab opzione utilizzata.
    • Quando non sono utilizzate opzioni di data / ora di accesso /etc/fstabe stai utilizzando il kernel 2.6.30 o successivo di Linux.

    Nostro /etc/fstab iscrizione per il ext4 il file system non ha specificato alcuna opzione di aggiornamento del timestamp di accesso, quindi Linux ha fatto la scelta ragionevole e l'ha usata relatime.

    RELAZIONATO: Come scrivere un file fstab su Linux

    I timestamp sono importanti

    I timestamp ci forniscono un modo semplice per vedere quando un file è stato effettuato l'accesso, modificato o modificato. Ma, cosa ancora più importante, forniscono un modo per eseguire il backup e la sincronizzazione del software per determinare quali file devono essere sottoposti a backup.

    La capacità di manipolare i timestamp si rivelerà utile ogni volta che è necessario convincere forzatamente un programma a includere o ignorare un file o un set di file.

    Related articles

    Stay Connected

    0FansLike
    0FollowersFollow
    0FollowersFollow
    0SubscribersSubscribe
    spot_img

    Latest posts