Ich weiß nur, dass ls -t und ls -f gibt eine unterschiedliche Sortierung von Dateien und Unterverzeichnissen in einem Verzeichnis an.

  • Was sind die Unterschiede zwischen Zeitstempel, Änderungszeit und Erstellungszeit einer Datei?
  • Wie kann man diese Art von Informationen mit Befehlen abrufen und ändern?
  • In Bezug auf welche Art von Informationen sagen die Leute, dass eine Datei „neuer“ ist als die andere?
  • Was Durch die Änderung der Arten von Informationen wird die Datei nicht anders?

Ich habe beispielsweise gesehen, dass jemand geschrieben hat:

Standardmäßig prüft das rsync-Programm nur, ob die Dateien in Größe und Zeitstempel unterschiedlich sind. Es ist egal, welche Datei neuer ist. Wenn sie unterschiedlich ist, wird sie überschrieben. Sie können das Flag „–update“ an rsync übergeben, wodurch Dateien am Ziel übersprungen werden, wenn sie neuer als die Datei in der Quelle sind, jedoch nur, solange es sich um denselben Dateityp handelt. Dies bedeutet, dass wenn beispielsweise die Quelldatei eine reguläre Datei und das Ziel ein Symlink ist, die Zieldatei unabhängig vom Zeitstempel überschrieben wird.

Bedeutet der Dateityp hier nur eine reguläre Datei und einen Simlink, nicht den Typ wie pdf, jpg, htm, txt usw.?

Kommentare

Antwort

Es gibt drei Arten von „Zeitstempeln“:

  • Zugriff – der letzte Zeitpunkt, an dem die Datei gelesen wurde
  • Ändern – das letzte Mal, dass die Datei geändert wurde (Inhalt wurde geändert)
  • Ändern – das letzte Mal, dass Metadaten der Datei geändert wurden (z. B. Berechtigungen)

Um diese Informationen anzuzeigen, können Sie stat verwenden, das Teil ist

stat zeigt Ihnen auch einige weitere Informationen wie das Gerät, Inodes, Links usw.

Beachten Sie, dass diese Art von Informationen stark vom Dateisystem und den Mount-Optionen abhängt. Wenn Sie beispielsweise eine Partition mit der Option noatime bereitstellen, werden keine Zugriffsinformationen geschrieben.

Ein Dienstprogramm zum Ändern der Zeitstempel wäre . Es gibt einige Argumente, um zu entscheiden, welcher Zeitstempel geändert werden soll (z. B. -a für die Zugriffszeit, -m für die Änderungszeit) und um das Parsen eines neuen gegebenen Zeitstempels zu beeinflussen. Weitere Informationen finden Sie unter man touch .

touch kann in Kombination mit cp -u nützlich sein ( „nur kopieren, wenn die SOURCE-Datei neuer als die Zieldatei ist oder wenn die Zieldatei fehlt“ ) oder für die Erstellung leerer Markierungsdateien.

Kommentare

  • Danke! Für den Befehl rsync ist es in “ ‚ egal, welche Datei neuer ist „, In Bezug auf welche Art von Zeitstempel bedeutet dies “ neuer „. Nebenbei bemerkt, bedeutet der Dateityp, den rsync interessiert, nur reguläre Datei und Simlink, nicht den Typ wie pdf, jpg, htm, txt usw.?
  • Verweisen Sie im Allgemeinen auf die Zeit von Eine Datei ist der “ modifizierte “ Zeitstempel. Zum Beispiel, was Sie unter ls -l sehen. Der Dateityp bezieht sich auf Datei vs. Symlink (oder andere Dateitypen wie Verzeichnisse oder Geräte). Nicht wie die Art der Daten in der Datei ist (Text vs. JPEG usw.).
  • @Tim In diesem Zusammenhang ist es ‚ s der geänderte Zeitstempel; rsync sagt, dass wenn ‚ entscheidet, ob eine Datei gesichert werden soll, ‚ nicht überprüft wird, ob die Quelldatei vorhanden ist wurde kürzlich geändert als das vorhandene Backup (was bei Backup-Programmen üblich ist); Es wird nur überprüft, ob die Dateien unterschiedliche Größen oder Änderungszeiten haben, und wenn ja, gesichert.
  • Und woher weiß ich, wann die Datei zuerst erstellt wurde? Werden diese Informationen überhaupt irgendwo gespeichert oder gehen sie bei Updates verloren? Sozusagen, wie lange existiert die Datei schon?
  • Die Manpage stat (2) beschreibt detaillierter, wann Diese Zeitstempel werden geändert.

Antwort

Die Antwort von echox ist gültig, aber ich möchte Informationen zur Datei hinzufügen Erstellungszeit.

Dateisystemunterstützung

Einige Dateisysteme unterstützen einen zusätzlichen Eintrag im Inode bezüglich der Erstellungszeit (oder der Geburtszeit). Ich weiß, dass ext4 diese Funktion unterstützt und auch JFS und BTRFS .

Die meisten Tools und APIs wurden jedoch noch nicht aktualisiert, um diese zusätzlichen Informationen zu lesen.Obwohl es dort sein könnte, ist es nicht zugänglich.

Zum Beispiel erhalte ich unter Ubuntu 12.04 LTS Folgendes für eine Datei, die ich heute erstellt habe:

$ echo Just another test > /tmp/mytest $ sleep 3 $ touch /tmp/mytest $ sleep 2 $ cat /tmp/mytest > /dev/null $ stat /tmp/mytest [...] Access: 2012-06-05 13:33:44.279774711 +0200 Modify: 2012-06-05 13:33:34.611893317 +0200 Change: 2012-06-05 13:33:34.611893317 +0200 Birth: - $ sudo debugfs -R "stat /tmp/mytest" /dev/sda1 [...] ctime: 0x4fcdee8e:91e30114 -- Tue Jun 5 13:33:34 2012 atime: 0x4fcdee98:42b417dc -- Tue Jun 5 13:33:44 2012 mtime: 0x4fcdee8e:91e30114 -- Tue Jun 5 13:33:34 2012 crtime: 0x4fcdee46:01258f1c -- Tue Jun 5 13:32:22 2012 [...] 

Sie können sehen, dass die neuere Statistikfunktion ein Geburtsfeld hat, obwohl die Ausgabe falsch zu sein scheint. Und über Debugfs können wir die Informationen erhalten (crtime, da ich im ext4-Dateisystem bin).

statx-Unterstützung

Seit Kernel 4.11 gibt es jetzt einen neuen statx-Systemaufruf , zusätzlich zu einer besseren Unterstützung von Y2038 oder Netzwerk Dateisysteme bietet es auch einige zusätzliche Funktionen wie den Zugriff btime oder den Zugriff auf die Geburtszeit (Erstellungszeit). Die Unterstützung für ext4 sollte in derselben Kernel-Version 4.11 enthalten sein.

In späteren Kernel-Versionen wurden Patches hinzugefügt, um diesen neuen Systemaufruf zu unterstützen: z. BTRFS und F2FS in Kernel 4.13, SMB3 in 4.14, GFS2 in 4.15, NFS in 4.16 usw.

Der kommende glibc bietet einen Funktionsaufruf zum Abfragen dieser Schnittstelle (siehe Phoronix-Nachrichten zur Unterstützung von glibc statx ). Daher können wir bald Unterstützung für diese Funktion im Benutzerbereich erwarten.

Kommentare

  • Wissen Sie, ob btime bei Dateien von Windows (Erstellung) intakt bleibt? Zeit) werden auf ext4 verschoben und umgekehrt, wie mtime?
  • @paradroid Entschuldigung, ich kenne die Antwort nicht. Wenn Sie unter Linux meinen, wenn Sie eine Datei von NTFS nach ext4 kopieren, müssen Sie im NTFS-Treiber nachsehen, ob er die Erstellungszeit unterstützt. Wenn Sie unter Windows meinen, müsste man im ext4-Treiber nach Windows suchen.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.