Ich möchte das Erstellungsdatum einer bestimmten Datei herausfinden, nicht das Änderungs- oder Zugriffsdatum.
Ich habe es mit ls -ltrh
und versucht stat filename
.
linux
files
timestamps
stat
Özzesh
quelle
quelle
stat(1)
.stap
zum Abrufen der Erstellungszeiten verwendet wird.Antworten:
Der POSIX-Standard definiert nur drei unterschiedliche Zeitstempel , die für jede Datei gespeichert werden sollen: den Zeitpunkt des letzten Datenzugriffs, den Zeitpunkt der letzten Datenänderung und den Zeitpunkt, zu dem sich der Dateistatus zuletzt geändert hat.
In modernen Linux-Dateisystemen wie ext4, Btrfs und JFS wird zwar die Erstellungszeit (auch als Geburtszeit bezeichnet) gespeichert , für das betreffende Feld werden jedoch andere Namen verwendet (
crtime
in ext4,otime
Btrfs und JFS). Doch derzeit Linux bietet keine Kernel - API für die Dateierstellungszeiten Zugriff auch auf Dateisysteme unterstützt sie.Als Craig Sanders und Mohsen Pahlevanzadeh darauf hingewiesen,
stat
die unterstützt%w
und%W
zum Anzeigen der Datei Geburtszeit Formatbezeichner (in für Menschen lesbares Format und in Sekunden seit der Epoche respectively). Derstat
Zugriff auf die Geburtszeit selbst erfolgt jedoch über dieget_stat_birthtime()
von gnulib (inlib/stat-time.h
) bereitgestellte Funktion , die die Geburtszeit aus den vom Systemaufruf zurückgegebenen Feldernst_birthtime
undst_birthtimensec
derstat
Struktur abruftstat()
. Während zum Beispiel BSD-Systeme (und in der Erweiterung OS X)st_birthtime
über bietenstat
, tut Linux dies nicht. Aus diesem Grund werden unter Linux auchstat -c '%w' file
Ausgaben-
(die eine unbekannte Erstellungszeit angeben) für Dateisysteme ausgegeben, in denen die Erstellungszeit intern gespeichert ist.Wie Stephane Chazelas betont, offenbaren einige Dateisysteme, wie z. B. ntfs-3g, die Erstellungszeiten der Dateien über erweiterte Dateiattribute.
quelle
stap
damit Ihre eigene Kernel-API erstellen. Siehe Beispiel in Antwort hier.TLDR; Verwenden Sie
stap
( "SystemTap" ), um Ihre eigene Kernel-API zu erstellen. Demo der Extraktion der Erstellungszeit für ext4 weiter unten.Sie können die ext4-Erstellungszeiten auf Fedora 19-Systemen extrahieren. Hier ist meins:
Es ist klar, dass die Inodes auf meinen ext4-Partitionen die Erstellungszeit haben. Hier ist ein Shell-Skript, das den mit einem Dateinamen verknüpften Inode ermittelt und dann die
stat
Ausgabe mit Hilfe vonstap
("systemtap") um die Erstellungszeit erweitert .NB: Dies ist nur eine Demo und äußerst ineffizient, da ein Kernelmodul für jede Ausführung erstellt, geladen und entladen wird. Dies ist wahrscheinlich auch sehr fragil, da keine Fehlerprüfung durchgeführt wird. Eine ordnungsgemäße Kernel-API wäre vorzuziehen, aber dieses Skript könnte wesentlich effizienter gestaltet werden und die Erstellungszeiten mehrerer Dateien / Inodes lesen.
[Inhalt von stap_stat.sh]
Hier ist eine Demo:
quelle
debugfs + stat
es,crtime
ohne Affe den Kernel zu patchen.Darin ist
ext4
es möglich; weilext4
das Dateisystem die Erstellungszeit der Datei speichert. Trotzdem werden Sie feststellen, dass derstat
Befehl das Datum nicht anzeigen kann, da der Kernel meines Erachtens keine APIs dafür hat.Wie auch immer, die Geburtszeit der Datei wird in gespeichert
ext4
und Sie können es herausfinden, obwohl nicht durch eine direkte Methode, sondern durch Verwendung vondebugfs
quelle
xstat filename
/dev/sdxX
eingehängt ist/some/path
und die Datei ist/some/path/some/file
, muss nur der Pfad angegeben werdensome/file
: Der Pfad muss sich nicht auf den Dateisystemstamm, sondern auf den Einhängepunkt beziehen. Andernfalls wird die Datei nicht gefunden.Theoretisch könnten Sie mit GNU stat das Erstellungsdatum einer Datei (auch bekannt als Geburtszeit) verwenden
stat -c '%w'
oder%W
abrufen.In der Praxis zeichnen die meisten Dateisysteme diese Informationen nicht auf und der Linux-Kernel bietet keine Möglichkeit, darauf zuzugreifen.
Der nächstmögliche Wert ist die C-Zeit der Datei. Dies ist nicht die Erstellungszeit, sondern die Zeit, zu der die Metadaten der Datei zuletzt geändert wurden.
Linux Weekly News hatte vor ein paar Jahren einen interessanten Artikel darüber - http://lwn.net/Articles/397442/
quelle
Unterschied zwischen
FreeBSD
undGNU\Linux
anstat command
:Wenn Sie rufen
stat
in BefehlGNU\Linux
ruft sie die-x
Option, aber in FreeBSD, Sie selbst sollten die aufrufen-x
Option.Siehe auch Welche Dateisysteme unter Linux speichern die Erstellungszeit?
Anmerkungen:
--printf
ist sehr nützlich inscripting
....!quelle
In OS X können Sie verwenden
ls -lU
,stat -f%B
,GetFileInfo -d
, odermdls -n kMDItemFSCreationDate
:quelle
Überprüfen Sie dies heraus:
Übrigens funktioniert das nur mit ext4. Ich habe noch keine Lösung für BtrFS gefunden ...
quelle