44

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

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

2 ответа2

63

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

Если вы хотите изменить формат, обратитесь к справочным страницам, поскольку вывод зависит от ОС и зависит от 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'
16

Для каждого из ваших файлов хранится только три разных значения времени, как определено стандартом POSIX : http://pubs.opengroup.org/onlinepubs/9699919799/ (см. Раздел « Базовые определения » -> 4). Общие понятия -> 4.8 File Times Update)

С каждым файлом связаны три различные временные метки: время последнего доступа к данным, время последней модификации данных и время последнего изменения статуса файла. Эти значения возвращаются в структуре структуры характеристик файла, как описано в <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. чтобы увидеть аналогичный формат вывода.

$ 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. время

Во-первых, давайте получим доступ к данным файла, прочитав их (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. время

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

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .