Gibt es einen Befehl in Linux, um alle Zeitstempel einer Datei zu überprüfen?
Ich versuche, das Datum der letzten Änderung, Erstellung und Berührung der Datei zu sehen.
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.
Im Allgemeinen können Sie die Zeiten auch über eine normale Verzeichnisliste erhalten:
ls -l
gibt die letzte Zeit aus, zu der der Dateiinhalt geändert wurde, 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 von Diskussionen 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 Folgendes verwenden
stat --printf '%n\nmtime: %y\nctime: %z\natime: %x\ncrtime:%w\n'
Es gibt nur DREI verschiedene Zeitwerte, die für jede Ihrer Dateien gespeichert werden, wie im POSIX-Standard definiert: http://pubs.opengroup.org/onlinepubs/9699919799/ (siehe Abschnitt Basisdefinitionen -> 4. Allgemeine Konzepte -> 4.8 File Times Update)
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 aus <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.
Die folgenden 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.
Zuerst greifen wir auf die Daten der Datei zu, 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
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 immer noch derselbe ist wie bei ihrer Erstellung.
Schließlich verändern wir den Inhalt der Datei, 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!
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 (Dateierstellungszeit). Auch wenn sie im Moment noch nicht die richtige 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: -