Linux/Datei/Zeit

Aus Foxwiki
Version vom 16. Oktober 2024, 11:46 Uhr von Dirkwagner (Diskussion | Beiträge) (Textersetzung - „= Fehlerbehebung =“ durch „= Bekannte Probleme =“)

Zeitstempel - Zeitpunkte von Änderungen an Dateien

Beschreibung

Der Informationsknoten (Inode) von Dateien hat Platz für 4 Zeitstempel

  • Kernel 5.16.7-2 (2022-02-09), werden drei genutzt
Zeitstempel Kurzbezeichnung Beschreibung
Access atime Datei geöffnet
Modify mtime Inhalt verändert
Change ctime Metadaten verändert
Birth Datei erstellt

Access

Access Time (atime)

Diese Zeit wird jedes mal neu gesetzt, wenn der Inhalt der Datei geöffnet worden ist

  • In ihm wird also der letzte Zugriff auf den Inhalt der Datei angezeigt.
  • Dabei ist es für diesen Zeitstempel von Bedeutung, ob die Datei vor einem schreiben erst gelesen wird oder nur an das Ende weitergeschrieben wird.
  • Ansonsten gilt, egal ob die Datei gelesen oder ausgeführt wird oder ob eine Kopie von dieser Datei gemacht wird, oder die Datei durchsucht wird, oder die Datei in ein Backuparchiv aufgenommen wird - immer wird dieser Zeitstempel neu auf die aktuelle Zeit gesetzt.
  • Durch die Auswertung dieses Zeitstempels könnten wir also zum Beispiel
  • feststellen, das wir eine Datei schon einen längeren Zeitraum nicht mehr angefasst haben.
  • Das kann unter Anderem dabei helfen alte temporäre User- oder Systemdateien zu löschen.
  • Das ständige setzen der Access Time von Dateien und Verzeichnissen kann bei sehr vielen Zugriffen in einem Filesystem eine nicht unbedeutende Last verursachen, in bestimmten Situationen ist dieses aus Performancegründen nicht gewünscht, und kann deshalb zum Beispiel
  • mit Mountoptionen des Filesystems für alle Dateien oder alle Verzeichnisse abgeschaltet werden.
  • Einige Filesysteme erlauben auch ein gezieltes Abschalten dieser ständigen atime Aktualisierungen für ausgewählte Dateien oder Verzeichnisse.

Modify

Modify Time (mtime)

Diese Zeit wird gesetzt, wenn der Inhalt der Datei verändert wird

  • In diesem Zeitstempel steht also die Zeit der letzten Veränderung der Dateidaten.
  • Es ist der Zeitstempel, der für uns die meiste Bedeutung hat.
  • Können wir doch damit feststellen, wie aktuell die Dateidaten sind.
  • Diese Zeit wird zum Beispiel bei ls -l in der default Einstellung angezeigt.

Change

Change Time (ctime)

Mit diesem Zeitstempel wird die Zeit gespeichert, zu welcher das letzte Mal die Daten innerhalb des Inodes geändert worden sind

  • Wenn man sich anschaut, welche Daten im Inode enthalten sind, kann man schon erahnen, wann diese Zeit neu gesetzt wird.
  • Bei einem Ändern des Dateiinhaltes werden die Dateigröße sowie die Datenblöcke neu gesetzt, beim Ändern der Zugriffsrechte, der UserID oder GruppenID, beim Anlegen eines neuen Hardlinks immer wird auch der Inhalt des Inodes geändert und damit auch die ctime neu gesetzt.
  • Aber auch bei einem Umbenennen der Datei, wird die ctime neu gesetzt, (man muss sich dabei vorstellen, das beim Umbenennen die Anzahl der "Links" zuerst um 1 erhöht wird, dann wird der neue Name angelegt, und dann anschließend der alte Name gelöscht und die "Links" wieder um 1 verringert).
  • Es gibt eine einzige Ausnahme bei der die ctime nicht gesetzt wird: wenn durch das Auslesen der Datei nur die Access Time im Inode neu gesetzt wird, also die Datei zum Beispiel
  • ausgelesen wird, dann wird die Change Time nicht neu gesetzt.
  • Dieser Zeitstempel hat eine große Bedeutung beim Backup, da damit nicht nur festgestellt werden kann, ob sich der Inhalt der Datei, sondern auch der Name oder die Eigentums- oder Zugriffsrechte einer Datei seit dem letzten Backup geändert haben.
  • Während sich die anderen beiden Zeitstempel durch Befehle auf eine bestimmte Zeit manipulieren lassen, ist es nicht möglich die ctime auf diese Art zu setzen.

Unterschiede bei Dateitypen

Bei der Interpretation der Zeitstempel müssen wir weiterhin unterscheiden, ob es sich um eine "normale" Datei oder zum Beispiel um ein Verzeichnis handelt.

  • Die Funktion der Zeitstempel ist bei allen Dateitypen prinzipiell gleich, allerdings durch den speziellen Aufbau und die Funktion einzelner Dateitypen ergibt sich eine etwas andere Betrachtungsweise.
  • Bei den Verzeichnissen bedeutet die atime, das Verzeichnis wurde gelesen zum Beispiel
  • mit ls, die mtime bedeutet es wurde in diesem Verzeichnis an den Namen der Dateien etwas geändert, oder Dateien sind in diesem Verzeichnis dazu gekommen oder entfernt worden.

Pipes und Geräteknoten zeigen prinzipiell analoges Verhalten wie normale Dateien, es gibt jedoch einige Besonderheiten bei Symbolischen Links.

  • Die atime wird hier immer dann gesetzt, wenn über diesen Weg auf die verlinkte Datei zugegriffen wird.
  • Die ctime wird gesetzt bei Eigentumswechsel oder Umbenennen der Datei.
  • Da der eigentliche Inhalt des Softlinks, der Verweis auf die Datei nicht geändert werden kann, wird die mtime nur bei der Erstellung des Softlinks gesetzt.
  • Beim Versuch mittels chmod oder touch auf den Inode des Softlinks zuzugreifen, wird statt dessen dem Link gefolgt und der Zugriff erfolgt dort auf den Inode der verlinkten Datei.

Dateioperation

Zeitstempel und Dateioperation

Änderung der Zeitstempel verschiedener Dateitypen bei Befehlen

Die Tabelle zeigt häufige Befehle und ihre Auswirkungen auf die Zeitstempel von Verzeichnissen, normalen Dateien und Softlinks

Dabei entspricht

  • ( X ) dieser Zeitstempel wird neu gesetzt
  • ( . ) dieses Zeitstempels bleibt unverändert
  • ( - ) auf Softlinks wurden nicht alle Befehle getestet oder sind wirkungslos
Befehl Übergeordnetes Verzeichnis Datei Softlink auf Datei
atime mtime ctime atime mtime ctime atime mtime ctime
ls * X . . . . . X . .
cat * X . . X . . X . .
find X . . . . . . . .
grep X . . X . . X . .
echo "neue Zeile" >> Datei . . . . X X - - -
echo "neue Zeile" >> Softlink X . . . X X X . .
mv . X X . . X . . X
ln . X X . . X - - -
chmod . . . . . X - - -
chown . . . . . X . . X
tar -cf ../Archiv.tar ./ X . . X . . X . .
tar -xf ../Archiv.tar X . X X . X X X X

Anwendung

Zeitstempel anzeigen

Zeitstempel ändern

Zeitstempel suchen

Backup und Zeitstempel

Bekannte Probleme

$ find .  -mtime +15000 -exec touch \{\} \; 2>/dev/null


Anhang

Siehe auch