MyTetra Share
Делитесь знаниями!
О, смотри-ка какое хорошее место. Дайте два!
Какую информацию о времени изменения файла можно получить в Linux на файловой системе extX
10.03.2017
09:53
Автор: Xintrea
Текстовые метки: linux, ext, файловая система, время, файл
Раздел: Компьютер - Linux - Bash - Команды и скрипты

Исторически так сложилось, что man-страница команды ls и встроенная помощь по команде ls --help не содержат сведений о том, как посмотреть разные времена действий с файлами. Точнее, сведения эти неполные.


На файловой системе extX (где X- это число) обычно хранится следующая временная информация:


  • crtime (create time, не путать с ctime!) — время создания файла
  • mtime (modification time) — время последнего изменения файла, каталога
  • atime — (access time) — время последнего доступа к файлу, каталогу
  • ctime — (change time, не путать с crtime!) — время последнего изменения атрибутов файла, каталога (данных из в inode-области)
  • dtime (delete time) — время удаления файла


Однако документация на ls говорит, что можно получить следующие сведения:


--time=WORD with -l, show time as WORD instead of default

modification time: atime or access or use (-u)

ctime or status (-c); also use specified time

as sort key if --sort=time


Отсюда мы имеем, что mtime (время модификации) отображается в команде ls -l по-умолчанию:


# ls -l

drwxr-xr-x 2 www-data www-data 4096 May 1 2016 helpers

-rw-rw-rw- 1 www-data www-data 5871 May 1 2016 Plugin_Articles.php

-rw-rw-rw- 1 www-data www-data 241 Sep 3 2010 Plugin_Empty.php

-rw-rw-rw- 1 www-data www-data 3077 May 1 2016 Plugin_Gallery.php

-rw-rw-rw- 1 www-data www-data 10318 Apr 30 2016 Plugin_Guestbook_Captcha.php

-rw-rw-rw- 1 www-data www-data 12054 Mar 7 14:06 Plugin_Guestbook.php


Время последнего доступа к файлу/каталогу atime можно посмотреть командой:


# ls -l --time=atime

drwxr-xr-x 2 www-data www-data 4096 Mar 9 05:02 helpers

-rw-rw-rw- 1 www-data www-data 5871 Mar 9 05:02 Plugin_Articles.php

-rw-rw-rw- 1 www-data www-data 241 Mar 9 05:02 Plugin_Empty.php

-rw-rw-rw- 1 www-data www-data 3077 Mar 9 05:02 Plugin_Gallery.php

-rw-rw-rw- 1 www-data www-data 10318 Mar 9 05:02 Plugin_Guestbook_Captcha.php

-rw-rw-rw- 1 www-data www-data 12054 Mar 9 05:02 Plugin_Guestbook.php


Здесь видно, что срабатывало ночное архивирование в 5:02. А если просто открыть один файл на просмотр, то после такого действия получим:


# ls -l --time=atime

drwxr-xr-x 2 www-data www-data 4096 Mar 9 05:02 helpers

-rw-rw-rw- 1 www-data www-data 5871 Mar 10 10:31 Plugin_Articles.php

-rw-rw-rw- 1 www-data www-data 241 Mar 9 05:02 Plugin_Empty.php

-rw-rw-rw- 1 www-data www-data 3077 Mar 9 05:02 Plugin_Gallery.php

-rw-rw-rw- 1 www-data www-data 10318 Mar 9 05:02 Plugin_Guestbook_Captcha.php

-rw-rw-rw- 1 www-data www-data 12054 Mar 9 05:02 Plugin_Guestbook.php


Время последнего изменения атрибутов файла/каталога (изменений в inode) ctime узнается так:


# ls -l --time=ctime

drwxr-xr-x 2 www-data www-data 4096 May 8 2016 helpers

-rw-rw-rw- 1 www-data www-data 5871 May 8 2016 Plugin_Articles.php

-rw-rw-rw- 1 www-data www-data 241 May 8 2016 Plugin_Empty.php

-rw-rw-rw- 1 www-data www-data 3077 May 8 2016 Plugin_Gallery.php

-rw-rw-rw- 1 www-data www-data 10318 May 8 2016 Plugin_Guestbook_Captcha.php

-rw-rw-rw- 1 www-data www-data 12054 Mar 7 14:06 Plugin_Guestbook.php


Но у нас еще остались crtime и dtime. Как их узнать? Можно попробовать команду:


# ls -l --time=crtime

ls: invalid argument ‘crtime’ for ‘--time’

Valid arguments are:

- ‘atime’, ‘access’, ‘use’

- ‘ctime’, ‘status’


Ошибка. Но вот что интересно. Оказывается, команда ls поддерживает не только atime, ctime и mtime (по умолчнию). Есть еще какие-то загадочные access, use, status. И что они обозначают, в документации ls не написано. И кроме того, непонятно как посмотреть crtime и dtime.


Долгие ковыряния в интернете показали, что, в Linux все очень запутано. Например, в ext3 время создания crtime вообще не хранится. А в ext4 хранится, но его невозможно напрямую посмотреть через ls. Для ext4 рекомендуют применять следующий трюк:


1. Узнать номер i-ноды файла через опцию -i, например:


# ls -il

385631 drwxr-xr-x 2 www-data www-data 4096 May 1 2016 helpers

385633 -rw-rw-rw- 1 www-data www-data 5871 May 1 2016 Plugin_Articles.php

385634 -rw-rw-rw- 1 www-data www-data 241 Sep 3 2010 Plugin_Empty.php

385629 -rw-rw-rw- 1 www-data www-data 3077 May 1 2016 Plugin_Gallery.php

385638 -rw-rw-rw- 1 www-data www-data 10318 Apr 30 2016 Plugin_Guestbook_Captcha.php

385637 -rw-rw-rw- 1 www-data www-data 12054 Mar 7 14:06 Plugin_Guestbook.php


2. Найти информацию об i-ноде данного файла:


# debugfs -R 'stat <385633>' /dev/sda1

Inode: 385633 Type: regular Mode: 0666 Flags: 0x80000

Generation: 3970661518 Version: 0x00000000:00000001

User: 33 Group: 33 Size: 5871

File ACL: 0 Directory ACL: 0

Links: 1 Blockcount: 16

Fragment: Address: 0 Number: 0 Size: 0

ctime: 0x572f7053:875a9d88 -- Sun May 8 19:58:59 2016

atime: 0x58c25640:80cad680 -- Fri Mar 10 10:31:12 2017

mtime: 0x57260da3:00000000 -- Sun May 1 17:07:31 2016

crtime: 0x572f6fa8:65ca9a70 -- Sun May 8 19:56:08 2016

Size of extra inode fields: 28

EXTENTS:

(0-1):1632746-1632747


Да, номер ноды вот так, с угловыми скобками, и надо писать. В полученной информации видно время crtime. И что интересно, оно почти совпадает с временем ctime.


Почему оно совпадает? Потому что с момента создания файла никакие атрибуты файла не менялись. Почему почти совпадает? Могу предположить, что при копировании файлов файлы сначала копируются, а потом им назначаются атрибуты или устанавливается содержимое. Вот, например, какое время у файла /etc/networks:


ctime: 0x56a233b8:3ac960a0 -- Fri Jan 22 16:50:48 2016

atime: 0x58c264eb:43bd7fb8 -- Fri Mar 10 11:33:47 2017

mtime: 0x56a233b8:3ac960a0 -- Fri Jan 22 16:50:48 2016

crtime: 0x56a233b0:54892ca0 -- Fri Jan 22 16:50:40 2016


Здесь видно, что время создания crtime - самое первое на временной шкале. Остальные времена отличаются на секунды.


Теперь, если поменять, например, права доступа файла Plugin_Articles.php, то можно увидеть:


Inode: 385633 Type: regular Mode: 0755 Flags: 0x80000

Generation: 3970661518 Version: 0x00000000:00000001

User: 33 Group: 33 Size: 5871

File ACL: 0 Directory ACL: 0

Links: 1 Blockcount: 16

Fragment: Address: 0 Number: 0 Size: 0

ctime: 0x58c262ee:19ffcde0 -- Fri Mar 10 11:25:18 2017

atime: 0x58c25640:80cad680 -- Fri Mar 10 10:31:12 2017

mtime: 0x57260da3:00000000 -- Sun May 1 17:07:31 2016

crtime: 0x572f6fa8:65ca9a70 -- Sun May 8 19:56:08 2016

Size of extra inode fields: 28

EXTENTS:

(0-1):1632746-1632747


Теперь crtime и ctime содержат совсем разные даты. Так и должно быть.



Хинт! Можно не долбаться с i-node, а воспользоваться просто именем файла в команде debugfs:


debugfs -R 'stat /home/user/file1' /dev/sda1


Ищем параметр crtime - это и есть дата создания файла.



Остался вопрос по dtime. Для того чтобы узнать дату удаления файла нужно знать inod удаленного файла. Все, в принципе, уже делали выше по тексту:


1. смотрим номер inode (первая цифра)


ls -li /home/user/file1


2. удаляем файл


rm /home/user/file1


3. Указываем inode вместо имени файла


sudo debugfs -R 'stat <659471>' /dev/sda1


И видим что появился еще один параметр dtime который указывает время удаления файла.




Заключение


И напоследок, полезная команда:


stat *


Эта команда, как и ls, выведет информацию о файлах в текущем каталоге. Но информация будет очень полной:


$ stat *

Файл: «install»

Размер: 4096 Блоков: 8 Блок В/В: 4096 каталог

Устройство: fe01h/65025d Inode: 18093704 Ссылки: 4

Доступ: (0755/drwxr-xr-x) Uid: ( 1000/ xi) Gid: ( 1000/ xi)

Доступ: 2016-11-11 08:40:14.304086738 +0300

Модифицирован: 2016-10-27 13:58:58.471802462 +0300

Изменён: 2016-10-27 13:58:58.471802462 +0300

Создан: -


Файл: «misc»

Размер: 4096 Блоков: 8 Блок В/В: 4096 каталог

Устройство: fe01h/65025d Inode: 18351666 Ссылки: 4

Доступ: (0755/drwxr-xr-x) Uid: ( 1000/ xi) Gid: ( 1000/ xi)

Доступ: 2017-02-27 15:11:57.919149521 +0300

Модифицирован: 2017-02-27 15:11:57.919149521 +0300

Изменён: 2017-02-27 15:11:57.919149521 +0300

Создан: -


Файл: «text»

Размер: 4096 Блоков: 8 Блок В/В: 4096 каталог

Устройство: fe01h/65025d Inode: 17172618 Ссылки: 5

Доступ: (0755/drwxr-xr-x) Uid: ( 1000/ xi) Gid: ( 1000/ xi)

Доступ: 2016-11-11 08:40:12.408086752 +0300

Модифицирован: 2016-09-22 16:14:05.691297459 +0300

Изменён: 2016-10-27 13:58:38.595791445 +0300

Создан: -


Файл: «x2go_repository»

Размер: 4096 Блоков: 8 Блок В/В: 4096 каталог

Устройство: fe01h/65025d Inode: 17041798 Ссылки: 4

Доступ: (2755/drwxr-sr-x) Uid: ( 1000/ xi) Gid: ( 1000/ xi)

Доступ: 2017-03-10 16:47:48.141500240 +0300

Модифицирован: 2011-04-25 18:50:52.000000000 +0400

Изменён: 2016-10-27 13:58:38.723791516 +0300

Создан: -


Так же в этом разделе:
 
MyTetra Share v.0.43
Яндекс индекс цитирования