Erklärung der Linux-Dateizeitstempel: atime, mtime und ctime

Wann bedeutet „geändert“ nicht „geändert“? Wenn wir über Linux-Dateizeitstempel sprechen. In diesem Handbuch erklären wir, wie das System sie aktualisiert und wie Sie sie selbst ändern können.

Der Unterschied zwischen atime, mtime und ctime

Jede Linux-Datei hat drei Zeitstempel: der Zugriffszeitstempel (atime), der geänderte Zeitstempel (mtime) und der geänderte Zeitstempel (ctime).

Der Zugriffszeitstempel ist das letzte Mal, dass eine Datei gelesen wurde. Dies bedeutet, dass jemand ein Programm verwendet hat, um den Inhalt der Datei anzuzeigen oder einige Werte daraus zu lesen. Es wurde nichts bearbeitet oder der Datei hinzugefügt. Die Daten wurden referenziert, aber unverändert.

Ein geänderter Zeitstempel gibt an, wann der Inhalt einer Datei das letzte Mal geändert wurde. Ein Programm oder Prozess hat die Datei entweder bearbeitet oder manipuliert. „Geändert“ bedeutet, dass etwas in der Datei geändert oder gelöscht wurde oder neue Daten hinzugefügt wurden.

Geänderte Zeitstempel beziehen sich nicht auf Änderungen am Inhalt einer Datei. Es ist vielmehr der Zeitpunkt, zu dem die Metadaten der Datei geändert wurden. Änderungen der Dateiberechtigungen aktualisieren beispielsweise den geänderten Zeitstempel.

Das standardmäßige ext4-Linux-Dateisystem weist in seinen internen Dateisystemstrukturen ebenfalls Platz für einen Zeitstempel der Dateierstellung zu, dies wurde jedoch noch nicht implementiert. Manchmal wird dieser Zeitstempel ausgefüllt, aber Sie können sich nicht auf die darin enthaltenen Werte verlassen.

Die Anatomie eines Zeitstempels

Linux-Zeitstempel enthalten eine Zahl anstelle von Datum und Uhrzeit. Diese Zahl ist die Anzahl der Sekunden seit dem Unix-Epoche, das war Mitternacht (00:00:00) am 1. Januar 1970, in Koordinierte Weltzeit (UTC). Schaltsekunden werden in Linux-Zeitstempeln ignoriert, sie entsprechen also nicht der Echtzeit.

Wenn Linux einen Zeitstempel anzeigen muss, übersetzt es die Anzahl der Sekunden in ein Datum und eine Uhrzeit. Dies macht es für den Menschen einfacher zu verstehen. Der Standort und die Zeitzone, in der sich der Computer befindet, in dem sich die Datei befindet, leitet die Umrechnung der Sekunden in ein Datum und eine Uhrzeit an. Es stellt auch sicher, dass der Monat in der richtigen Sprache angezeigt wird.

Wie viele Sekunden können also in einem Zeitstempel gespeichert werden? Eine Menge – 2.147.483.647, um genau zu sein. Das ist eine große Zahl, aber reicht das? Wenn Sie das der Unix-Epoche hinzufügen und es dann in ein Datum und eine Uhrzeit übersetzen, erhalten Sie Dienstag, den 19. Januar 2038, um 03:14:07 Uhr. Bis dahin benötigen wir jedoch ein anderes Schema für Zeitstempel.

Zeitstempel anzeigen

Wenn Sie die Option -l (lange Auflistung) mit ls verwenden, wie unten gezeigt, Sie können den geänderten Zeitstempel sehen:

ls -l dp.c

Wenn Sie den Zugriffszeitstempel sehen möchten, verwenden Sie die Option -lu (Zugriffszeit) wie folgt:

ls -lu dp.c

Um den Zeitstempel der Änderung anzuzeigen, können Sie schließlich die Option -lc (Zeit ändern) verwenden; geben Sie Folgendes ein:

ls -lc dp.c

Der

Die obigen Zeitstempel zeigen, dass der Inhalt der Datei zuletzt am 21. April 2019 geändert wurde. Die Zugriffs- und geänderten Zeitstempel sind identisch, da die Datei am 20. Januar 2020 von einem anderen Computer auf diesen kopiert wurde und beide Zeitstempel zu diesem Zeitpunkt aktualisiert wurden.

  So sichern Sie Ihr Linux-System

Zu alle Zeitstempel gleichzeitig sehen, verwenden Sie den stat-Befehl wie folgt:

stat dp.c

Der

Die Zeitzonen werden unten im Display aufgelistet. Wie Sie sehen können, haben sie einen sehr genauen Sekundenbruchteil. Am Ende jedes Zeitstempels sehen Sie auch -0500 oder -0400 .

Dies sind Zeitzonen-Offsets. Das Dateisystem zeichnet die Zeitstempel in UTC auf und konvertiert sie in die lokale Zeitzone, wenn sie von stat angezeigt werden. Der Computer, mit dem wir diesen Artikel recherchiert haben, ist so konfiguriert, als ob er sich in der Eastern Standard Time (EST)-Zone der USA befände

Diese Zeitzone liegt fünf Stunden hinter UTC, wenn EST in Kraft ist. Es liegt jedoch vier Stunden hinter UTC, wenn die Eastern Daylight Time (EDT) gilt. Im April 2019, als der geänderte Zeitstempel geändert wurde, war EDT in Kraft. Aus diesem Grund haben zwei der Zeitstempel einen Offset von fünf Stunden, der geänderte jedoch einen Offset von vier Stunden.

Die Offsets und Zeitzonen werden nirgendwo gespeichert. Es gibt weder einen Inode noch einen Dateisystembereich, der für diese Werte reserviert ist. Sie müssen diese im laufenden Betrieb berechnen, indem Sie den Zeitstempel (der immer in UTC-Zeit angegeben ist), die lokale Zeitzone des Computers, auf dem die Datei angezeigt wird, und ob DST gültig war.

Sie sehen auch einen „Geburts“-Zeitstempel, der für das Erstellungsdatum der Datei reserviert ist. Dies ist nicht implementiert und Sie sehen einen Bindestrich „-“ anstelle eines Zeitstempels.

Zeitstempel ändern

Wenn Sie möchten, können Sie die Zeitstempel einer Datei ändern. Mit dem Touch-Befehl können Sie den Zugriff oder geänderte Zeitstempel ändern, oder beides:

touch -a dp.c

Um einen neuen Zugriffszeitstempel zu setzen, verwenden Sie die Option -a (Zugriffszeit). Dieser Befehl setzt den Zugriffszeitstempel auf die aktuelle Uhrzeit des Computers:

stat dp.c

Der

Der Zugriffszeitstempel hat sich wie erwartet geändert. Allerdings wurde auch der geänderte Zeitstempel aktualisiert; das ist normal.

  So verwenden Sie NitroShare unter Linux

Um den geänderten Zeitstempel zu ändern, können Sie die Option -m (modifizierte Zeit) verwenden:

touch -m dp.c
stat dp.c

Der

Diesmal wurden die geänderten und geänderten Zeitstempel aktualisiert.

Sie können die Option -d (Datum) verwenden, wenn Sie sowohl den Zugriffs- als auch den geänderten Zeitstempel gleichzeitig ändern möchten. Sie können auch eine Uhrzeit und ein Datum angeben – Sie sind nicht darauf beschränkt, die Zeitstempel auf die Gegenwart zu ändern.

Wir verwenden den folgenden Befehl, um den Zugriff und die geänderten Zeitstempel am 15. Januar 2020 auf 10:30:45 zu setzen:

touch -d "2020-01-15 10:30:45" dp.c
stat dp.c

Wir haben jetzt den Zugriff und die geänderten Zeitstempel auf ein Datum in der Vergangenheit gesetzt. Der geänderte Zeitstempel wurde auch auf die aktuelle Uhrzeit des Computers aktualisiert.

Sie können auch die Option -r (Referenz) verwenden, wie unten gezeigt, wenn Sie die Zeitstempel einer Datei auf die Zeitstempelwerte einer anderen setzen möchten:

touch dp.c -r dice_words.sl3
stat dp.c

Der

Und dann sind wir so ziemlich wieder da, wo wir angefangen haben, mit einer Mischung aus -0400- und -0500-Zeitstempeln.

Lassen Sie uns etwas tun, das nur den geänderten Zeitstempel betrifft. Wir verwenden den Befehl chmod, um eine ausführbare Datei zu erstellen Ausführungsberechtigungen für alle Benutzer:

chmod +x dp
stat dp

Der

Der geänderte Zeitstempel war der einzige, der aktualisiert wurde. Dies liegt daran, dass die Datei selbst nicht geändert wurde – weder auf sie zugegriffen noch sie geändert wurde. Die Metadaten zur Datei wurden jedoch geändert.

So aktualisiert das Dateisystem Zeitstempel

Wenn ein Dateisystem eingehängt ist, können Sie mit Optionen angeben, wie dieses Dateisystem arbeiten oder behandelt werden soll. Diese werden in der Datei /etc/fstab gespeichert, die beim Booten gelesen und verarbeitet wird. Sie können auch Optionen festlegen, um das Schema festzulegen, das verwendet werden soll, um den Zugriffszeitstempel zu aktualisieren.

Im Folgenden sind einige der gängigsten Optionen aufgeführt:

strictatime (strict atime): Diese Option aktualisiert den Zugriffszeitstempel von Dateien bei jedem Zugriff. Dieser Ansatz ist mit einem Mehraufwand verbunden, aber einige Server können von diesem Schema profitieren. Es hat wenig Wert auf einem Desktop- oder Laptop-Computer.
noatime (no atime): Diese Option deaktiviert die Aktualisierung der Zugriffszeitstempel für Dateien und Verzeichnisse vollständig. Die geänderten Zeitstempel werden jedoch weiterhin aktualisiert.
nodiratime (no dir atime): Diese Option aktiviert Zugriffszeitstempel für zu aktualisierende Dateien, deaktiviert sie jedoch für Verzeichnisse.
relatime (relative atime): Diese Option aktualisiert den Zugriffszeitstempel nur, wenn er mehr als 24 Stunden alt war oder der vorherige älter war als die aktuell geänderten oder geänderten Zeitstempel. Dies schafft ein gutes Gleichgewicht zwischen Zugriffszeitstempeln, die zu häufig oder überhaupt nicht aktualisiert werden.

  So suchen Sie mit Tiger nach Rootkits unter Linux

Schauen wir uns die Datei /etc/fstab für diesen Computer an und sehen, welche Optionen eingestellt sind:

less /etc/fstab

Der

Die Datei /etc/fstab wird uns angezeigt, wie unten gezeigt.

Der

Hier ist der Inhalt der Datei ohne den Wrap-Around:

# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# 
# / was on /dev/sda1 during installation
UUID=4a143d08-8695-475b-8243-b13b56050fc2 / ext4 errors=remount-ro 0 1
/swapfile none swap sw 0 0

Es gibt nur zwei Einträge, und einer davon ist eine Auslagerungsdatei, die wir ignorieren können. Der andere wird im Root des Dateisystems ( / ) gemountet und befand sich zum Zeitpunkt der Installation auf dem Gerät /dev/sda1. Das ist die erste Partition auf der ersten Festplatte, die zufällig ein ext4-Dateisystem enthält.

Die einzige an sie übergebene Option ist error=remount-ro, die das Betriebssystem anweist, dieses Dateisystem als schreibgeschützt neu zu mounten, wenn beim Versuch, es als lese- und schreibbares Dateisystem zu mounten, Fehler auftreten.

Es wird also nicht erwähnt, wie der Zugriffszeitstempel behandelt wird. Lassen Sie uns tiefer graben und sehen, was /proc/mounts uns sagen kann. Wir leiten die Ausgabe von /proc/mounts über grep weiter. Unsere Suchzeichenfolge ist „sda“, die Festplattenkennung.

Wir geben folgendes ein:

cat /proc/mounts | grep "sda"

Jetzt sehen wir folgende Optionen:

rw: Das Dateisystem wird als Dateisystem mit Lese- und Schreibzugriff gemountet.
relatime: Das Dateisystem verwendet das „relative atime“-Schema, um die Zugriffszeitstempel zu aktualisieren.

Woher kommt das? Nun, das Relatime-Schema wird in den folgenden Situationen verwendet:

Wenn die Standardoption /etc/fstab verwendet wird.
Wenn die Option relatime /etc/fstab verwendet wird.
Wenn keine Zugriffszeitstempeloptionen in /etc/fstab verwendet werden und Sie den Linux-Kernel 2.6.30 oder neuer verwenden.

Unser /etc/fstab-Eintrag für das ext4-Dateisystem spezifizierte keine Aktualisierungsoptionen für Zugriffszeitstempel, also traf Linux die vernünftige Wahl und verwendete Relatime.

Zeitstempel sind wichtig

Zeitstempel geben uns eine einfache Möglichkeit zu sehen, wann auf eine Datei zugegriffen, sie geändert oder geändert wurde. Noch wichtiger ist jedoch, dass sie eine Möglichkeit zum Sichern und Synchronisieren von Software bieten, um festzustellen, welche Dateien gesichert werden müssen.

Die Möglichkeit, Zeitstempel zu manipulieren, erweist sich immer dann als nützlich, wenn Sie ein Programm gewaltsam davon überzeugen müssen, eine Datei oder einen Satz von Dateien einzuschließen oder zu ignorieren.