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, für example, aktualisiert den geänderten Zeitstempel.

Das Standard-Ext4-Linux-Dateisystem weist in seinen internen Dateisystemstrukturen auch Platz für einen Dateierstellungs-Zeitstempel 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 leichter 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. 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 das verwenden -l (lange Auflistung) Option mit ls , Wie nachfolgend dargestellt, Sie können den geänderten Zeitstempel sehen :

                      ls -l dp.c
                    

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

                      ls -lu dp.c
                    

Und schließlich, um den Änderungszeitstempel zu sehen, können Sie die -lc (Zeit ändern) Option; geben Sie Folgendes ein:

                      ls -lc dp.c
                    


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.

Zu alle Zeitstempel gleichzeitig sehen , benutze die stat Befehl wie folgt:

                      stat dp.c
                    

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 a -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 . angezeigt werden stat . 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.

Alles, was Sie schon immer über Inodes unter Linux wissen wollten

Zeitstempel ändern

Wenn Sie möchten, können Sie die Zeitstempel einer Datei ändern. Du kannst den … benutzen touch Befehl zum Ändern des Zugriffs oder geänderter Zeitstempel, oder beides:

                      touch -a dp.c
                    

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

                      stat dp.c
                    

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

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

                      touch -m dp.c
                    
                      stat dp.c
                    

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

Du kannst den … benutzen -d (Datum) Option, 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 -r (Referenz) Option, 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
                    

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

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

                      chmod +x dp
                    
                      stat dp
                    

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 verwenden Sie den chmod-Befehl unter Linux

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 im /etc/fstab Datei, 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:

  • streng (strenge Zeit) : Diese Option aktualisiert den Zugriffszeitstempel von Dateien bei jedem Zugriff. Dieser Ansatz ist mit einem Overhead verbunden, aber einige Server können von diesem Schema profitieren. Es hat wenig Wert auf einem Desktop- oder Laptop-Computer.
  • noatime (keine Zeit): Diese Option deaktiviert die Aktualisierung der Zugriffszeitstempel für Dateien und Verzeichnisse vollständig. Die geänderten Zeitstempel werden jedoch weiterhin aktualisiert.
  • nodiratime (nicht 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 aktuellen geänderten oder geänderten Zeitstempel. Dies schafft ein gutes Gleichgewicht zwischen Zugriffszeitstempeln, die zu häufig oder überhaupt nicht aktualisiert werden.


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

                      less /etc/fstab
                    

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

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).
#
# <file system> <mount point> <type> <options> <dump> <pass>
# / 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 Stammverzeichnis des Dateisystems gemountet ( / ) und war auf dem Gerät /dev/sda1 zum Zeitpunkt der Installation. Das ist die erste Partition auf der ersten Festplatte, und sie enthält zufällig ein ext4 Dateisystem.

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

Es wird also nicht erwähnt, wie der Zugriffszeitstempel behandelt wird. Lass uns tiefer graben und schauen, was /proc/mounts kann es uns sagen. Wir leiten die Ausgabe von /proc/mounts durch grep . 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 eingehängt.
  • rel : Das Dateisystem verwendet das „relative atime“-Schema, um die Zugriffszeitstempel zu aktualisieren.


Woher kommt das? Also, die relatime Schema wird in den folgenden Situationen verwendet:

  • Wenn das Standardeinstellungen /etc/fstab Option verwendet wird.
  • Wenn das rel /etc/fstab Option verwendet wird.
  • Wenn keine Zugriffszeitstempeloptionen verwendet werden in /etc/fstab , und Sie verwenden den Linux-Kernel 2.6.30 oder neuer.

Unsere /etc/fstab Eintrag für die ext4 Dateisystem keine Aktualisierungsoptionen für den Zugriffszeitstempel angegeben, also hat Linux die vernünftige Wahl getroffen und verwendet relatime .

So schreiben Sie eine fstab-Datei unter Linux

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, wird sich als nützlich erweisen, wenn Sie ein Programm gewaltsam davon überzeugen müssen, eine Datei oder einen Satz von Dateien einzuschließen oder zu ignorieren.

Linux-Befehle
Dateien Teer · pv · Katze · tac · chmod · grep · unterschied · sed · Mit · Mann · geschoben · popd · fsck · Testdisk · seq · fd · pandoc · CD · $PFAD · awk · beitreten · jq · falten · einzigartig · journalctl · Schwanz · stat · ls · fstab · Echo · weniger · chgrp · chown · Rev · aussehen · Saiten · Typ · umbenennen · Postleitzahl · entpacken · montieren · ummount · Installieren · fdisk · mkfs · rm · rmdir · rsync · df · gpg · wir · Nano · mkdir · von · ln · Patch · Konvertieren · rclon · Fetzen · srm
Prozesse alias · Bildschirm · oben · nett · renice · Fortschritt · strace · System · tmux · chsh · Geschichte · bei · Charge · kostenlos · welcher · dmesg · chfn · Benutzermod · ps · chroot · xargs · tty · kleiner Finger · lsof · vmstat · Auszeit · Mauer · Jawohl · töten · Schlaf · sudo · es ist · Zeit · groupadd · Benutzermod · Gruppen · lshw · abschalten · neustarten · Halt · ausschalten · passwd · lscpu · crontab · Datum · bg · fg
Vernetzung netstat · Klingeln · Traceroute · ip · ss · Wer ist · fail2ban · bmon · Sie · Finger · nmap · ftp · curl · wget · Wer · Wer bin ich · w · iptables · ssh-keygen · ufw

Beste Linux-Laptops für Entwickler und Enthusiasten

Related Posts