znacznik czasu, czas modyfikacji i czas utworzenia pliku


105

Po prostu to wiem ls -ti ls -fpodaję różne sortowanie plików i podkatalogów w katalogu.

  • Jakie są różnice między datownikiem, czasem modyfikacji i czasem utworzenia pliku?
  • Jak uzyskać i zmienić tego rodzaju informacje za pomocą poleceń?
  • Pod względem jakiego rodzaju informacji ludzie twierdzą, że plik jest „nowszy” niż inny?
  • Jakie zmiany informacji nie spowodują, że plik będzie inny?

Na przykład widziałem, że ktoś napisał:

Domyślnie program rsync sprawdza tylko, czy pliki różnią się rozmiarem i znacznikiem czasu. Nie ma znaczenia, który plik jest nowszy, jeśli jest inny, zostaje nadpisany. Możesz przekazać flagę „--update” do rsync, co spowoduje, że pominie pliki w miejscu docelowym, jeśli są one nowsze niż plik źródłowy, ale tylko o ile są tego samego typu. Oznacza to, że jeśli na przykład plik źródłowy jest plikiem zwykłym, a miejscem docelowym jest dowiązanie symboliczne, plik docelowy zostanie zastąpiony, niezależnie od znacznika czasu.

Na marginesie, czy ten typ pliku oznacza tylko zwykły plik i simlink, a nie taki typ jak pdf, jpg, htm, txt itp.?


Odpowiedzi:


138

Istnieją 3 rodzaje „znaczników czasu”:

  • Dostęp - ostatni raz plik został odczytany
  • Modyfikuj - ostatnia modyfikacja pliku (treść została zmodyfikowana)
  • Zmień - ostatnia zmiana metadanych pliku (np. Uprawnienia)

Aby wyświetlić te informacje, możesz użyć, statktóra jest częścią coreutils.

stat pokaże ci również więcej informacji, takich jak urządzenie, i-węzły, linki itp.

Pamiętaj, że tego rodzaju informacje w dużym stopniu zależą od systemu plików i opcji montowania. Na przykład, jeśli zamontujesz partycję z noatimeopcją, żadne informacje o dostępie nie zostaną zapisane.

Byłoby narzędziem do zmiany znaczników czasu touch. Istnieje kilka argumentów, które decydują o tym, który znacznik czasu należy zmienić (np. -A dla czasu dostępu, -m dla czasu modyfikacji) i wpływać na parsowanie nowego określonego znacznika czasu. Zobacz man touchpo więcej szczegółów.

touchmoże się przydać w połączeniu z cp -u( „kopiuj tylko wtedy, gdy plik SOURCE jest nowszy niż plik docelowy lub gdy brakuje pliku docelowego” ) lub do tworzenia pustych plików znaczników.


1
Dzięki! W przypadku polecenia rsync w polu „nie ma znaczenia, który plik jest nowszy”, pod względem jakiego rodzaju znacznika czasu oznacza „nowszy”. Na marginesie, czy typ pliku, o który rsync dba, oznacza tylko zwykły plik i simlink, a nie taki typ jak pdf, jpg, htm, txt itp.?
Tim

2
Ogólnie rzecz biorąc, odniesieniem do czasu pliku jest „zmodyfikowany” znacznik czasu. Na przykład z tego, co widzisz ls -l. Typ pliku odnosi się do pliku kontra dowiązanie symboliczne (lub innych typów plików, takich jak katalogi lub urządzenia). Nie jaki jest typ danych w pliku (tekst vs. JPEG, itp.).
Seth L

2
@Tim W tym kontekście jest to zmodyfikowany znacznik czasu; rsync mówi, że decydując, czy należy wykonać kopię zapasową pliku, nie sprawdza, czy plik źródłowy został zmodyfikowany później niż istniejąca kopia zapasowa (co jest wspólne z programami do tworzenia kopii zapasowych); po prostu sprawdza, czy pliki mają różne rozmiary lub różne czasy modyfikacji, i tworzy kopie zapasowe, jeśli tak
Michael Mrozek

1
A skąd mam wiedzieć, kiedy plik został utworzony pierwszy? Czy te informacje są gdzieś przechowywane lub zostały utracone w aktualizacjach? żeby powiedzieć, jak długo plik istnieje ...?
xyz

1
Strona podręcznika stat (2) opisuje bardziej szczegółowo, kiedy te znaczniki czasu zostaną zmienione.
Cristian Ciupitu

35

Odpowiedź echox jest poprawna, ale chcę dodać informacje dotyczące czasu utworzenia pliku.

Obsługa systemu plików

Niektóre systemy plików obsługują dodatkowy wpis w i-węźle dotyczący czasu utworzenia (lub czasu urodzenia). Wiem, że ext4 obsługuje tę funkcję, a także JFS i BTRFS .

Jednak większość narzędzi i interfejsu API nie została jeszcze zaktualizowana w celu odczytania tych dodatkowych informacji. Więc chociaż może tam być, nie jest dostępna.

Na przykład w systemie Ubuntu 12.04 LTS otrzymuję następujące informacje o utworzonym dzisiaj pliku:

$ 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
[...]

Widać, że nowsza funkcja statystyki ma pole urodzenia, choć dane wyjściowe wydają się niepoprawne. Za pomocą debugfs możemy uzyskać informacje (crtime jak na systemie plików ext4).

obsługa statx

Od czasu jądra 4.11 pojawiło się nowe wywołanie systemowe statx, oprócz lepszej obsługi Y2038 lub sieciowych systemów plików, oferuje także kilka dodatkowych funkcji, takich jak dostęp btimelub czas urodzenia (czas utworzenia). Obsługa ext4 powinna być w tej samej wersji jądra 4.11.

W późniejszych wersjach jądra pojawiły się łatki, które dodają obsługę tego nowego syscall: np. BTRFS i F2FS w jądrze 4.13, SMB3 w 4.14, GFS2 w 4.15, NFS w 4.16 itd.

Nadchodzący glibc zapewni wywołanie funkcji do zapytania tego interfejsu (zobacz Phoronix news na temat obsługi statx glibc ). Dlatego wkrótce możemy spodziewać się obsługi tej funkcji w przestrzeni użytkownika.


Czy wiesz, czy btime pozostaje nienaruszony, gdy pliki z systemu Windows (czas tworzenia) są przenoszone na ext4 i odwrotnie, np. Mtime?
paradroid

@paradroid przepraszam, nie znam odpowiedzi. Jeśli masz na myśli pod Linuksem podczas kopiowania pliku z NTFS na ext4, trzeba by sprawdzić sterownik NTFS, jeśli obsługuje on czas tworzenia. Jeśli masz na myśli pod Windows, należałoby poszukać sterownika ext4 dla Windows.
Huygens
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.