Grundlegendes zu Zeitstempeln für Linux-Dateien: mtime, ctime und atime

Das Linux-Betriebssystem verfolgt drei Zeitstempel für jede Datei auf Ihrem System. Mit diesen Zeitstempeln können Sie feststellen, wann eine Datei zuletzt aktualisiert wurde. Aber was bedeuten sie alle? Und wie finden Sie diese Zeiten für eine Datei heraus? Gibt es einen Unterschied, wenn es um Verzeichnisse geht?

Ein Verständnis von atime, ctime und mtime kann all diese Fragen beantworten. Dies sind die drei Zeitstempel, die Unix-Dateisysteme verfolgen. Wenn Sie jemals Einzelheiten darüber erfahren müssen, was sich wann geändert hat, lesen Sie weiter.

Was sind die drei Unix-Zeitstempel?

Jeder Datei sind drei Zeitstempel zugeordnet. Linux speichert diese im Unix-Zeitformat, das Sekunden seit der Epoche misst. Die drei Zeitstempel werden üblicherweise als atime, ctime und mtime bezeichnet.

Die mtime ist die häufigste und oft die nützlichste. Es steht für modifizierte Zeit . Es ist der Zeitpunkt, zu dem der Inhalt der Datei zuletzt auf die Festplatte geschrieben wurde.

Etwas anders ist die ctime, die für change time steht . Dieser Zeitstempel verfolgt Metadatenänderungen wie Besitz und Berechtigungen. Dazu gehört das Umbenennen einer Datei – zumindest unter typischen modernen Linux-Betriebssystemen. Es wird jedoch auch aktualisiert, wenn sich der Inhalt der Datei ändert, sodass es immer so aktuell ist wie die mtime.

Der dritte Zeitstempel ist der Zeitpunkt , in dem gespeichert wird , wann das letzte Mal jemand auf die Datei zugegriffen hat.

Wie Zeitstempel auf Verzeichnisse angewendet werden

Ein Linux-Verzeichnis ist im Wesentlichen eine Liste der Dateien in diesem Verzeichnis. Wenn Sie also eine Datei in einem Verzeichnis erstellen, wird die mtime dieses Verzeichnisses aktualisiert. Wenn Sie beispielsweise die Dateien im Verzeichnis mit dem Befehl ls auflisten, wird die Zugriffszeit aktualisiert. Und wie bei einer Datei wird durch Ändern der Berechtigungen oder des Namens eines Verzeichnisses die Uhrzeit aktualisiert.

Was ist mit der Erstellungszeit?

Es mag Sie überraschen zu erfahren, dass Linux die Erstellungszeit einfach nicht im Auge behält. Sie können zunächst davon ausgehen, dass ctime für die Erstellungszeit steht. Ebenso könnte man es als sehr nützlich ansehen, um es herauszufinden.

Viele Anwendungen speichern Dateien, indem sie jedes Mal von Grund auf neu erstellt werden. Dies würde die Verwendung einer Erstellungszeit irreführend machen.

So zeigen Sie die verschiedenen Zeitstempel an

Der einfachste Weg, um Zeitstempelinformationen abzurufen, ist der Befehl ls . Das Standard-Langformat zeigt Details für die mtime an:

 $ date
Sat Mar 6 16:57:01 GMT 2021
$ echo "hello, world" > tmp
$ ls -l tmp.txt
-rw-r--r-- 1 ubuntu ubuntu 13 2021-03-06 16:57 tmp

Sie können den Zeitpunkt stattdessen mit dem Flag -u anzeigen:

 $ date
Sat Mar 6 16:59:33 GMT 2021
$ cat tmp
hello, world
$ ls -lu tmp
-rw-r--r-- 1 ubuntu ubuntu 13 2021-03-06 16:59 tmp
$ ls -l tmp
-rw-r--r-- 1 ubuntu ubuntu 13 2021-03-06 16:57 tmp

Die letzte Zeile bestätigt, dass sich die mtime dieser Datei von der atime unterscheidet. Verwenden Sie abschließend das Flag -c , um ctime anzuzeigen:

 $ date
Sat Mar 6 17:02:34 GMT 2021
$ mv tmp tmp2
$ ls -lc tmp2
-rw-r--r-- 1 ubuntu ubuntu 13 2021-03-06 17:02 tmp2
$ ls -l tmp2
-rw-r--r-- 1 ubuntu ubuntu 13 2021-03-06 16:57 tmp2
$ ls -lu tmp2
-rw-r--r-- 1 ubuntu ubuntu 13 2021-03-06 16:59 tmp2

Dieses Mal bestätigen wir, dass alle drei Zeiten unterschiedlich und korrekt sind: Wir haben die Datei in dieser Reihenfolge geändert, darauf zugegriffen und sie dann geändert.

Eine Alternative zu ls ist der Befehl stat . Dieser Befehl zeigt Details auf niedriger Ebene aus dem Inode der Datei an. Es macht es einfacher, alle drei Male gleichzeitig zu überprüfen. Es wird auch das Problem der nicht intuitiven -u- Flagge umgangen. Hier ist eine Beispielausgabe für dieselbe Datei:

 $ stat tmp2
File: `tmp2'
Size: 13 Blocks: 8 IO Block: 4096 regular file
Device: 801h/2049d Inode: 327688 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 1000/ ubuntu) Gid: ( 1000/ ubuntu)
Access: 2021-03-06 16:59:45.000000000 +0000
Modify: 2021-03-06 16:57:59.000000000 +0000
Change: 2021-03-06 17:02:43.000000000 +0000

So aktualisieren Sie Zeitstempel

Der Touch- Befehl ändert die Änderungs- und Zugriffszeiten einer Datei. Es ist auch eine bequeme Möglichkeit, eine leere Datei zu erstellen. Dies ist der Fall, wenn die Datei noch nicht vorhanden ist:

 touch tmp

Standardmäßig werden mtime und atime auf die aktuelle Zeit eingestellt. Mit dem Flag -t können Sie eine andere Zeit einstellen:

 touch -t 202103061200 tmp

Sie können auch nur mtime oder atime mit den Flags -m und -a festlegen:

 touch -t 202103061300 -m tmp

Beachten Sie, dass die ctime immer aktualisiert wird, wenn wir die atime oder mtime einstellen.

So finden Sie Dateien anhand von Zeitstempeln

Der Befehl find ist ein weiteres Werkzeug, das auf Zeitstempel wirkt. Es kann Dateien basierend auf atime, ctime oder mtime filtern. Zum Beispiel:

 find . -amin 15

findet Dateien, auf die vor genau 15 Minuten zugegriffen wurde, während:

 find . -mtime -2

findet Dateien, die innerhalb der letzten zwei Tage geändert wurden.

Linux verfolgt jede Datei dreimal

Der am häufigsten verwendete Dateizeitstempel ist mtime. Dies ist beispielsweise das Datum und die Uhrzeit, die in einer Dateiliste angezeigt werden. Die beiden anderen Zeitstempel können jedoch ebenfalls nützlich sein, vorausgesetzt, Sie verstehen, worauf sie sich beziehen. Denken Sie insbesondere immer daran, dass ctime die Änderungszeit und nicht die Erstellungszeit darstellt .

Befehle wie touch und stat sind nützliche Mitglieder der Linux-Befehlszeilen-Toolbox. Diese Befehle verbessern Ihren Linux-Workflow, indem Sie schnell neue Dateien erstellen können.