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

Как проверить все временные метки файла?

Advertisement

Есть ли в Linux команда для проверки всех временных меток файла?

Я пытаюсь увидеть последние измененные, созданные и коснувшиеся даты в файле.

Advertisement
Advertisement

Ответы (2)

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

Команда называется 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

Если вы хотите настроить формат, обратитесь к man-страницам, так как вывод зависит от операционной системы и изменяется под Linux/Unix.

Обычно, вы можете получить время и через обычный список каталогов:

  • ls -l выводит последний раз, когда содержимое файла было изменено, mtime
  • ls -lc выводит последний раз, когда статус файла изменен, ctime Какая разница? )
  • ls -lu выводит последний раз, atime (хотя полезность этой концепции предмет обсуждения )

И конечно же, ctime не записывает, когда файл был “создан”. Спецификация POSIX определяет только три метки времени, но некоторые файловые системы Linux хранят время рождения/создания. Как найти дату создания файла? В такой поддерживаемой конфигурации можно использовать

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

Для каждого из ваших файлов хранятся только THREE определенные значения времени, как это определено в стандарте POSIX Standard : http://pubs.opengroup.org/onlinepubs/9699919799/ (см. раздел Base Definitions -> 4. Общие понятия -> 4.8 Обновление времени файлов)

Каждый файл имеет три различных связанных с ним метки времени: время последнего доступа к данным , время последнего изменения данных и время последнего изменения статуса файла. Эти значения возвращаются в структурном описании структуры файловых характеристик, как описано в <sys/stat.h> _.

И из [ <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.

Следующие примеры показывают разницу между atime , mtime и ctime , эти примеры находятся в GNU/Linux BASH. Вы можете использовать stat -x в Mac OS X или другой BSD Dist. для просмотра аналогичного выходного формата.

$ 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

Когда файл только что создан, три временные метки одинаковы.


1. atime

Сначала давайте доступим к данным файла, прочитав его (less или vim), распечатав (cat) или скопировав в другой файл (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

Теперь давайте изменим статус файла, изменив разрешение (chmod) или переименовав его (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!

Обратите внимание, что до сих пор содержимое ( данные ) файла оставалось тем же, что и при его создании.


3. mtime

Наконец, давайте модифицируем содержимое файла путем редактирования файла.

$ 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. время рождения

Также обратите внимание, что более новая версия stat (например, stat --version 8.13 в Ubuntu 12.04) имеет 4-ю метку времени - Время рождения (время создания файла). Хотя на данный момент она может показывать неправильное время:

$ 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: -
Advertisement

Похожие вопросы

6
10
5
37
13
Advertisement