GNU/Linux >> Znalost Linux >  >> Linux

Kdy byl soubor vytvořen?

Tato otázka zde již obsahuje odpovědi :Jak zjistit datum vytvoření souboru?

(7 odpovědí)
Uzavřeno před 7 lety.

Jak mohu zjistit, kdy byl soubor vytvořen. Podíval jsem se na manuálovou stránku

ls -lc je pro poslední úpravu stavu souboru

ls -lu pro přístupovou dobu

ls -l není přesně uvedeno, kdy, naposledy změněno?

Zkoušel jsem je, ale nedávají mi čas na vytvoření souboru.

Přijatá odpověď:

V OS/X nebo FreeBSD je to volba -U. Linux nyní také ukládá čas narození/vytvoření na většině svých nativních souborových systémů, ale zatím neexistuje žádné API, které by jej načetlo (úprava 2018 :od jádra 4.11 nyní existuje statx() systémové volání a od glibc 2.28 pro něj libc wrapper a od coreutils 8.31 GNU stat může jej zobrazit a (úpravy 2021 ) od verze 8.32 GNU ls může jej zobrazit pomocí --time=birth ).

Na souborových systémech ext4 jej však můžete získat pomocí debugfs:

$ sudo debugfs /dev/some/fs
stat /some/file
[...]
crtime: 0x53208d7a:9045625c -- Wed Mar 12 16:38:18 2014
[...]

(kde /some/file je cesta v rámci tohoto souborového systému)

Pro souborové systémy NTFS a za předpokladu, že k připojení používáte ntfs-3g, viz Jak získám datum vytvoření souboru na logickém svazku NTFS?

Pokud máte dostatečně aktuální systém Linux, můžete použít xfs_io 's statx dílčí příkaz k vyvolání nového statx() systémové volání a zjistěte čas narození:

$ TZ=UTC0 xfs_io -c 'statx -v' /some/file
[...]
stat.btime = Thu Feb  7 17:11:20 2019
[...]

(zde pomocí času UTC s TZ=UTC0 jinak by bylo datum nejednoznačné, protože offset UTC není na výstupu). Nebo pomocí statx -r což vám dává nanosekundovou část a snáze analyzovatelný čas:

$ xfs_io -c 'statx -r' /some/file
[...]
stat.btime.tv_sec = 1549559480
stat.btime.tv_nsec = 964691587
[...]

S GNU stat 8.31 nebo novější na systémech s glibc 2.28 nebo novějším a jádrem 4.11 nebo novějším:

$ stat /some/file | grep Birth:
 Birth: 2018-05-24 16:27:28.415875403 +0100
$ stat -c '%.9W %w' /some/file
1527175648.415875403 2018-05-24 16:27:28.415875403 +0100

S GNU ls 8.32 nebo novější na systémech s glibc 2.28 nebo novějším a jádrem 4.11 nebo novějším:

$ ls -l --time=birth --full-time /some/file
-rw-r--r-- 1 stephane stephane 2333836 2018-05-24 16:27:28.415875403 +0100 /some/file

Unix tradičně neukládal čas vytvoření.

Všimněte si, že tato hodnota má možná menší význam, než si myslíte.

Čas úpravy odráží stáří dat v daném souboru, dobu přístupu při posledním přístupu čas změny inodu je velmi užitečné například pro zálohovací software, protože nevíte, že by se tento soubor od té doby nic nezměnil (s výjimkou jeho úplné cesty, pro kterou se můžete podívat na ctime jeho složek adresáře).

Související:problém se souborem bundleconfig?

čas vytvoření když se vytvoří inode (dobře měl počet odkazů od 0 do 1, tento inode mohl být přidělen a odstraněn v předchozím životě), neodráží stáří jakýchkoli dat spojených s tímto souborem (data jsou zapsaný po vytvoření souboru), neříká nám, zda soubor podle této cesty vznikl v té době (soubor, na který se díváme, mohl být vytvořen s jinou cestou a později tam propojen nebo přesunut).


Linux
  1. Získat čas vytvoření/vytvoření souboru??

  2. Vyloučení adresáře při vytváření souboru .tar.gz

  3. mkdir -p selže, když adresář existuje

  1. dočasné umístění souboru při použití tmpfile() v C

  2. Doba přístupu k souboru se v ubuntu 12.04 neaktualizuje

  3. Určení, kdy bylo vytvořeno aktuálně otevřené připojení TCP?

  1. Kdy jste naposledy použili Windows?

  2. Get Age Of Given File?

  3. Kódování souboru ZIP?