Ich weiß nur, dass ls -t
und ls -f
geben Sie verschiedene Sortierungen von Dateien und Unterverzeichnissen unter einem Verzeichnis.
- Was sind die Unterschiede zwischen Zeitstempel, Änderungszeit und Erstellungszeit einer Datei?
- Wie kann man solche Informationen mit Befehlen abrufen und ändern?
- In Bezug auf welche Art von Informationen sagen die Leute, eine Datei sei "neuer" als die andere?
- Welche Art von Informationsänderung wird die Datei nicht anders machen?
Zum Beispiel habe ich gesehen, dass jemand schrieb:
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 es anders ist, wird es überschrieben. Sie können das Flag '--update' an rsync übergeben, wodurch Dateien auf dem Ziel übersprungen werden, wenn sie neuer sind als die Datei auf der Quelle, jedoch nur, solange sie vom selben Dateityp sind. Dies bedeutet, dass, wenn zum Beispiel 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 normale Datei und Simlink, nicht der Typ wie PDF, JPG, HTM, TXT usw.?
quelle
Antworten:
Es gibt 3 Arten von "Zeitstempeln":
Um diese Informationen anzuzeigen, können Sie verwenden,
stat
welches Teil der coreutils ist.stat
zeigt Ihnen auch einige weitere Informationen wie das Gerät, Inodes, Links usw.Denken Sie daran, dass diese Art von Informationen stark vom Dateisystem und den Mount-Optionen abhängt. Wenn Sie beispielsweise eine Partition mit dieser
noatime
Option bereitstellen, werden keine Zugriffsinformationen geschrieben.Ein Dienstprogramm zum Ändern der Zeitstempel wäre
touch
. 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 Zeitstempels zu beeinflussen. Sieheman touch
für mehr Details.touch
kann in Kombination mitcp -u
( "Kopieren nur, wenn die SOURCE-Datei neuer ist als die Zieldatei oder wenn die Zieldatei fehlt" ) oder zum Erstellen leerer Markierungsdateien nützlich sein.quelle
ls -l
. Und der Dateityp bezieht sich auf Datei vs. Symlink (oder andere Dateitypen wie Verzeichnisse oder Geräte). Es ist nicht der Datentyp in der Datei (Text vs. JPEG usw.).Die Antwort von echox ist gültig, aber ich möchte Informationen zum Zeitpunkt der Dateierstellung hinzufügen.
Dateisystem-Unterstützung
Einige Dateisysteme unterstützen einen zusätzlichen Eintrag im Inode bezüglich der Erstellungszeit (oder der Geburtszeit). Ich weiß, dass ext4 diese Funktion und auch JFS und BTRFS unterstützt .
Die meisten Tools und APIs wurden jedoch noch nicht aktualisiert, um diese zusätzlichen Informationen zu lesen. Also, obwohl es dort sein könnte, ist es nicht zugänglich.
Unter Ubuntu 12.04 LTS erhalte ich beispielsweise für eine Datei, die ich heute erstellt habe, Folgendes:
Sie können sehen, dass die neuere stat-Funktion ein Geburtsfeld hat, obwohl die Ausgabe falsch zu sein scheint. Und über debugfs können wir die Informationen erhalten (crtime wie ich auf ext4-Dateisystem bin).
Statx-Unterstützung
Es gibt jetzt seit Kernel 4.11 ein neuer STATx Systemaufruf , oben auf einem besseren Unterstützung von Y2038 oder Netzwerk - Dateisystemen, sondern bringt auch ein paar zusätzliche Funktionen wie die
btime
oder Geburtszeit (Erstellungszeit) Zugang. Die Unterstützung für ext4 sollte in derselben Kernelversion 4.11 enthalten sein.Es gab Patches, die dieses neue System in späteren Kernel-Releases unterstützen: z. B. BTRFS und F2FS in Kernel 4.13, SMB3 in 4.14, GFS2 in 4.15, NFS in 4.16 usw.
Das kommende glibc wird einen Funktionsaufruf zur Abfrage dieser Schnittstelle bereitstellen (siehe Phoronix-News zur Unterstützung von glibc statx ). Daher können wir bald Unterstützung für diese Funktion im User Space erwarten.
quelle