So überprüfen Sie die Änderungs- und Zugriffszeit einer Datei in Linux

LinuxLinuxBeginner
Jetzt üben

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

Einführung

Im Linux-Betriebssystem hat jede Datei zugehörige Zeitstempel (timestamps), die aufzeichnen, wann die Datei geändert, zugegriffen oder deren Attribute verändert wurden. Das Verständnis dieser Zeitstempel ist für Systemadministratoren, Entwickler und normale Benutzer von entscheidender Bedeutung, die Dateiaktivitäten überwachen müssen.

Dieses Tutorial führt Sie durch die praktischen Techniken zur Überprüfung von Dateizeitstempeln in Linux. Sie werden lernen, wie Sie die Änderungs- und Zugriffszeiten mithilfe verschiedener Befehle anzeigen können, was Ihnen hilft, Änderungen besser zu verfolgen und die Nutzungsmuster von Dateien in Ihrer Linux-Umgebung zu überwachen.

Das Verständnis von Dateizeitstempeln (File Timestamps) in Linux

In Linux hat jede Datei drei wichtige Zeitstempel (timestamps), die vom System automatisch verwaltet werden:

Arten von Dateizeitstempeln

  1. Änderungszeit (Modification Time, mtime): Zeigt an, wann der Inhalt der Datei zuletzt geändert wurde.
  2. Zugriffszeit (Access Time, atime): Zeigt an, wann die Datei zuletzt gelesen oder darauf zugegriffen wurde.
  3. Änderungszeit der Metadaten (Change Time, ctime): Zeigt an, wann die Metadaten der Datei (Berechtigungen, Eigentum) zuletzt geändert wurden.

Beginnen wir mit der Erkundung von Dateizeitstempeln, indem wir eine Testdatei erstellen und ihre Eigenschaften untersuchen.

Zunächst öffnen Sie das Terminal und navigieren Sie in Ihr Projektverzeichnis:

cd ~/project

Erstellen Sie eine einfache Textdatei mit dem Befehl touch:

touch testfile.txt

Der Befehl touch erstellt eine leere Datei, wenn sie noch nicht existiert, oder aktualisiert die Zeitstempel, wenn sie bereits vorhanden ist.

Lassen Sie uns die grundlegenden Dateiinformationen mit dem Befehl ls und der Option -l (langes Listenformat) überprüfen:

ls -l testfile.txt

Sie sollten eine Ausgabe ähnlich der folgenden sehen:

-rw-r--r-- 1 labex labex 0 May 15 14:30 testfile.txt

In dieser Ausgabe:

  • Die erste Spalte zeigt die Dateiberechtigungen an.
  • Die dritte und vierte Spalte zeigen den Eigentümer und die Gruppe an.
  • Die fünfte Spalte zeigt die Dateigröße (0 Bytes) an.
  • Das Datum und die Uhrzeit ("15. Mai 14:30" in diesem Beispiel) zeigen die Änderungszeit an.
  • Die letzte Spalte ist der Dateiname.

Diese grundlegende Auflistung zeigt die Änderungszeit, aber nicht die Zugriffszeit oder die Änderungszeit der Metadaten. Wir werden diese in den folgenden Schritten untersuchen.

Verwenden des stat-Befehls zum Anzeigen aller Zeitstempel

Während der ls-Befehl uns grundlegende Dateiinformationen liefert, bietet der stat-Befehl detailliertere Informationen über eine Datei, einschließlich aller drei Zeitstempel (timestamps).

Lassen Sie uns den stat-Befehl verwenden, um alle Zeitstempel unserer Testdatei anzuzeigen:

stat testfile.txt

Sie sollten eine Ausgabe ähnlich der folgenden sehen:

  File: testfile.txt
  Size: 0           Blocks: 0          IO Block: 4096   regular empty file
Device: 801h/2049d  Inode: 2101099     Links: 1
Access: (0644/-rw-r--r--)  Uid: (1000/labex)   Gid: (1000/labex)
Access: 2023-05-15 14:30:00.000000000 +0000
Modify: 2023-05-15 14:30:00.000000000 +0000
Change: 2023-05-15 14:30:00.000000000 +0000
 Birth: -

In dieser Ausgabe:

  • Access: Zeigt an, wann die Datei zuletzt zugegriffen wurde (Zugriffszeit, atime).
  • Modify: Zeigt an, wann der Dateiinhalt zuletzt geändert wurde (Änderungszeit, mtime).
  • Change: Zeigt an, wann die Metadaten der Datei zuletzt geändert wurden (Änderungszeit der Metadaten, ctime).
  • Birth: Zeigt die Erstellungszeit der Datei an (wird nicht auf allen Dateisystemen unterstützt).

Beachten Sie, dass alle drei Zeitstempel derzeit gleich sind, da wir die Datei gerade erst erstellt haben. Lassen Sie uns die Datei ändern, um zu sehen, wie sich diese Zeitstempel ändern.

Fügen Sie der Datei mithilfe des echo-Befehls etwas Inhalt hinzu:

echo "This is a test file" > testfile.txt

Lassen Sie uns nun die Zeitstempel erneut überprüfen:

stat testfile.txt

Sie sollten feststellen, dass die Änderungszeit (Modify) und die Änderungszeit der Metadaten (Change) aktualisiert wurden, während die Zugriffszeit (Access) je nach Systemkonfiguration gleich bleiben kann.

  File: testfile.txt
  Size: 19          Blocks: 8          IO Block: 4096   regular file
Device: 801h/2049d  Inode: 2101099     Links: 1
Access: (0644/-rw-r--r--)  Uid: (1000/labex)   Gid: (1000/labex)
Access: 2023-05-15 14:30:00.000000000 +0000
Modify: 2023-05-15 14:35:12.000000000 +0000
Change: 2023-05-15 14:35:12.000000000 +0000
 Birth: -

Überprüfen der Änderungszeit (Modification Time, mtime)

Die Änderungszeit (mtime) wird jedes Mal aktualisiert, wenn der Inhalt einer Datei geändert wird. Dies ist der Zeitstempel, der standardmäßig am häufigsten in Dateilisten angezeigt wird.

Verwenden von ls zum Überprüfen der Änderungszeit

Der Standardbefehl ls -l zeigt standardmäßig die Änderungszeit an:

ls -l testfile.txt

Ausgabe:

-rw-r--r-- 1 labex labex 19 May 15 14:35 testfile.txt

Für Dateien, die im aktuellen Jahr geändert wurden, zeigt ls -l den Monat, den Tag und die Uhrzeit an. Für Dateien, die in früheren Jahren geändert wurden, zeigt es stattdessen den Monat, den Tag und das Jahr anstelle der Uhrzeit an.

Anpassen des Zeitformats

Um detailliertere Zeitstempelinformationen anzuzeigen, verwenden Sie die Option --time-style mit ls:

ls -l --time-style=full-iso testfile.txt

Ausgabe:

-rw-r--r-- 1 labex labex 19 2023-05-15 14:35:12.000000000 +0000 testfile.txt

Dies zeigt den Zeitstempel im vollständigen ISO-Format an, einschließlich Jahr, Monat, Tag, Stunden, Minuten, Sekunden und Zeitzone.

Sie können auch andere Formatoptionen wie long-iso oder iso verwenden:

ls -l --time-style=long-iso testfile.txt

Ausgabe:

-rw-r--r-- 1 labex labex 19 2023-05-15 14:35 testfile.txt

Verwenden von date zum Anzeigen der Änderungszeit

Eine andere Möglichkeit, die Änderungszeit zu überprüfen, ist der date-Befehl mit der Option -r:

date -r testfile.txt

Ausgabe:

Mon May 15 14:35:12 UTC 2023

Dieser Befehl zeigt die Änderungszeit in einem menschenlesbaren Format an.

Überprüfen der Zugriffszeit (Access Time, atime)

Die Zugriffszeit (atime) wird jedes Mal aktualisiert, wenn eine Datei gelesen oder darauf zugegriffen wird. Allerdings verwenden viele moderne Linux-Systeme Mount-Optionen wie relatime oder noatime, um die Häufigkeit der atime-Aktualisierungen zu reduzieren und so die Leistung zu verbessern.

Verwenden von ls zum Überprüfen der Zugriffszeit

Um die Zugriffszeit anstelle der Änderungszeit anzuzeigen, verwenden Sie die Option -u mit ls -l:

ls -lu testfile.txt

Ausgabe:

-rw-r--r-- 1 labex labex 19 May 15 14:40 testfile.txt

Der angezeigte Zeitstempel ist jetzt die Zugriffszeit anstelle der Änderungszeit.

Lassen Sie uns auf die Datei zugreifen, um ihre Zugriffszeit zu aktualisieren:

cat testfile.txt

Ausgabe:

This is a test file

Prüfen Sie nun erneut die Zugriffszeit:

ls -lu testfile.txt

Sie sollten feststellen, dass die Zugriffszeit auf die aktuelle Zeit aktualisiert wurde.

Vergleich aller Zeitstempel

Lassen Sie uns den stat-Befehl verwenden, um alle Zeitstempel nach dem Zugriff auf die Datei anzuzeigen:

stat testfile.txt

Ausgabe:

  File: testfile.txt
  Size: 19          Blocks: 8          IO Block: 4096   regular file
Device: 801h/2049d  Inode: 2101099     Links: 1
Access: (0644/-rw-r--r--)  Uid: (1000/labex)   Gid: (1000/labex)
Access: 2023-05-15 14:41:05.000000000 +0000
Modify: 2023-05-15 14:35:12.000000000 +0000
Change: 2023-05-15 14:35:12.000000000 +0000
 Birth: -

Beachten Sie, dass sich nur die Zugriffszeit geändert hat, während die Änderungszeit und die Änderungszeit der Metadaten (ctime) unverändert bleiben.

Ändern der Dateiberechtigungen, um die Änderungszeit der Metadaten zu aktualisieren

Lassen Sie uns die Änderungszeit der Metadaten (ctime) aktualisieren, indem wir die Dateiberechtigungen ändern:

chmod 640 testfile.txt

Prüfen Sie erneut alle Zeitstempel:

stat testfile.txt

Ausgabe:

  File: testfile.txt
  Size: 19          Blocks: 8          IO Block: 4096   regular file
Device: 801h/2049d  Inode: 2101099     Links: 1
Access: (0640/-rw-r-----)  Uid: (1000/labex)   Gid: (1000/labex)
Access: 2023-05-15 14:41:05.000000000 +0000
Modify: 2023-05-15 14:35:12.000000000 +0000
Change: 2023-05-15 14:42:30.000000000 +0000
 Birth: -

Sie können sehen, dass die Änderungszeit der Metadaten (ctime) auf die aktuelle Zeit aktualisiert wurde, während die Zugriffszeit und die Änderungszeit unverändert bleiben.

Manipulation von Dateizeitstempeln mit touch

Der Befehl touch ermöglicht es Ihnen nicht nur, Dateien zu erstellen, sondern auch deren Zeitstempel zu aktualisieren. Dies ist nützlich für Tests oder wenn Sie die Zeitstempel zwischen Dateien synchronisieren müssen.

Aktualisieren aller Zeitstempel

Um alle Zeitstempel (Zugriff, Änderung und Metadatenänderung) auf die aktuelle Zeit zu aktualisieren:

touch testfile.txt

Prüfen Sie die Zeitstempel:

stat testfile.txt

Ausgabe:

  File: testfile.txt
  Size: 19          Blocks: 8          IO Block: 4096   regular file
Device: 801h/2049d  Inode: 2101099     Links: 1
Access: (0640/-rw-r-----)  Uid: (1000/labex)   Gid: (1000/labex)
Access: 2023-05-15 14:45:10.000000000 +0000
Modify: 2023-05-15 14:45:10.000000000 +0000
Change: 2023-05-15 14:45:10.000000000 +0000
 Birth: -

Aktualisieren nur der Zugriffszeit

Um nur die Zugriffszeit zu aktualisieren:

touch -a testfile.txt

Prüfen Sie die Zeitstempel:

stat testfile.txt

Ausgabe:

  File: testfile.txt
  Size: 19          Blocks: 8          IO Block: 4096   regular file
Device: 801h/2049d  Inode: 2101099     Links: 1
Access: (0640/-rw-r-----)  Uid: (1000/labex)   Gid: (1000/labex)
Access: 2023-05-15 14:46:15.000000000 +0000
Modify: 2023-05-15 14:45:10.000000000 +0000
Change: 2023-05-15 14:46:15.000000000 +0000
 Birth: -

Beachten Sie, dass auch die Änderungszeit der Metadaten (ctime) aktualisiert wird, da sich die Dateimetadaten geändert haben.

Aktualisieren nur der Änderungszeit

Um nur die Änderungszeit zu aktualisieren:

touch -m testfile.txt

Prüfen Sie die Zeitstempel:

stat testfile.txt

Ausgabe:

  File: testfile.txt
  Size: 19          Blocks: 8          IO Block: 4096   regular file
Device: 801h/2049d  Inode: 2101099     Links: 1
Access: (0640/-rw-r-----)  Uid: (1000/labex)   Gid: (1000/labex)
Access: 2023-05-15 14:46:15.000000000 +0000
Modify: 2023-05-15 14:47:20.000000000 +0000
Change: 2023-05-15 14:47:20.000000000 +0000
 Birth: -

Wiederum wird auch die Änderungszeit der Metadaten aktualisiert.

Festlegen spezifischer Zeitstempel

Sie können einen bestimmten Zeitstempel mit der Option -d in Verbindung mit touch festlegen:

touch -d "2023-01-01 12:00:00" testfile.txt

Prüfen Sie die Zeitstempel:

stat testfile.txt

Ausgabe:

  File: testfile.txt
  Size: 19          Blocks: 8          IO Block: 4096   regular file
Device: 801h/2049d  Inode: 2101099     Links: 1
Access: (0640/-rw-r-----)  Uid: (1000/labex)   Gid: (1000/labex)
Access: 2023-01-01 12:00:00.000000000 +0000
Modify: 2023-01-01 12:00:00.000000000 +0000
Change: 2023-05-15 14:48:30.000000000 +0000
 Birth: -

Dies setzt sowohl die Zugriffs- als auch die Änderungszeit auf den 1. Januar 2023, 12:00 Uhr. Die Änderungszeit der Metadaten wird immer noch auf die aktuelle Zeit aktualisiert.

Erstellen einer neuen Datei mit Zeitstempeln aus einer vorhandenen Datei

Sie können auch die Option -r verwenden, um auf die Zeitstempel einer anderen Datei zu verweisen:

## Create a new file
touch newfile.txt

## Set its timestamps based on testfile.txt
touch -r testfile.txt newfile.txt

Prüfen Sie die Zeitstempel der neuen Datei:

stat newfile.txt

Ausgabe:

  File: newfile.txt
  Size: 0           Blocks: 0          IO Block: 4096   regular empty file
Device: 801h/2049d  Inode: 2101100     Links: 1
Access: (0644/-rw-r--r--)  Uid: (1000/labex)   Gid: (1000/labex)
Access: 2023-01-01 12:00:00.000000000 +0000
Modify: 2023-01-01 12:00:00.000000000 +0000
Change: 2023-05-15 14:49:45.000000000 +0000
 Birth: -

Die Zugriffs- und Änderungszeiten von newfile.txt stimmen jetzt mit denen von testfile.txt überein.

Zusammenfassung

In diesem Lab haben Sie gelernt, wie Sie:

  • Die drei Arten von Dateizeitstempeln in Linux verstehen: Änderungszeit (Modification Time, mtime), Zugriffszeit (Access Time, atime) und Änderungszeit der Metadaten (Change Time, ctime)
  • Den ls-Befehl mit verschiedenen Optionen verwenden, um Dateizeitstempel anzuzeigen
  • Den stat-Befehl verwenden, um detaillierte Zeitstempelinformationen anzuzeigen
  • Dateiinhalte lesen, um die Zugriffszeit zu aktualisieren
  • Dateiberechtigungen ändern, um die Änderungszeit der Metadaten zu aktualisieren
  • Den touch-Befehl verwenden, um Dateizeitstempel manuell zu manipulieren
  • Spezifische Zeitstempel auf Dateien anwenden
  • Zeitstempel von einer Datei auf eine andere kopieren

Diese Fähigkeiten sind für eine effektive Dateiverwaltung und -überwachung in Linux unerlässlich. Dateizeitstempel helfen Ihnen, Änderungen zu verfolgen, Zugriffsmuster zu überwachen und sicherzustellen, dass Dateien ordnungsgemäß gewartet werden. Ob Sie ein Systemadministrator sind, der unbefugte Änderungen verfolgt, ein Entwickler, der dateiverwandte Probleme debuggt, oder ein normaler Benutzer, der seine Dateien organisiert - das Verständnis von Dateizeitstempeln ist eine wertvolle Fähigkeit in der Linux-Umgebung.