Jak sprawdzić wszystkie znaczniki czasowe pliku?
Czy istnieje polecenie w Linuksie do sprawdzenia wszystkich znaczników czasowych pliku?
Próbuję zobaczyć datę ostatniej modyfikacji, utworzenia i dotknięcia pliku.
Czy istnieje polecenie w Linuksie do sprawdzenia wszystkich znaczników czasowych pliku?
Próbuję zobaczyć datę ostatniej modyfikacji, utworzenia i dotknięcia pliku.
Polecenie to nazywa się 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
Jeśli chcesz dostosować format, zajrzyj do stron man, ponieważ dane wyjściowe są specyficzne dla systemu operacyjnego i różnią się pod Linuksem/Uniksem.
Ogólnie rzecz biorąc, możesz uzyskać czasy również poprzez zwykłe listowanie katalogów:
ls -l
wyprowadza ostatni czas modyfikacji zawartości pliku, mtime
ls -lc
wyprowadza ostatni czas modyfikacji statusu pliku, ctime
Co za różnica? ) ls -lu
wyprowadza ostatni czas dostępu, atime
(choć przydatność tej koncepcji jest przedmiotem dyskusji ) I oczywiście ctime
nie rejestruje, kiedy plik został “utworzony”. Specyfikacja POSIX definiuje tylko trzy timestampy, ale niektóre systemy plików Linuksa przechowują Birth Time/Creation Time. Jak znaleźć datę utworzenia pliku? ](https://unix.stackexchange.com/q/91197/1664) Na takiej obsługiwanej konfiguracji można by użyć
stat --printf '%n\nmtime: %y\nctime: %z\natime: %x\ncrtime:%w\n'
```.
Istnieją tylko Trzy różne wartości czasu przechowywane dla każdego z twoich plików, zgodnie z definicją POSIX Standard : http://pubs.opengroup.org/onlinepubs/9699919799/ (patrz rozdział Definicje podstawowe - 4. Pojęcia ogólne - 4.8 Aktualizacja czasów plików)
Każdy plik posiada trzy różne powiązane znaczniki czasu: czas ostatniego dostępu do danych , czas ostatniej modyfikacji danych oraz czas ostatniej zmiany statusu pliku. Wartości te są zwracane w strukturze właściwości pliku struct stat, jak opisano w <sys/stat.h> _.
I z {
atime is for Last data access timestamp.
mtime is for Last data modification timestamp.
ctime is for Last file status change timestamp.
Poniższe przykłady pokazują różnicę pomiędzy atime , mtime i ctime , te przykłady są w GNU/Linux BASH. Możesz użyć stat -x
w Mac OS X lub innym BSD Dist. aby zobaczyć podobny format wyjścia.
$ 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
Kiedy plik zostanie utworzony, trzy znaczniki czasu są takie same.
Po pierwsze, dostęp do danych pliku przez odczytanie ich (less
lub vim
), wydrukowanie (cat
) lub skopiowanie do innego pliku (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
Teraz zmieńmy stan pliku, poprzez zmianę uprawnień (chmod
) lub zmianę jego nazwy (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!
Zauważmy, że do tej pory zawartość ( dane ) pliku jest wciąż taka sama jak w momencie jego utworzenia.
Na koniec zmodyfikujmy zawartość pliku poprzez jego edycję.
$ 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!
Zwróćmy też uwagę, że nowsza wersja stat
(np. stat --version 8.13
w Ubuntu 12.04) posiada 4. informację o znaczniku czasu - Birth Time (czas utworzenia pliku). Chociaż może to nie pokazywać poprawnego czasu na razie:
$ 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: -