Questo tutorial spiega i tipi di timestamp dei file Linux e come visualizzare e modificare i timestamp di un file utilizzando touch
comando con esempi.
Una breve introduzione ai timestamp dei file Linux
In Linux e Unix in generale, ogni file ha tre tipi di timestamp:atime (tempo di accesso), mtime (tempo di modifica) e ctime (cambiare tempo). Come suggerisce il nome, i timestamp vengono utilizzati per scoprire quando è stato effettuato l'accesso, la modifica e la modifica di un file.
Il timestamp del tempo di accesso (o in breve atime) è l'ultima volta che un file è stato letto. Ad esempio, potresti aver aperto il file. Al file potrebbe essere stato eseguito l'accesso da qualche altro programma o da una macchina remota. Potresti aver letto il contenuto di un file usando un comando (ad es. cat
command) o un programma (es. gedit, vim ecc.). Il file non viene né modificato né modificato. È stato effettuato solo dall'utente o da un altro utente da un sistema remoto.
Il timestamp dell'ora di modifica (o mtime) indica l'ultima volta che un file (o una directory) è stato modificato. In altre parole, mtime indica l'ora in cui il contenuto di un file è stato modificato. Ad esempio, potresti aver aggiunto qualcosa nel file o eliminato qualcosa dal file o potresti aver modificato il contenuto del file.
Un timestamp dell'ora di modifica (o ctime) mostra l'ultima volta che è stato modificato il contenuto del file o i metadati del file (ad esempio gli attributi del file, come la proprietà del file, le autorizzazioni del file o il gruppo).
In sintesi,
- atime - indica l'ora dell'ultimo accesso archiviare per la lettura dei contenuti.
- mtime:indica l'ora dell'ultima modifica per archiviare i contenuti.
- ctime - indica l'ora dell'ultima modifica per archiviare contenuti o metadati di file (proprietario, gruppo o autorizzazioni).
I timestamp possono essere utili in varie situazioni. Ecco alcuni casi d'uso per i timestamp:
- Trova e ordina i file in base al tempo di accesso o di modifica.
- Trova ed elimina file più vecchi di X giorni. Utile per ripulire i vecchi file nel disco rigido.
- Controlla quando è stato modificato un file di configurazione.
- Verifica se è stato effettuato l'accesso a un file.
- Verifica se una directory è stata aggiornata.
- Trova file più vecchi o più recenti di X giorni.
Visualizza timestamp dei file Linux con stat
e ls
comandi
Possiamo visualizzare i timestamp dei file in Linux usando stat
comando. Secondo le pagine man, il stat
comando visualizza lo stato del file o del file system in Linux. Il comando stat fa parte di GNU Coreutils
, quindi non dedichiamoci all'installazione.
Ora controlliamo i timestamp di un file di testo chiamato ostechnix.txt
utilizzando stat
comando:
$ stat ostechnix.txt
Risultato di esempio:
File: ostechnix.txt
Size: 21 Blocks: 8 IO Block: 4096 regular file
Device: 801h/2049d Inode: 4351679 Links: 1
Access: (0664/-rw-rw-r--) Uid: ( 1000/ sk) Gid: ( 1000/ sk)
Access: 2020-11-11 17:31:01.484504149 +0530
Modify: 2020-11-11 17:31:01.484504149 +0530
Change: 2020-11-11 17:31:01.484504149 +0530
Birth: -
Le ultime tre righe nell'output sopra mostrano rispettivamente l'ora di accesso, l'ora di modifica e la data e ora di modifica. Quando creiamo un nuovo file, tutti i timestamp sono gli stessi.
Hai notato la riga "Birth:
" alla fine dell'output? Indica il timestamp dell'ora di creazione del file. Lo standard POSIX non definisce un timestamp per la creazione del file. Alcuni filesystem (es. ext4, JFS, Btrfs) memorizzano questo valore, ma al momento non esiste l'API del kernel Linux per accedervi. Quindi, vediamo un trattino "-" invece di un timestamp nella riga "Nascita:".
Puoi anche ottenere i timestamp atime, mtime e ctime singolarmente usando ls
comando.
Per visualizzare il timestamp dell'ora di modifica (mtime), utilizzare ls -l
comando:
$ ls -l ostechnix.txt
-rw-rw-r-- 1 sk sk 21 Nov 11 17:31 ostechnix.txt
Per visualizzare il timestamp dell'ora di modifica (ctime), eseguire ls -lc
comando:
$ ls -lc ostechnix.txt
-rw-rw-r-- 1 sk sk 21 Nov 11 17:31 ostechnix.txt
Qui, il c
flag viene utilizzato per visualizzare l'ora dell'ultima modifica ai metadati del file o agli attributi del file.
Visualizza il timestamp dell'ora di accesso (atime) con ls -lu
comando:
$ ls -lu ostechnix.txt
-rw-rw-r-- 1 sk sk 21 Nov 11 17:31 ostechnix.txt
Qui, il u
flag mostra l'ora dell'ultimo accesso al file.
Cambia i timestamp dei file Linux con touch
comando
Il touch
Il comando viene utilizzato per modificare i timestamp dei file e per creare nuovi file vuoti in Linux. Proprio come stat
comando, il touch
il comando fa anche parte di GNU coreutils
, quindi non è nemmeno necessario installarlo.
Prima di modificare i timestamp, otteniamo i timestamp correnti del file denominato ostechnix.txt
per riferimento:
$ stat ostechnix.txt
File: ostechnix.txt
Size: 21 Blocks: 8 IO Block: 4096 regular file
Device: 801h/2049d Inode: 4351679 Links: 1
Access: (0664/-rw-rw-r--) Uid: ( 1000/ sk) Gid: ( 1000/ sk)
Access: 2020-11-11 17:31:01.484504149 +0530
Modify: 2020-11-11 17:31:01.484504149 +0530
Change: 2020-11-11 17:31:01.484504149 +0530
Birth: -
Come puoi vedere nell'output sopra, il file ostechnix.txt
è stato effettuato l'accesso. modificato e modificato nella stessa data e ora, ovvero 11 novembre 2020 alle 17:31:01.
Cambiamo i timestamp di questo file usando touch
comando come di seguito:
$ touch ostechnix.txt
Il comando precedente cambierà tutti i timestamp (ad esempio atime, mtime e ctime) nell'ora corrente del tuo computer.
Ora diamo un'occhiata ai timestamp del file con stat
comando:
$ stat ostechnix.txt
File: ostechnix.txt
Size: 21 Blocks: 8 IO Block: 4096 regular file
Device: 801h/2049d Inode: 4351679 Links: 1
Access: (0664/-rw-rw-r--) Uid: ( 1000/ sk) Gid: ( 1000/ sk)
Access: 2020-11-11 17:39:59.430610787 +0530
Modify: 2020-11-11 17:39:59.430610787 +0530
Change: 2020-11-11 17:39:59.430610787 +0530
Birth: -
Vedere? Tutti i timestamp sono stati modificati con l'ora corrente del mio sistema, ad esempio 2020-11-10 17:51:02
.
È anche possibile modificare i singoli timestamp separatamente. Ad esempio, puoi modificare solo il timestamp dell'ora di accesso (atime) con -a
bandiera:
$ touch -a ostechnix.txt
Il comando precedente imposterà il timestamp dell'ora di accesso sull'ora corrente.
Ora controlla il timestamp di ostechnix.txt
file con stat
comando:
$ stat ostechnix.txt
File: ostechnix.txt
Size: 21 Blocks: 8 IO Block: 4096 regular file
Device: 801h/2049d Inode: 4351679 Links: 1
Access: (0664/-rw-rw-r--) Uid: ( 1000/ sk) Gid: ( 1000/ sk)
Access: 2020-11-11 17:43:46.555428706 +0530
Modify: 2020-11-11 17:39:59.430610787 +0530
Change: 2020-11-11 17:43:46.555428706 +0530
Birth: -
Come si vede nell'output sopra, l'ora di accesso viene modificata nell'ora corrente. Viene aggiornato anche l'orario di modifica.
Per modificare solo il timestamp dell'ora di modifica (mtime), usa -m
bandiera:
$ touch -m ostechnix.txt
Verifica se l'mtime è cambiato con stat
comando:
$ stat ostechnix.txt
File: ostechnix.txt
Size: 21 Blocks: 8 IO Block: 4096 regular file
Device: 801h/2049d Inode: 4351679 Links: 1
Access: (0664/-rw-rw-r--) Uid: ( 1000/ sk) Gid: ( 1000/ sk)
Access: 2020-11-11 17:43:46.555428706 +0530
Modify: 2020-11-11 17:47:17.577722187 +0530
Change: 2020-11-11 17:47:17.577722187 +0530
Birth: -
Ora i timestamp mtime e ctime sono cambiati mentre atime è rimasto così com'è.
Come avrai notato quando cambiamo il tempo di accesso o il tempo di modifica, anche il ctime viene aggiornato.
Se desideri modificare simultaneamente i timestamp atime e mtime, usa -d
opzione.
$ touch -d "2020-11-11 17:50:01" ostechnix.txt
Verifica se i timestamp atime e mtime sono stati modificati o meno con stat
comando:
$ stat ostechnix.txt
File: ostechnix.txt
Size: 21 Blocks: 8 IO Block: 4096 regular file
Device: 801h/2049d Inode: 4351679 Links: 1
Access: (0664/-rw-rw-r--) Uid: ( 1000/ sk) Gid: ( 1000/ sk)
Access: 2020-11-11 17:50:01.000000000 +0530
Modify: 2020-11-11 17:50:01.000000000 +0530
Change: 2020-11-11 17:51:17.024213698 +0530
Birth: -
Ora abbiamo impostato l'ora di accesso e l'ora di modifica su un'ora specifica, ad esempio 2020-11-11 17:50:01
. E anche il timestamp ctime è stato aggiornato all'ora corrente.
È anche possibile utilizzare un timestamp specifico invece dell'ora corrente con -t
segnala anche:
$ touch -t 2011111754 ostechnix.txt
Questo comando imposterà i timestamp atime e mtime su 2020-11-11 17:54:00
. Verificalo con stat
comando come di seguito:
$ stat ostechnix.txt
File: ostechnix.txt
Size: 21 Blocks: 8 IO Block: 4096 regular file
Device: 801h/2049d Inode: 4351679 Links: 1
Access: (0664/-rw-rw-r--) Uid: ( 1000/ sk) Gid: ( 1000/ sk)
Access: 2020-11-11 17:54:00.000000000 +0530
Modify: 2020-11-11 17:54:00.000000000 +0530
Change: 2020-11-11 17:56:20.844405239 +0530
Birth: -
Come già affermato, ctime viene aggiornato quando atime e mtime vengono modificati. Se vuoi modificare solo il timestamp ctime, non c'è un flag dedicato in touch
comando. Quindi è necessario modificare manualmente il ctime modificando i metadati del file o gli attributi del file. Ad esempio, assegnerò autorizzazione eseguibile a ostchnix.txt
file con chmod
comando:
$ chmod +x ostechnix.txt
Controlla se ctime viene aggiornato con stat
comando:
$ stat ostechnix.txt
File: ostechnix.txt
Size: 21 Blocks: 8 IO Block: 4096 regular file
Device: 801h/2049d Inode: 4351679 Links: 1
Access: (0775/-rwxrwxr-x) Uid: ( 1000/ sk) Gid: ( 1000/ sk)
Access: 2020-11-11 17:54:00.000000000 +0530
Modify: 2020-11-11 17:54:00.000000000 +0530
Change: 2020-11-11 17:57:21.022720776 +0530
Birth: -
Vedere? Il timestamp ctime è cambiato ma i tempi atime e mtime no. Poiché il file non è né accessibile né modificato. Ho modificato solo l'autorizzazione del file.
Modifica i timestamp dei file visualizzando o accedendo o modificando i file
Come già affermato, il timestamp atime viene modificato quando accediamo al file per la lettura. Prova ad accedere al file per la lettura usando cat
comanda e guarda cosa succede.
$ cat ostechnix.txt
This is a text file.
Ora controlla se il timestamp dell'ora di accesso è aggiornato:
$ stat ostechnix.txt
File: ostechnix.txt
Size: 21 Blocks: 8 IO Block: 4096 regular file
Device: 801h/2049d Inode: 4351679 Links: 1
Access: (0775/-rwxrwxr-x) Uid: ( 1000/ sk) Gid: ( 1000/ sk)
Access: 2020-11-11 18:00:16.005323521 +0530
Modify: 2020-11-11 17:54:00.000000000 +0530
Change: 2020-11-11 17:57:21.022720776 +0530
Birth: -
Vedere? Il valore dell'ora è cambiato ora.
Il mtime viene aggiornato quando aggiungiamo o rimuoviamo dati da un file.
Fammi aggiungere una riga nel ostechnix.txt
file:
$ echo "modify this file" >> ostechnix.txt
Controlla i timestamp del file:
$ stat ostechnix.txt
File: ostechnix.txt
Size: 38 Blocks: 8 IO Block: 4096 regular file
Device: 801h/2049d Inode: 4351679 Links: 1
Access: (0775/-rwxrwxr-x) Uid: ( 1000/ sk) Gid: ( 1000/ sk)
Access: 2020-11-11 18:00:16.005323521 +0530
Modify: 2020-11-11 18:01:49.072771458 +0530
Change: 2020-11-11 18:01:49.072771458 +0530
Birth: -
Poiché il contenuto del file è cambiato, sono cambiati entrambi mtime e ctime.
Modifica timestamp del collegamento simbolico
Per impostazione predefinita, se utilizzi touch
comando su un link simbolico (o collegamento simbolico), cambierà anche i timestamp del file di riferimento.
Se vuoi modificare solo il timestamp di un collegamento simbolico, usa -h
, (--no-dereference
) opzione:
$ touch -h <path-to-symlink>
[Suggerimento bonus] Copia i timestamp da un altro file
Il comando touch ha un'opzione chiamata -r, (--reference=)
che ti consente di copiare timestamp da un file all'altro.
Il comando seguente copierà i timestamp di file1 in file2.
$ touch -r file1.txt file2.txt
Per maggiori dettagli, fare riferimento alle pagine man di stat
e touch
comandi:
$ man stat
$ man touch
Conclusione
In questa guida, abbiamo discusso tre tipi di timestamp dei file Linux, ovvero atime, mtime e ctime, come visualizzare i timestamp dei file usando stat
e ls
comandi e infine come modificare i timestamp dei file con touch
comando. Spero che questo aiuti.