* Tim Ritberg <t...@server.invalid>:
In der Tat. Und nicht nur da.
Da hat sich in den letzten Jahren was getan, das mir altem Knacker
nicht bewusst war.
ext4 und ein paar andere Filesysteme können die "birth time" speichern,
und bei genügend neuen Kernels tun das die entsprechenden Syscalls
auch. In der statx-Struktur heisst das entsprechende Feld "stx_btime":
struct statx_timestamp stx_atime; /* Last access */
struct statx_timestamp stx_btime; /* Creation */
struct statx_timestamp stx_ctime; /* Last status change */
struct statx_timestamp stx_mtime; /* Last modification */
Mit "stat" kann man sich diese Timestamps ausgeben lassen:
$ stat foobar
...
Access: 2022-09-24 22:32:24.891797628 +0200
Modify: 2022-09-24 22:36:33.437441812 +0200
Change: 2022-09-24 22:37:23.618614456 +0200
Birth: 2022-09-24 22:31:56.447178176 +0200
Auch "ls" hat eine gut versteckte Option dafür (vgl. "ls --help"):
$ ls --time=birth -ln foobar
-rw-r--r-- 1 1000 1000 4 Sep 24 22:31 foobar
Die Semantik und der Wert einer "Birth Time" ist nicht intuitiv klar,
und das war wohl auch ein Grund, warum Ken Thompson darauf verzichtet
hat. Bei aktuellem Linux offenbar so, dass die Birth Time gesetzt wird,
wenn die Datei (der inode) im lokalen Filesystem erzeugt wird. Bei
rename(2) innerhalb des gleichen Filesystems bleibt die btime erhalten,
nicht aber beispielsweise bei "cp -a". Man kann eine Datei also
umbenennen und mit komplett anderem Inhalt überschreiben, aber die
"Birth Time" bleibt erhalten:
$ stat IMG_42345.JPG | grep Birth
Birth: 2022-06-21 14:23:50.275230832 +0200
$ mv IMG_42345.JPG katzenvideo.mp4
$ wget -q -O-
https://area51.invalid/videos/cat.mp4 > katzenvideo.mp4
$ stat katzenvideo.mp4 | grep Birth
Birth: 2022-06-21 14:23:50.275230832 +0200
Wie sinnvoll das ist, bleibe dahingestellt.
Da man atime und mtime mit "touch" (bzw. utime()) auf beliebige Werte
setzen kann, kann man Dateien erzeugen, die verändert und gelesen
wurden, bevor es sie gab:
$ touch --date=2022-09-22 glubber
$ touch --date=2022-09-23 -a glubber
$ stat glubber
...
Access: 2022-09-23 00:00:00.000000000 +0200
Modify: 2022-09-22 00:00:00.000000000 +0200
Change: 2022-09-24 23:41:19.264588578 +0200
Birth: 2022-09-24 23:41:13.072418293 +0200
wwg, Andi