it-swarm-eu.dev

časové razítko, čas modifikace a vytvořený čas souboru

Jen vím, že ls -t a ls -f poskytují různé třídění souborů a podadresářů v adresáři.

  • Jaké jsou rozdíly mezi časovým razítkem, časem modifikace a vytvořeným časem souboru?
  • Jak získat a změnit tyto informace pomocí příkazů?
  • Co se týče informací, které lidé říkají, že soubor je „novější“ než ten druhý?
  • Jaké změny informací nezmění soubor?

Například jsem viděl někoho psát:

Ve výchozím nastavení program rsync hledá pouze to, zda se soubory liší velikostí a časovým razítkem. Nezáleží na tom, který soubor je novější, pokud je jiný, přepíše se. Příznak '--update' můžete předat rsync, což způsobí, že přeskočí soubory v cílovém souboru, pokud jsou novější než soubor ve zdroji, ale pouze za předpokladu, že se jedná o stejný typ souboru. To znamená, že pokud je například zdrojovým souborem normální soubor a cílem je symbolický odkaz, bude cílový soubor přepsán bez ohledu na časové razítko.

Vedlejší poznámka, znamená to, že typ souboru zde znamená pouze běžný soubor a simlink, ne typ jako pdf, jpg, htm, txt atd.?

108
Tim

Existují 3 druhy „časových razítek“:

  • Přístup - poslední čtení souboru
  • Upravit - při poslední úpravě souboru (obsah byl změněn)
  • Změnit - poslední změna metadat souboru (např. Oprávnění)

K zobrazení těchto informací můžete použít stat , který je součástí coreutils.

stat vám ukáže také několik dalších informací, jako je zařízení, inody, odkazy atd.

Nezapomeňte, že tento druh informací velmi závisí na souborovém systému a možnostech připojení. Pokud například připojíte oddíl s volbou noatime, nebudou zapsány žádné informace o přístupu.

Nástroj pro změnu časových razítek by byl touch. Existuje několik argumentů, které rozhodují, které časové razítko se má změnit (např. -A pro přístupový čas, -m pro čas modifikace) a ovlivnit analýzu nového daného časového razítka. Viz man touch pro více informací.

touch se může hodit v kombinaci s cp -u ( "zkopírujte pouze tehdy, když je soubor SOURCE novější než cílový soubor nebo když chybí cílový soubor" ) nebo pro vytvoření prázdné značky soubory.

146
echox

Odpověď echox je platná, ale chci přidat informace týkající se času vytvoření souboru.

Podpora systému souborů

Některé souborové systémy podporují další položku v inodu týkající se doby vytvoření (nebo doby narození). Vím, že ext4 tuto funkci podporuje a také JFS a BTRFS .

Většina nástrojů a API však dosud nebyla aktualizována, aby mohla číst tyto další informace. Takže i když by to mohlo být, není přístupné.

Například na Ubuntu 12.04 LTS získám následující pro soubor, který jsem dnes vytvořil:

$ echo Just another test > /tmp/mytest
$ sleep 3
$ touch /tmp/mytest
$ sleep 2
$ cat /tmp/mytest > /dev/null
$ stat /tmp/mytest 
[...]
Access: 2012-06-05 13:33:44.279774711 +0200
Modify: 2012-06-05 13:33:34.611893317 +0200
Change: 2012-06-05 13:33:34.611893317 +0200
 Birth: -
$ Sudo debugfs -R 'stat /tmp/mytest' /dev/sda1
[...]
 ctime: 0x4fcdee8e:91e30114 -- Tue Jun  5 13:33:34 2012
 atime: 0x4fcdee98:42b417dc -- Tue Jun  5 13:33:44 2012
 mtime: 0x4fcdee8e:91e30114 -- Tue Jun  5 13:33:34 2012
crtime: 0x4fcdee46:01258f1c -- Tue Jun  5 13:32:22 2012
[...]

Můžete vidět, že novější funkce stat má pole narození, i když se zdá, že výstup je nesprávný. A pomocí debugfů můžeme získat informace (crtime, když jsem na systému souborů ext4).

podpora statxu

Nyní existuje od jádra 4.11 nové systémové volání systému statx , kromě lepší podpory systému Y2038 nebo síťových souborových systémů, přináší také několik dalších funkcí, jako je btime nebo čas narození ( čas vytvoření) přístup. Podpora pro ext4 by měla být ve stejném vydání jádra 4.11.

V pozdějších vydáních jádra byly opravy, které přidaly podporu tomuto novému syscall: např. BTRFS a F2FS v jádře 4.13, SMB3 v 4.14, GFS2 v 4.15, NFS v 4.16 atd.

Nadcházející glibc poskytne funkční volání pro dotaz na toto rozhraní (viz Phoronix novinky o podpoře glibc statx ). Můžeme tedy brzy očekávat podporu této funkce v uživatelském prostoru.

38
Huygens