Code zum Testen in e. leeren Verzeichnis:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | # 2 Dateien mit minimalem Inhalt füllen: echo a > 1.txt echo b > 2.txt # ... und ausgeben cat ?.txt # mit stat die Zugriffszeiten ausgeben (access time) stat -c "%n %x" ?.txt sleep 1 # Nur Datei 1 erneut ausgeben cat 1.txt # erneut Zugriffszeit prüfen stat -c "%n %x" ?.txt # Beide Dateien ändern und nochmal ausgebn: echo c >> 1.txt echo c >> 2.txt cat ?.txt stat -c "%n %x" ?.txt |
Ich habe mich bisher nie tiefergehend mit der access-time beschäftigt und stieß heute überraschend auf ein Phänomen.
Wenn ich eine Datei erstmalig mit cat lese, wird dieser Zeitpunkt als Accesstime protokolliert.
Output:
1 2 3 4 5 6 7 8 9 10 11 12 13 | a b 1.txt 2022-11-15 23:01:16.123742289 +0100 2.txt 2022-11-15 23:01:16.123742289 +0100 a 1.txt 2022-11-15 23:01:16.123742289 +0100 2.txt 2022-11-15 23:01:16.123742289 +0100 a c b c 1.txt 2022-11-15 23:01:17.131744425 +0100 2.txt 2022-11-15 23:01:17.131744425 +0100 |
Dann gebe ich nach einer Wartezeit von 1s Datei 1.txt erneut aus (Zeile 5), aber die Accesszeit ändert sich nicht (Z. 6).
Ich vermutete daher, dass der Inhalt gecacht ist, und die Datei nicht wirklich neu gelesen wird und daher der Zeitstempel auch nicht aktualisiert wird.
Lesen von info stat hat mir nicht weitergeholfen. Eine Hypothese war dann, dass ich, wenn ich die Datei aus einem anderen Terminal heraus lese, die Accesstime vielleicht aktualisiert wird, weil der andere Prozess in einem eigenen Speicherbereich läuft, vielleicht aber auch nicht, weil der Dateisystemzugriff womöglich auf einem höheren Level stattfindet und dennoch caching stattfindet - entweder auf OS-Level, womöglich aber sogar auf Partitionslevel.
Weiß da jmd. genaueres?
Das Experiment ergab, dass auch in einer neuen xterm-Session ein Lesezugriff keine Aktualisierung der Accesstime bewirkt.
Das hat mich etwas überrascht.
Drive ist eine Intel-SSD, nicht die jüngste, Laptop, Partition btrfs. Inxi-Infos:
1 2 3 4 5 6 7 8 | Drives: Local Storage: total: 1.09 TiB used: 295.41 GiB (26.5%) ID-1: /dev/sda vendor: Intel model: SSDSC2BW180A3L size: 167.68 GiB # ... Partition: # ... ID-2: /home size: 47.12 GiB used: 46.32 GiB (98.3%) fs: btrfs dev: /dev/sda6 |
An btrfs liegt es nicht - in einer VM mit ext4 hatte ich das gleiche Phänomen.