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


52

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

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


4
Просто чтобы указать, файлы Linux не имеют даты рождения. Таким образом, невозможно определить дату создания файла.
FatalError

заметил, что = (. Спасибо, что указал мне на это.
Mechaflash

4
@FatalError: Различные файловые системы уже поддерживают метки времени рождения / создания; настоящая проблема в доступе к такой дополнительной информации. (К struct statсожалению, нельзя просто расширяться, не ломая вещи). Вы можете попробовать debugfs -R "stat <1234>" /dev/sdXYext4, заменив его 1234на ino.
Гравитация

@ Grawity: аккуратно! Я всегда задавался вопросом, почему ни у одного fs не было этого ... но я думаю, что они есть, но, как вы сказали, не может просто сломать ABI для существующих двоичных файлов. Спасибо за совет :).
FatalError

1
@FatalError, время рождения можно отобразить statкомандой Linux , см. Как найти дату создания файла? и какие файловые системы в Linux хранят время создания? ,
Франклин Пят

Ответы:


73

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

statдействительно подробно. Но lsнужна только одна строка. Было бы хорошо, если бы он мог также отображать секунды. Однако при создании списков файлов первый идеально подходит.
neverMind9

ls -l было быстрым решением для меня
Эндрю

Я заметил, что результат ls -lможет показывать другой формат даты, когда установлен BusyBox (на Android). Я думаю, что без него это похоже на «2019-07-26 14:41», а с ним это похоже на «6 мая 21:27». Почему год пропал? Есть ли способ заставить его использовать формат без него?
Android-разработчик

@androiddeveloper Как я уже сказал, ответ зависит от ОС. Я думаю, что вы должны открыть новый вопрос. Если вы говорите конкретно об Android, возможно, более подходящим является Stack Overflow или Android Enthusiasts .
Slhck

@slhck Ну, это та же ОС, только с установленным BusyBox. Я спросил, возможно ли (имеется в виду: есть ли команда для использования), чтобы получить формат, который будет показан.
Android-разработчик

21

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

В чем смысл 10: 46: 48.838718970? НН: ММ: СС. наносекунды?
Дзунг Нгуен

2
Да . «Начиная с ядра 2.5.48, структура stat поддерживает наносекундное разрешение для трех полей меток времени файла…»
Том Лорд

Время создания можно определить с помощью root-доступа и debugfs, если необходимо: moiseevigor.github.io/software/2015/01/30/…
Микко Ранталайнен,

2
Время рождения ... с удовольствием. Потому что последнее изменение и последнее изменение почти для той же цели, но все же различны. Хорошо, если все четыре существуют.
neverMind9
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.