Як перевірити всі часові позначки файлу?


52

Чи є в Linux команда перевіряти всі часові позначки файлу?

Я намагаюся побачити останні змінені, створені та зачеплені дати у файлі.


4
Просто для зазначення, у файлів Linux немає дат народження. Таким чином, визначити дату створення файлу неможливо.
FatalError

зауважив, що = (. Дякую, що вказав на це.
Mechaflash

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

@grawity: Акуратно! Я завжди цікавився, чому цього не було у ФС ... але, мабуть, вони є, але, як ви сказали, не можна просто перебити 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". Як прийшов рік відсутній? Чи є спосіб змусити його використовувати формат без нього?
андроїд розробник

@androiddeveloper Як я вже говорив, відповідь залежить від ОС. Я думаю, вам слід відкрити нове запитання. Якщо ви конкретно говорите про Android, можливо, більше підійде Stack Overflow або Android Enthusiasts .
slhck

@slhck Ну це та сама ОС, тільки з встановленим BusyBox. Я запитав, чи можна (тобто: чи є команда для використання), щоб отримати формат, який буде показаний.
андроїд розробник

21

Для кожного з ваших файлів зберігаються лише ТРИ різних значень часу, визначених стандартом POSIX : http://pubs.opengroup.org/onlinepubs/9699919799/ (див. Розділ Основні визначення -> 4. Загальні поняття -> 4.8 Файл Оновлення разів)

Кожен файл має три різні пов'язані часові позначки: час останнього доступу до даних , час останньої модифікації даних та час останнього зміни статусу файлу . Ці значення повертаються в структурі характеристик файлу struct stat, як описано в <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. аніме

Спочатку давайте отримаємо доступ до даних файлу, прочитавши їх ( 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: -

Яке значення має 10: 46: 48.838718970? HH: MM: SS. наносекунд?
Дзунг Нгуен

2
Так . "Оскільки ядро ​​2.5.48, структура stat підтримує наносекундну роздільну здатність для трьох полів часових позначок файлу ...."
Том Лорд

Час створення можна визначити за допомогою кореневого доступу та налагодження при необхідності: moiseevigor.github.io/software/2015/01/30/…
Mikko Rantalainen

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