Wie ändert sich die Zeit?

8

Ich versuche genau zu verstehen, wann der Zeitstempel einer Datei geändert wird. An vielen Stellen (z. B. in der hier akzeptierten Antwort ) wird vorgeschlagen, dass jede Änderung der Dateiattribute auch die Uhrzeit ändert. Dies scheint jedoch nicht zu stimmen, zumindest auf meinem Ubuntu 12.04 (ja, ich weiß, ein bisschen alt ...):

cat file.txt > /dev/null

Ändert den Zeitpunkt, sodass die Dateiattribute (im Datei-Inode) geändert werden, ändert jedoch nicht die Uhrzeit.

Andere Quellen (z. B. hier und hier ) schlagen vor, dass nur einige Operationen an den Dateiattributen tatsächlich die Uhrzeit ändern, eine genaue Liste wird jedoch nicht bereitgestellt.

Wo finde ich einen genauen Verweis darauf, welche Operationen die Uhrzeit ändern?

VeryHardCoder
quelle
Vielleicht hängt das Problem damit zusammen cat, haben Sie es untersucht touch?
Mahdi

Antworten:

8

Auf Unix-Systemen gibt es drei Zeitstempel:

  • atime: Zugriffszeit

    Dieser Zeitstempel gibt an, wann beim letzten Zugriff auf die Datei zugegriffen wurde, einschließlich des Lesezugriffs.

  • ctime: Zeit ändern

    Dieser Zeitstempel zeigt an, wann sich die Dateiattribute (Inode-Informationen) das letzte Mal geändert haben. Dies beinhaltet zB Besitz und Berechtigungen, aber eine Inhaltsänderung löst auch eine Aktualisierung dieses Zeitstempels aus.

    Beachten Sie, dass Änderungen am atime eine Ausnahme zu sein scheinen, da sie keine ctime-Aktualisierung auslösen. Dies liegt wahrscheinlich daran, dass ein einfacher Lesezugriff, der ausreicht, um ein atime-Update auszulösen, keine relevanten Änderungen an den Dateiattributen vornimmt. Einer der Hauptzwecke von ctime besteht darin, Sicherungswerkzeugen dabei zu helfen, festzustellen, ob sich eine Datei geändert hat. Der Zeitpunkt ist eine irrelevante Information für solche Tools, und das Aktualisieren eines Backups, nur um einen geänderten Zeitpunkt zu aktualisieren, weil jemand die Datei gelesen hat, wäre nutzlos.

    Ich bin nicht sicher, aber einige Leute denken, dass dieses Verhalten (Änderungen an atime aktualisieren ctime nicht) nur auf die Mount-Optionen (wie relatime) des zugrunde liegenden Dateisystems zurückzuführen ist, die atime-Updates im Inode aus Leistungsgründen im Speicher zwischenspeichern und verzögern und wendet sie unter bestimmten Bedingungen nur auf die realen Inodes auf der Festplatte an (was ein ctime-Update auslöst).
    @kos hat es versucht und anscheinend scheint die ctime selbst beim Mounten eines FS mit der Option `strictatime`` nie zu aktualisieren, wenn sich der atime ändert.

  • mtime: Änderungszeit

    Dieser Zeitstempel zeigt an, wann der Inhalt der Datei das letzte Mal geändert wurde.


So ein einfacher Lesezugriff unter Verwendung von cat FILENAMEnur die Änderungen atime , aber nicht die ctime als nicht bekam Dateiattribut geändert. Der geänderte Zeitpunkt zählt nicht.

Byte Commander
quelle
Genau das ist der Punkt: Warum zählt der geänderte Zeitpunkt nicht? Ist es nicht ein Dateiattribut?
VeryHardCoder
@VeryHardCoder Ich habe versucht, meine Antwort an dieser Stelle zu erläutern, und einige Erklärungen hinzugefügt.
Byte Commander