Linux hat sich lange Zeit nicht mehr mit Dateierstellungsdaten beschäftigt, da sie von keinem der üblicherweise verwendeten Dateisysteme unterstützt wurden. Derzeit zeichnen jedoch zwei häufig verwendete Dateisysteme (NTFS und ext4) das Erstellungsdatum der Datei auf.
Der stat
Befehl wird jedoch weiterhin Birth: -
auf einem ext4-Dateisystem ausgegeben, obwohl wir sehen können, dass ext4 das Erstellungsdatum der Datei mit gespeichert hat debugfs -R 'stat <inode_number>' /dev/file_device
.
Als ich mir anschaute, warum das so ist, sah ich, dass jemand anderes bereits kürzlich einen Fehlerbericht darüber eingereicht hat, und die Antwort führt zu einem Upstream-Problem , das einfach besagt, dass es derzeit keine Linux-Kernel-Schnittstelle gibt, um diese Info [-Datei zu erhalten Erstellungsdatum]". Es scheint mir bemerkenswert zu sein, dass dies anscheinend immer noch der Fall ist, da Leute stat
diese Informationen seit Jahren anfordern (und stat
ein Birth
Feld ausgeben , obwohl es es anscheinend noch nicht unterstützt! Wurde es in Erwartung hinzugefügt?)
Stimmt es also immer noch, dass es derzeit keine Linux-Kernel-Schnittstelle gibt, um das Datum der Dateierstellung zu ermitteln? Gibt es einen Plan, dies jemals umzusetzen?
quelle
debugfs
.ZFS
zeichnet auch die Erstellungszeit von Dateien auf und ermöglicht den Abruf über erweiterte Attribute.Antworten:
BEARBEITEN: Gute Nachricht,
statx()
wurde zusammengeführt und sollte in Release 4.11 verfügbar sein.xstat () work, derzeit statx (), wurde 2016 überarbeitet.
Der Prozess war diesmal etwas disziplinierter (weniger Bikeshedding, Zustimmung, kontroverse Attribute fallen zu lassen, da sie später immer noch hinzugefügt werden können). Leider gab es immer noch Einwände gegen die genaue Schnittstelle und ich habe keine neueren Referenzen gesehen.
quelle
Nach allem, was ich sagen kann (es tut mir leid, eine Reihe von Links, Speicher und Google-Informationen, die hier nicht als Referenz aufgeführt werden können), lag das nie daran, dass die Unterstreichungssysteme keine Erstellungszeitattribute unterstützten, sondern daran, dass keines von ihnen überhaupt etwas konnte stimme zu, dass es eine nützliche Funktion war.
Siehe http://www.pathname.com/fhs/pub/fhs-2.3.html
POSIX legt drei Zeitstempel aus. Keiner von ihnen ist Erstellungszeit.
Wenn ich mich richtig erinnere, lautete das Argument wie folgt:
Nun ist ein Großteil davon Gedächtnis und das Lesen einiger alter Mailinglisten. Ich habe auch nicht wirklich im Zentrum der Argumente gestanden. Ich war auf einer Mailing-Liste, weil einige Off-Shoot-Arbeiten in einem fetten Treiber für ein eingebettetes Linux-System durchgeführt wurden. Ich erwähne das, weil es mit Sicherheit mehr maßgebliche Quellen gibt als meine Erinnerung an etwas, das mir nur etwas bedeutet hat.
Ich erinnere mich, dass die große Sache eine Kombination aus der Tatsache ist, dass niemand einen guten Anwendungsfall finden kann, und dass sich niemand darauf einigen kann, wie das Feld für die anderen 40 häufig verwendeten Dateisysteme zu behandeln ist, die keine Erstellungszeit unterstützen. und selbst ein Name für das Feld wurde zu einer massiven Debatte.
quelle
debugfs
das Auslesen des Felds vom Disk-Image ist keine wirkliche Schnittstelle und erfordert sowieso privilegierten Zugriff.Die Geburtszeit liegt in mehreren nativen Linux-Dateisystemen, nicht nur in ext4.
Seit Version 4.11 des Linux-Kernels (April 2017) gibt es einen neuen
statx()
Systemaufruf, um ihn abzurufen. Allerdings hat die entsprechende Wrapper - Funktion nicht auf das GNU libc hinzugefügt worden (Stand : 2018.06.26. 2019 bearbeiten jetzt in 2,28 hinzugefügt) und Tool wie GNUstat
,ls
,find
wird nicht aktualisiert , es zu benutzen ( 2019-08- 22 edit GNUstat
auf GNU / Linux-Systemen mit glibc 2.28 oder höher unterstützt es seit coreutils 8.31)Sie könnten es
perl
aber mit etwas tun :Wenn
syscall.ph
dies nicht der Fall istSYS_statx
, können Sie es auch fest codieren. Es ist 332 auf AMD64-Architekturen. Oder Versuche:Nun, diese Geburtszeit ist selten nützlich. Es ist nicht das Alter der Daten in der Datei (Daten werden in Dateien geschrieben, nachdem sie erstellt wurden) oder die Zeit, zu der die Datei unter diesem Namen in einem Verzeichnis angezeigt wurde (sie hätte auch unter einem anderen Namen erstellt und umbenannt oder verknüpft werden können) dort und der Inhalt oder die Attribute wurden mehrmals geändert).
quelle
NFSv4
würde, müssten erweiterte Attribute unterstützt werden, und es gibt einen möglichen Eintragcrtime
in den erweiterten Attributen. Überprüfen Sie z. B. die Solaris-ls.c
Quelle, mit der die Erstellungszeit der Datei gedruckt wirdls -l -% crtime
.statx()
. Es gibt noch kein Standarddienstprogramm für die Schnittstellestatx()
unter Linux, aber das Abrufen erweiterter Attribute wird seit Jahrzehnten unterstützt. Siehe Wie erhalte ich das Erstellungsdatum einer Datei auf einem logischen NTFS-Volume?openat(fd, ".", O_RDONLY|O_XATTR)
.