Tento výukový program vysvětluje typy časových razítek souborů Linux a jak zobrazit a změnit časová razítka souboru pomocí touch
příkaz s příklady.
Stručný úvod do časových razítek souborů Linux
V Linuxu a Unixu obecně má každý soubor tři typy časových razítek, jmenovitě atime (čas přístupu), mtime (čas úpravy) a čas c (čas změny). Jak název napovídá, časová razítka se používají ke zjištění, kdy byl soubor zpřístupněn, upraven a změněn.
Časové razítko času přístupu (nebo zkráceně atime) je čas posledního čtení souboru. Například jste mohli otevřít soubor. K souboru mohl přistupovat nějaký jiný program nebo vzdálený počítač. Možná jste přečetli obsah souboru pomocí příkazu (např. cat
příkaz), nebo program (např. gedit, vim atd.). Soubor není upravován ani upravován. Přistupovali jste k němu pouze vy nebo jiný uživatel ze vzdáleného systému.
Časová značka času úpravy (neboli mtime) udává, kdy byl soubor (nebo adresář) naposledy upraven. Jinými slovy, mtime označuje čas, kdy byl obsah souboru změněn. Mohli jste například něco do souboru přidat nebo ze souboru něco odstranit nebo upravit obsah souboru.
Časové razítko času změny (nebo ctime) ukazuje, kdy byl naposledy změněn obsah souboru nebo metadata souboru (tj. atributy souboru, jako je vlastnictví souboru, oprávnění souboru nebo skupina).
Stručně řečeno,
- atime – označuje čas posledního přístupu do souboru pro čtení obsahu.
- mtime – označuje čas poslední úpravy k obsahu souboru.
- ctime – označuje čas poslední změny k obsahu souboru nebo metadatům souboru (vlastník, skupina nebo oprávnění).
Časová razítka mohou být užitečná v různých situacích. Zde je několik případů použití časových razítek:
- Vyhledejte a seřaďte soubory podle času přístupu nebo úpravy.
- Vyhledejte a odstraňte soubory starší než X dní. Užitečné k vyčištění starých souborů na pevném disku.
- Zkontrolujte, kdy byl konfigurační soubor změněn.
- Ověřte, zda byl soubor zpřístupněn.
- Ověřte, zda byl adresář aktualizován.
- Najděte soubory starší nebo novější než X dní.
Zobrazte časová razítka souborů Linux pomocí stat
a ls
příkazy
Časová razítka souborů můžeme zobrazit v Linuxu pomocí stat
příkaz. Podle manuálových stránek stat
příkaz zobrazí stav souboru nebo systému souborů v systému Linux. Příkaz stat je součástí GNU Coreutils
, takže se neobtěžujme jeho instalací.
Nyní se podívejme na časová razítka textového souboru s názvem ostechnix.txt
pomocí stat
příkaz:
$ stat ostechnix.txt
Ukázkový výstup:
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: -
Poslední tři řádky ve výše uvedeném výstupu zobrazují čas přístupu, čas změny a časové razítko změny. Když právě vytvoříme nový soubor, všechna časová razítka jsou stejná.
Všimli jste si řádku "Birth:
" na konci výstupu? Označuje časové razítko vytvoření souboru. Standard POSIX nedefinuje časové razítko pro vytvoření souboru. Některé systémy souborů (např. ext4, JFS, Btrfs) ukládají tuto hodnotu, ale v současné době neexistuje API jádra Linuxu místo časového razítka v řádku "Narození:" tedy vidíme pomlčku "-".
Časová razítka atime, mtime a ctime můžete také získat jednotlivě pomocí ls
příkaz.
Chcete-li zobrazit časové razítko času modifikace (mtime), použijte ls -l
příkaz:
$ ls -l ostechnix.txt
-rw-rw-r-- 1 sk sk 21 Nov 11 17:31 ostechnix.txt
Chcete-li zobrazit časové razítko času změny (ctime), spusťte ls -lc
příkaz:
$ ls -lc ostechnix.txt
-rw-rw-r-- 1 sk sk 21 Nov 11 17:31 ostechnix.txt
Zde c
příznak se používá k zobrazení času poslední změny metadat souboru nebo atributů souboru.
Časové razítko času přístupu (atime) zobrazíte pomocí ls -lu
příkaz:
$ ls -lu ostechnix.txt
-rw-rw-r-- 1 sk sk 21 Nov 11 17:31 ostechnix.txt
Zde u
flag zobrazuje čas posledního přístupu k souboru.
Změňte časová razítka souborů Linux pomocí touch
příkaz
touch
příkaz se používá ke změně časových razítek souborů a také k vytváření nových prázdných souborů v Linuxu. Stejně jako stat
touch
příkaz je také součástí GNU coreutils
, takže jej také nemusíte instalovat.
Před změnou časových razítek získáme aktuální časová razítka souboru s názvem ostechnix.txt
pro informaci:
$ 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: -
Jak můžete vidět ve výše uvedeném výstupu, soubor ostechnix.txt
byl přístupný. upraveno a změněno ve stejné datum a čas, tj. 11. listopadu 2020 v 17:31:01.
Změňme časová razítka tohoto souboru pomocí touch
příkaz jako níže:
$ touch ostechnix.txt
Výše uvedený příkaz změní všechna časová razítka (tj. atime, mtime a ctime) na aktuální čas vašeho počítače.
Nyní se podívejme na časová razítka souboru s stat
příkaz:
$ 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: -
Vidět? Všechna časová razítka byla změněna na aktuální čas mého systému, tj. 2020-11-10 17:51:02
.
Je také možné měnit jednotlivá časová razítka samostatně. Například můžete změnit pouze čas přístupu (atime) pomocí -a
příznak:
$ touch -a ostechnix.txt
Výše uvedený příkaz nastaví časové razítko přístupu na aktuální čas.
Nyní zkontrolujte časové razítko souboru ostechnix.txt
soubor s stat
příkaz:
$ 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: -
Jak vidíte na výše uvedeném výstupu, čas přístupu se změní na aktuální čas. Aktualizuje se také čas změny.
Chcete-li změnit pouze časové razítko změny (mtime), použijte -m
příznak:
$ touch -m ostechnix.txt
Ověřte, zda se mtime změnil pomocí stat
příkaz:
$ 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: -
Nyní se časové značky mtime a ctime změnily, zatímco atime zůstalo tak, jak je.
Jak jste si mohli všimnout, když změníme čas přístupu nebo čas úpravy, aktualizuje se také čas ctime.
Pokud chcete změnit časové razítko atime i mtime současně, použijte -d
možnost.
$ touch -d "2020-11-11 17:50:01" ostechnix.txt
Pomocí stat
ověřte, zda byla časová razítka atime a mtime změněna příkaz:
$ 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: -
Nyní jsme nastavili čas přístupu a čas úpravy na konkrétní čas, tj. 2020-11-11 17:50:01
. A časové razítko ctime bylo také aktualizováno na aktuální čas.
Je také možné použít konkrétní časové razítko místo aktuálního času pomocí -t
vlajka také:
$ touch -t 2011111754 ostechnix.txt
Tento příkaz nastaví časová razítka atime a mtime na 2020-11-11 17:54:00
. Ověřte jej pomocí stat
příkaz jako níže:
$ 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: -
Jak již bylo řečeno, ctime se aktualizuje, když se změní atime a mtime. Pokud chcete změnit pouze časové razítko ctime, v touch
není žádný vyhrazený příznak příkaz. Musíte tedy ručně změnit ctime úpravou metadat souboru nebo atributů souboru. Například přidělím spustitelné oprávnění do ostchnix.txt
soubor s chmod
příkaz:
$ chmod +x ostechnix.txt
Zkontrolujte, zda se ctime aktualizuje pomocí stat
příkaz:
$ 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: -
Vidět? Časové razítko ctime se změnilo, ale časy atime a mtime se nezměnily. Protože k souboru není ani přístup, nezměnil se. Změnil jsem pouze oprávnění k souboru.
Změňte časová razítka souborů zobrazením, přístupem nebo úpravou souborů
Jak již bylo řečeno, časové razítko atime se změní, když přistoupíme k souboru pro čtení. Zkuste získat přístup k souboru pro čtení pomocí cat
příkaz a uvidíte, co se stane.
$ cat ostechnix.txt
This is a text file.
Nyní zkontrolujte, zda je aktualizováno časové razítko přístupu:
$ 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: -
Vidět? Hodnota atime se nyní změnila.
Čas mtime se aktualizuje, když přidáme nebo odebereme data ze souboru.
Dovolte mi přidat řádek do ostechnix.txt
soubor:
$ echo "modify this file" >> ostechnix.txt
Zkontrolujte časová razítka souborů:
$ 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: -
Od té doby, co se změnil obsah souboru, se změnily jeho mtime i ctime.
Změna časových razítek symbolických odkazů
Ve výchozím nastavení, pokud používáte touch
příkaz na symbolickém odkazu (nebo symbolický odkaz), změní také časová razítka odkazovaného souboru.
Pokud chcete změnit pouze časové razítko symbolického odkazu, použijte -h
, (--no-dereference
) možnost:
$ touch -h <path-to-symlink>
[Bonusový tip] Zkopírujte časová razítka z jiného souboru
Dotykový příkaz má volbu nazvanou -r, (--reference=)
který umožňuje kopírovat časová razítka z jednoho souboru do druhého.
Následující příkaz zkopíruje časová razítka souboru1 do souboru2.
$ touch -r file1.txt file2.txt
Další podrobnosti najdete v manuálových stránkách stat
a touch
příkazy:
$ man stat
$ man touch
Závěr
V této příručce jsme probrali tři typy časových razítek souborů Linux, tj. atime, mtime a ctime, jak zobrazit časová razítka souborů pomocí stat
a ls
příkazy a nakonec jak změnit časová razítka souborů pomocí touch
příkaz. Doufám, že to pomůže.