2012-02-07 14:59:56 +0000 2012-02-07 14:59:56 +0000
54
54

Wie prüfe ich alle Zeitstempel einer Datei?

Gibt es einen Befehl in Linux, um alle Zeitstempel einer Datei zu überprüfen?

Ich versuche, das letzte Änderungs-, Erstellungs- und Berührungsdatum der Datei zu sehen.

Antworten (2)

75
75
75
2012-02-07 15:03:39 +0000

Der Befehl heißt stat .

$ stat test
234881026 41570368 -rw-r--r-- 1 werner staff 0 0 "Feb 7 16:03:06 2012" "Feb 7 16:03:06 2012" "Feb 7 16:03:06 2012" "Feb 7 16:03:06 2012" 4096 0 0 test

Wenn Sie das Format anpassen wollen, sehen Sie in den Man Pages nach, da die Ausgabe betriebssystemspezifisch ist und unter Linux/Unix variiert.

Generell können Sie die Zeiten auch über eine normale Verzeichnisauflistung erhalten:

  • ls -l gibt die letzte Zeit der Änderung des Dateiinhalts aus, die mtime
  • ls -lc gibt die letzte Zeit der Änderung des Dateistatus aus, die ctime Was ist der Unterschied? )
  • ls -lu gibt die letzte Zugriffszeit aus, die atime (obwohl die Nützlichkeit dieses Konzepts Gegenstand der Diskussion ist )

Und natürlich zeichnet ctime nicht auf, wann eine Datei “erstellt” wurde. Die POSIX-Spezifikation definiert nur drei Zeitstempel, aber einige Linux-Dateisysteme speichern Birth Time/Creation Time. Wie findet man das Erstellungsdatum einer Datei? Bei einer solchen unterstützten Konfiguration könnte man

stat --printf '%n\nmtime: %y\nctime: %z\natime: %x\ncrtime:%w\n'
``` verwenden
21
21
21
2014-03-15 09:24:38 +0000

Für jede Ihrer Dateien sind nur DREI verschiedene Zeitwerte gespeichert, wie im POSIX-Standard definiert: http://pubs.opengroup.org/onlinepubs/9699919799/ (siehe Abschnitt Basisdefinitionen -> 4. Allgemeine Konzepte -> 4.8 Aktualisierung der Dateizeiten)

Jede Datei hat drei verschiedene zugehörige Zeitstempel: den Zeitpunkt des letzten Datenzugriffs , den Zeitpunkt der letzten Datenänderung und den Zeitpunkt der letzten Änderung des Dateistatus. Diese Werte werden in der Dateieigenschaftsstruktur struct stat zurückgegeben, wie in <sys/stat.h> _ beschrieben.

Und von <sys/stat.h> :

atime is for Last data access timestamp.
mtime is for Last data modification timestamp.
ctime is for Last file status change timestamp.

Folgende Beispiele zeigen den Unterschied zwischen atime , mtime und ctime , diese Beispiele sind in GNU/Linux BASH. Sie können stat -x in Mac OS X oder anderen BSD Dist. verwenden, um ein ähnliches Ausgabeformat zu sehen.

$ stat --version
stat (GNU coreutils) 8.4
Copyright (C) 2010 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Written by Michael Meskes.
$
$ touch test
$ stat test
  File: `test'
  Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: 811h/2065d Inode: 98828525 Links: 1
Access: (0664/-rw-rw-r--) Uid: ( 514/ rank) Gid: ( 514/ rank)
Access: 2014-03-16 10:58:28.609223953 +0800
Modify: 2014-03-16 10:58:28.609223953 +0800
Change: 2014-03-16 10:58:28.609223953 +0800

Wenn die Datei gerade erstellt wird, sind die drei Zeitstempel gleich.


1. atime

Zuerst wollen wir auf die Daten der Datei zugreifen, indem wir sie lesen (less oder vim), ausdrucken (cat) oder in eine andere Datei kopieren (cp).

$ cat test #Nothing will be printed out, since the file is empty
$ stat test
  File: `test'
  Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: 811h/2065d Inode: 98828525 Links: 1
Access: (0664/-rw-rw-r--) Uid: ( 514/ rank) Gid: ( 514/ rank)
Access: 2014-03-16 10:59:13.182301069 +0800 <-- atime Changed!
Modify: 2014-03-16 10:58:28.609223953 +0800
Change: 2014-03-16 10:58:28.609223953 +0800

2. ctime

Jetzt ändern wir den Status der Datei, indem wir die Berechtigung ändern (chmod) oder sie umbenennen (mv)

$ chmod u+x test
$ stat stet
  File: `test'
  Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: 811h/2065d Inode: 98828525 Links: 1
Access: (0764/-rwxrw-r--) Uid: ( 514/ rank) Gid: ( 514/ rank)
Access: 2014-03-16 10:59:13.182301069 +0800
Modify: 2014-03-16 10:58:28.609223953 +0800
Change: 2014-03-16 11:04:10.178285430 +0800 <-- ctime Changed!
$    
$ mv test testing
$ stat testing
  File: `testing'
  Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: 811h/2065d Inode: 98828525 Links: 1
Access: (0764/-rwxrw-r--) Uid: ( 514/ rank) Gid: ( 514/ rank)
Access: 2014-03-16 10:59:13.182301069 +0800
Modify: 2014-03-16 10:58:28.609223953 +0800
Change: 2014-03-16 11:06:33.342207679 +0800 <-- ctime Changed again!

Beachten Sie, dass der Inhalt ( Daten ) der Datei bis jetzt noch derselbe ist wie bei ihrer Erstellung.


3. mtime

Schließlich wollen wir den Inhalt der Datei verändern, indem wir die Datei bearbeiten.

$ echo 'Modify the DATA of the file' > testing
$ echo 'Modify the DATA of the file also change the file status' > testing
$ stat testing
  File: `testing'
  Size: 56 Blocks: 8 IO Block: 4096 regular file
Device: 811h/2065d Inode: 98828525 Links: 1
Access: (0764/-rwxrw-r--) Uid: ( 514/ rank) Gid: ( 514/ rank)
Access: 2014-03-16 10:59:13.182301069 +0800
Modify: 2014-03-16 11:09:48.247345148 +0800 <-- mtime Changed!
Change: 2014-03-16 11:09:48.247345148 +0800 <-- ctime also Changed!

4. Geburtszeit

Beachten Sie auch, dass die neuere Version von stat (z. B. stat --version 8.13 in Ubuntu 12.04) 4. Zeitstempel-Informationen hat - die Geburtszeit (Erstellungszeit der Datei). Auch wenn sie möglicherweise nicht die korrekte Zeit anzeigt:

$ stat --version
stat (GNU coreutils) 8.13
Copyright (C) 2011 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Written by Michael Meskes.
$
$ stat birth_time
  File: `birth_time'
  Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: 805h/2053d Inode: 4073946 Links: 1
Access: (0664/-rw-rw-r--) Uid: ( 1000/ bingyao) Gid: ( 1000/ bingyao)
Access: 2014-03-16 10:46:48.838718970 +0800
Modify: 2014-03-16 10:46:48.838718970 +0800
Change: 2014-03-16 10:46:48.838718970 +0800
 Birth: -