Vysvětlení časových razítek souborů Linux: atime, mtime a ctime

Kdy „změněno“ neznamená „upraveno“? Když se bavíme o časových razítkách souborů Linux. V této příručce vysvětlíme, jak je systém aktualizuje a jak je můžete sami změnit.

Rozdíl mezi atime, mtime a ctime

Každý soubor Linuxu má tři časová razítka: časové razítko přístupu (atime), změněné časové razítko (mtime) a změněné časové razítko (ctime).

Časové razítko přístupu je čas posledního čtení souboru. To znamená, že někdo použil program k zobrazení obsahu souboru nebo načtení některých hodnot z něj. Do souboru nebylo nic upraveno ani přidáno. Data byla odkazována, ale nezměněna.

Upravené časové razítko označuje, kdy byl obsah souboru naposledy upraven. Program nebo proces soubor upravil nebo s ním manipuloval. „Upraveno“ znamená, že něco uvnitř souboru bylo změněno nebo odstraněno nebo byla přidána nová data.

Změněná časová razítka se nevztahují na změny provedené v obsahu souboru. Je to spíše čas, kdy byla změněna metadata související se souborem. Změny oprávnění k souboru například aktualizují změněné časové razítko.

Standardní souborový systém ext4 Linux také alokuje prostor pro časové razítko vytvoření souboru ve svých vnitřních strukturách souborového systému, ale to ještě nebylo implementováno. Někdy je toto časové razítko vyplněno, ale nemůžete se spolehnout na hodnoty v něm.

Anatomie časového razítka

Časová razítka Linuxu obsahují číslo spíše než datum a čas. Toto číslo je počet sekund od Unixová epocha, což byla půlnoc (00:00:00) 1. ledna 1970 v Světový koordinovaný čas (UTC). Přestupné sekundy jsou v časových razítkách Linuxu ignorovány, takže nejsou analogické s reálným časem.

Když Linux potřebuje zobrazit časové razítko, převede počet sekund na datum a čas. To usnadňuje lidem pochopení. Umístění a časové pásmo, ve kterém se počítač prohlížející soubor nachází, vede k převodu počtu sekund na datum a čas. Také zajišťuje, že měsíc je ve správném jazyce.

Kolik sekund tedy může být uloženo v časovém razítku? Hodně — 2 147 483 647, abych byl přesný. To je velké číslo, ale stačí to? Pokud to přidáte do epochy Unixu a poté to převedete na datum a čas, dostanete úterý 19. ledna 2038 v 03:14:07. Do té doby však budeme potřebovat jiné schéma pro časová razítka.

  Jak nainstalovat SuperTuxKart na Linux

Zobrazení časových razítek

Když použijete volbu -l (dlouhý výpis) s ls, jak je uvedeno níže, můžete vidět upravené časové razítko:

ls -l dp.c

Pokud chcete zobrazit časové razítko přístupu, použijte volbu -lu (čas přístupu) takto:

ls -lu dp.c

A konečně, abyste viděli časové razítko změny, můžete použít volbu -lc (čas změny); zadejte následující:

ls -lc dp.c

The

Výše uvedená časová razítka ukazují, že obsah souboru byl naposledy upraven 21. dubna 2019. Přístupová a změněná časová razítka jsou totožná, protože soubor byl zkopírován z jiného počítače na tento 20. ledna 2020 a obě časová razítka byla v té době aktualizována.

Na zobrazit všechna časová razítka současně, použijte příkaz stat následovně:

stat dp.c

The

Časová pásma jsou uvedena ve spodní části displeje. Jak vidíte, mají velmi přesnou složku ve zlomcích sekund. Na konci každého časového razítka také uvidíte -0500 nebo -0400 .

Toto jsou posuny časových pásem. Systém souborů zaznamenává časová razítka v UTC a převádí je na místní časové pásmo, když je zobrazí statistika. Počítač, který jsme použili k průzkumu tohoto článku, je nakonfigurován, jako by se nacházel v zóně východního standardního času (EST) v USA

Toto časové pásmo je pět hodin po UTC, když je v platnosti EST. Je to však čtyři hodiny po UTC, když je v platnosti východní letní čas (EDT). V dubnu 2019, kdy došlo ke změně upraveného časového razítka, bylo v platnosti EDT. Proto mají dvě časová razítka pětihodinový posun, ale upravená má čtyřhodinový posun.

Posuny a časová pásma nejsou nikde uloženy. Není zde ani inode, ani prostor souborového systému vyhrazený pro uložení těchto hodnot. Musíte je vypočítat za běhu pomocí časového razítka (který je vždy v čase UTC), místního časového pásma počítače, na kterém se soubor zobrazuje, a toho, zda byl platný DST.

Vidíte také časové razítko „Narození“, které je vyhrazeno pro datum vytvoření souboru. Toto není implementováno a místo časového razítka vidíte pomlčku „-“.

Změna časových razítek

Pokud chcete, můžete změnit časová razítka v souboru. Pomocí dotykového příkazu můžete změnit přístupová nebo upravená časová razítka, nebo oboje:

touch -a dp.c

Chcete-li nastavit nové časové razítko přístupu, použijte volbu -a (čas přístupu). Tento příkaz nastaví časové razítko přístupu na aktuální čas počítače:

stat dp.c

The

Časové razítko přístupu se podle očekávání změnilo. Změněné časové razítko však bylo také aktualizováno; to je normální.

  Dívejte se na hvězdy na svém počítači se systémem Linux se Stellarium

Chcete-li změnit upravené časové razítko, můžete použít volbu -m (upravený čas):

touch -m dp.c
stat dp.c

The

Tentokrát došlo k aktualizaci upravených a změněných časových razítek.

Můžete použít volbu -d (datum), pokud chcete změnit přístupová i změněná časová razítka současně. Můžete také zadat čas a datum – nejste omezeni změnou časových razítek na současnost.

K nastavení přístupových a upravených časových razítek na 15. ledna 2020 na 10:30:45 použijeme následující příkaz:

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

Nyní jsme nastavili přístupová a upravená časová razítka na datum v minulosti. Změněné časové razítko bylo také aktualizováno na aktuální čas počítače.

Můžete také použít volbu -r (odkaz), jak je uvedeno níže, pokud chcete nastavit časová razítka jednoho souboru na hodnoty časového razítka jiného:

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

The

A pak jsme skoro tam, kde jsme začali, se směsí časových razítek -0400 a -0500.

Udělejme něco, co ovlivní pouze změněné časové razítko. K vytvoření spustitelného souboru použijeme příkaz chmod provádět oprávnění pro všechny uživatele:

chmod +x dp
stat dp

The

Změněné časové razítko bylo jediné, které se aktualizovalo. Důvodem je to, že samotný soubor nebyl změněn – nebyl přístupný ani upraven. Metadata o souboru však byla změněna.

Jak systém souborů aktualizuje časová razítka

Když je souborový systém připojen, existují možnosti, které můžete použít k určení, jak má tento souborový systém fungovat nebo jak s ním zacházet. Ty jsou uloženy v souboru /etc/fstab, který se čte a zpracovává při spouštění. Můžete také nastavit možnosti diktovat schéma, které by měli používat k aktualizaci časového razítka přístupu.

Níže jsou uvedeny některé z nejběžnějších možností:

strictatime (strict atime): Tato možnost aktualizuje přístupové časové razítko souborů pokaždé, když k nim přistoupíte. S tímto přístupem je spojena režie, ale některé servery mohou z tohoto schématu těžit. Na stolním nebo přenosném počítači má malou hodnotu.
noatime (no atime): Tato možnost plně zakáže aktualizaci časových razítek přístupu pro soubory a adresáře. Upravená časová razítka se však budou stále aktualizovat.
nodiratime (no dir atime): Tato volba povolí aktualizaci časových razítek pro soubory, ale zakáže ji pro adresáře.
relatime (relativní čas): Tato možnost aktualizuje přístupové časové razítko pouze v případě, že bylo starší než 24 hodin nebo bylo předchozí starší než aktuálně upravené nebo změněné časové razítko. To vytváří dobrou rovnováhu mezi časovými razítky, které se aktualizují příliš často, nebo se neaktualizují vůbec.

  Jak nastavit Linux Steam Machine bez Steam OS

Podívejme se na soubor /etc/fstab pro tento počítač a podívejme se, jaké možnosti jsou nastaveny:

less /etc/fstab

The

Zobrazí se nám soubor /etc/fstab, jak je znázorněno níže.

The

Zde je obsah souboru bez obalu:

# /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

Existují pouze dva záznamy a jeden z nich je odkládací soubor, který můžeme ignorovat. Druhý se připojuje do kořenového adresáře souborového systému ( / ) a v době instalace byl na zařízení /dev/sda1. To je první oddíl na prvním pevném disku a náhodou obsahuje souborový systém ext4.

Jediná možnost, která mu byla předána, je errors=remount-ro, která říká operačnímu systému, aby znovu připojil tento souborový systém jako pouze pro čtení, pokud při pokusu o připojení jako souborový systém pro čtení a zápis dojde k chybám.

Není zde tedy žádná zmínka o tom, jak bude naloženo s časovým razítkem přístupu. Pojďme se ponořit hlouběji a podívat se, co nám může říci /proc/mounts. Výstup z /proc/mounts převedeme přes grep. Náš vyhledávací řetězec bude „sda“, identifikátor pevného disku.

Zadáme následující:

cat /proc/mounts | grep "sda"

Nyní vidíme následující možnosti:

rw: Systém souborů bude připojen jako systém souborů pro čtení a zápis.
relatime: Systém souborů použije schéma „relativního času“ k aktualizaci časových razítek přístupu.

Odkud to pochází? Schéma relativního času se používá v následujících situacích:

Při použití výchozí volby /etc/fstab.
Když je použita volba relatime /etc/fstab.
Pokud v /etc/fstab nejsou použity žádné možnosti časových razítek přístupu a používáte linuxové jádro 2.6.30 nebo novější.

Náš záznam /etc/fstab pro souborový systém ext4 neurčoval žádné možnosti aktualizace časového razítka přístupu, takže Linux udělal rozumnou volbu a použil relatime.

Časová razítka jsou důležitá

Časová razítka nám poskytují snadný způsob, jak zjistit, kdy byl soubor zpřístupněn, upraven nebo změněn. Ale co je důležitější, poskytují způsob, jak zálohovat a synchronizovat software, aby bylo možné určit, které soubory je třeba zálohovat.

Schopnost manipulovat s časovými razítky se ukáže jako užitečná, kdykoli potřebujete násilně přesvědčit program, aby zahrnul nebo ignoroval soubor nebo sadu souborů.