Od dawna Linux nie zawracał sobie głowy datami tworzenia plików, ponieważ żaden z powszechnie używanych systemów plików nie obsługiwał ich. Jednak obecnie 2 powszechnie stosowane systemy plików (NTFS i ext4) rejestrują daty utworzenia plików.
stat
Polecenia, jednak nadal wyprowadza Birth: -
na systemie plików ext4, choć widzimy, że ext4 został zapisany plik data utworzenia użyciu debugfs -R 'stat <inode_number>' /dev/file_device
.
Kiedy zastanowiłem się, dlaczego tak jest, zauważyłem, że ktoś już niedawno zgłosił raport o błędzie, a odpowiedź prowadzi do problemu nadrzędnego, który po prostu stwierdza: „Obecnie nie ma interfejsu jądra systemu Linux, aby uzyskać tę informację [plik Data utworzenia]". Wydaje mi się niezwykłe, że tak jest nadal , ponieważ ludzie prosili o stat
wyświetlanie tych informacji od lat (i stat
generują Birth
pole, chociaż najwyraźniej jeszcze go nie obsługuje! Czy dodali go w oczekiwaniu?)
Czy nadal jest prawdą, że obecnie nie ma interfejsu jądra systemu Linux, aby uzyskać datę utworzenia pliku? Czy jest jakiś plan, aby to kiedykolwiek wdrożyć?
źródło
debugfs
.ZFS
rejestruje również czas utworzenia pliku i umożliwia ich odzyskanie za pomocą rozszerzonych atrybutów.Odpowiedzi:
EDYCJA: Dobra wiadomość,
statx()
została połączona, więc powinna być dostępna w wersji 4.11.Praca xstat (), obecnie statx (), została poprawiona w 2016 roku.
Tym razem proces ten był nieco bardziej zdyscyplinowany (mniej jazdy rowerem, zgoda na odrzucenie kontrowersyjnych atrybutów, ponieważ zawsze można je później dodać). Niestety wciąż istniały zastrzeżenia do dokładnego interfejsu i nie widziałem żadnych nowych odniesień.
źródło
Z tego, co mogę powiedzieć (przepraszam, kilka linków, pamięci i googlage, nic spójnego, by wymienić je tutaj jako odniesienie), nigdy nie było tak, ponieważ systemy podkreślające nie obsługiwały atrybutów czasu tworzenia, ale ponieważ żaden z nich nie był w stanie nawet zgadzam się, że była to przydatna funkcja.
Zobacz http://www.pathname.com/fhs/pub/fhs-2.3.html
POSIX określa trzy znaczniki czasu. Żaden z nich nie jest czasem stworzenia.
Jeśli dobrze pamiętam, argument był następujący:
Teraz dużo z tego to pamięć i czytanie starych list mailingowych. Tak naprawdę nie zajmowałem centralnych argumentów. Byłem na liście mailingowej z powodu pracy poza sesją w grubym sterowniku dla wbudowanego systemu Linux. Wspominam o tym, ponieważ z pewnością jest więcej autorytatywnych źródeł niż moja pamięć o czymś, na czym mi tylko zależało.
Pamiętam, że wielką rzeczą było połączenie faktu, że nikt nie mógł wymyślić dobrego przypadku użycia, nikt nie mógł zgodzić się, jak obsłużyć pole dla pozostałych 40 powszechnie używanych systemów plików, które nie obsługują czasu tworzenia, a nawet wymyślenie nazwy pola zamieniło się w masową debatę.
źródło
debugfs
odczyt pola z obrazu dysku nie jest zbyt dużym interfejsem i i tak będzie wymagało uprzywilejowanego dostępu.Czas narodzin jest w kilku natywnych systemach plików Linuksa, nie tylko ext4.
Od wersji 4.11 jądra Linuksa (kwiecień 2017 r.) Istnieje nowe
statx()
wywołanie systemowe, aby je pobrać. Jednak odpowiednia funkcja wrapper nie została dodana do LIBC jeszcze (od 26.06.2018. 2019 edit teraz dodanej 2.28) i narzędzi, takich jak GNUstat
,ls
,find
nie zostały zaktualizowane, aby go używać ( 2019-08- 22 edycja GNUstat
w systemach GNU / Linux z wersją glibc 2.28 lub nowszą obsługuje go, ponieważ coreutils 8.31)Możesz to zrobić za
perl
pomocą czegoś takiego:Jeśli
syscall.ph
nie maszSYS_statx
, możesz go również zakodować na stałe. Jest 332 na architekturze amd64. Lub spróbuj:Teraz poród rzadko jest przydatny. Nie chodzi o wiek danych w pliku (dane są zapisywane w plikach po ich utworzeniu), ani niekoniecznie czas pojawienia się pliku o tej nazwie w katalogu (mógł zostać utworzony pod inną nazwą i przemianowany lub połączony tam, a treść lub atrybuty były zmieniane kilka razy pomiędzy nimi).
źródło
NFSv4
, musiałby obsługiwać rozszerzone atrybuty i istnieje możliwość wpisaniacrtime
w rozszerzonych atrybutach. Sprawdź np.ls.c
Źródło Solaris, które drukuje czas utworzenia plikuls -l -% crtime
.statx()
. Wstatx()
Linuksie nie ma standardowego narzędzia, do którego jeszcze interfejsu , ale pobieranie rozszerzonych atrybutów jest obsługiwane od dziesięcioleci. Zobacz Jak uzyskać datę utworzenia pliku na woluminie logicznym NTFS?openat(fd, ".", O_RDONLY|O_XATTR)
.