V Linuxu má každý soubor nějaká časová razítka, která poskytují některé zásadní analýzy o tom, kdy byl soubor nebo jeho atributy upraveny nebo změněny. Podívejme se na tato časová razítka podrobně.
Co jsou časová razítka Linuxu?
Každý soubor v Linuxu má obvykle tato tři časová razítka:
- atime – doba přístupu
- mtime – úprava času
- ctime – změnit čas
čas
atime znamená přístupový čas. Toto časové razítko vám řekne, kdy byl soubor naposledy otevřen. Přístupem to znamená, zda jste ke čtení nebo zobrazení obsahu souboru použili cat, vim, less nebo nějaký jiný nástroj.
mtime
mtime znamená upravit čas. Toto časové razítko vám řekne, kdy byl soubor naposledy změněn. Modifikovat znamená, že obsah souboru byl změněn úpravou souboru.
ctime
ctime znamená čas změny stavu. Toto časové razítko vám řekne, kdy byla naposledy změněna vlastnost a metadata souboru. Metadata zahrnují oprávnění k souboru, vlastnictví, název a umístění souboru.
Jak zobrazit časová razítka souboru?
K zobrazení všech časových razítek souboru můžete použít příkaz stat. Použití příkazu stat je velmi jednoduché. Stačí s ním zadat název souboru.
stat <filename>
Výstup bude vypadat takto:
stat abhi.txt
File: abhi.txt
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: 10305h/66309d Inode: 11936465 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 1000/abhishek) Gid: ( 1000/abhishek)
Access: 2018-08-30 12:19:54.262153704 +0530
Modify: 2018-08-30 12:19:54.262153704 +0530
Change: 2018-08-30 12:19:54.262153704 +0530
Birth: -
Ve výše uvedeném výstupu můžete vidět všechny tři časové značky (přístup, úprava a změna). Všechna tři časová razítka jsou zde stejná, protože jsem právě vytvořil tento prázdný soubor dotykovým příkazem.
Nyní upravíme tato časová razítka.
Pokud ke čtení souboru použiji příkaz less, změní se pouze doba přístupu, protože obsah a metadata souboru zůstávají stejné.
$ less abhi.txt
$ stat abhi.txt
File: abhi.txt
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: 10305h/66309d Inode: 11936465 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 1000/abhishek) Gid: ( 1000/abhishek)
Access: 2018-08-30 12:25:13.794471295 +0530
Modify: 2018-08-30 12:19:54.262153704 +0530
Change: 2018-08-30 12:19:54.262153704 +0530
Birth: -
Nyní změňme čas úpravy. K přidání nového textu do tohoto souboru použiji příkaz cat. Tím zabráníte změně doby přístupu.
$ cat >> abhi.txt
demo text
^C
$ stat abhi.txt
File: abhi.txt
Size: 10 Blocks: 8 IO Block: 4096 regular file
Device: 10305h/66309d Inode: 11936465 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 1000/abhishek) Gid: ( 1000/abhishek)
Access: 2018-08-30 12:25:13.794471295 +0530
Modify: 2018-08-30 12:32:34.751320967 +0530
Change: 2018-08-30 12:32:34.751320967 +0530
Birth: -
Všimli jste si něčeho divného? Upravili jste soubor a očekávali, že se změní mtime, ale také se změnilo ctime.
Pamatujte, že ctime se vždy mění s mtime. Je to proto, že zatímco mtime je pod kontrolou uživatele, ctime je řízeno systémem. Představuje, kdy byly naposledy změněny datové bloky nebo metadata souboru. Pokud soubor upravíte, změní se datové bloky a tím se změní i ctime.
Samotné ctime můžete změnit úpravou oprávnění k souboru pomocí příkazů chmod nebo chgrp, ale nemůžete upravit mtime bez úpravy ctime.
Také nemůžete změnit ctime v minulosti normálními prostředky. Je to druh bezpečnostní funkce, protože vám řekne, kdy byl soubor naposledy změněn. I když někdo upraví mtime a nastaví jej v minulosti pro škodlivé účely, ctime bude indikovat skutečný čas, kdy byl mtime změněn.
Pamatujte si :ctime bude vždy upraveno změnou mtime.
Jaké jsou použití časových razítek souborů?
Hodně to pomáhá při analýze. Může nastat řada situací, kdy budete potřebovat odkazovat na časová razítka souboru. Můžete například vidět, zda byl soubor nedávno změněn nebo ne v době, kdy měl být změněn.
Jedním z mých oblíbených použití bylo vyhledání souborů protokolu aplikace s mtime. Spusťte aplikaci a přejděte do nadřazeného adresáře aplikace a vyhledejte soubory, které byly v posledních několika minutách upraveny.
Již jsem vám ukázal výše, že může také pomoci při analýze, zda někdo k souborům přistupoval nebo je úmyslně upravil. Časová razítka hrají v takových situacích důležitou roli.
Jak zjistit, kdy byl soubor původně vytvořen?
Všimli jste si posledního řádku výstupu příkazu stat? Je tam napsáno ‚Narození‘. Můžete hádat, že to představuje časovou mapu, kdy se soubor ‚narodil‘ (nebo přesněji vytvořen).
Ve skutečnosti existuje ještě jedno časové razítko nazvané čas vytvoření (cr). Ne všechny souborové systémy toto časové razítko podporují. Ext4 je jeden z populárních linuxových souborových systémů a přestože podporuje časové razítko vytvoření, příkaz stat to v současnosti nedokáže zobrazit. Možná budoucí verze příkazu stat budou zobrazovat časové razítko vytvoření v sekci Narození.