Узнать дату создания файла linux

Как посмотреть дату создания файла в Linux

В системе Linux в свойствах файла файлового менеджера отображается только информация о дате последнего обращения к нему и дате изменения. Но вот дата создания там отсутствует. При этом иногда нужно посмотреть именно ее, например, чтобы узнать, с какого момента ведется запись лога. В этой инструкции расскажем, как посмотреть какие данные хранятся в файловых системах Linux и объясним, как узнать дату создания файла Linux . Будут упомянуты сразу же два удобных способа, каждый из которых со своими особенностями.

Дата создания файла

В стандарте POSIX прописаны только 3 вида временных меток, которые должна хранить файловая система:

  • atime – время последнего обращения к файлу.
  • mtime – время последнего изменения содержимого.
  • ctime – время последней модификации прав доступа или владельца.

Поэтому в старых файловых системах посмотреть информацию о дате создания файла зачастую невозможно. А вот в современных файловых системах (ext4, zfs, XFS и т. д.) она уже сохраняется.

Данные о дате создания записываются в специальном поле:

  • Ext4 – crtime
  • ZFS – crtime
  • XFS – crtime
  • Btrfs – otime
  • JFS – di_otime

Известно две методики просмотра этой информации: с помощью утилиты stat и debugfs. Однако первый метод подойдет пользователям не каждого дистрибутивов Linux. Второй способ – универсальный, но не такой простой в использовании. Разберемся с каждым из них по отдельности.

Используем Stat

Утилита stat выводит подробные сведения о файле. В том числе выводится дата создания файла Linux. Для ее запуска в терминале достаточно указать путь к файлу. Для примера посмотрим информацию про изображение pic_1.jpeg, хранящееся в каталоге /home/root-user/Pictures:

Необходимая информация записана в графе Создан. А с помощью опции -c получится задать определенные правила форматирования для вывода информации, например, оставив только нужную графу:

Как посмотреть дату создания файла в Linux

Но есть одна небольшая трудность. На некоторых дистрибутивах Linux при использовании утилиты stat это поле будет пустым.

Как посмотреть дату создания файла в Linux

Основная причина заключается в том, что выводимая информация отображается в в statx(2). Оболочка была добавлена в библиотеку glibc версии 2.28. То есть поддержка этой оболочки появилась в наборе базовых системных утилит GNU coreutils 8.31. Чтобы проверить версию, следует выполнить такую команду:

Как посмотреть дату создания файла в Linux

Следовательно, stat сможет выводить данные о создании файла только при наличии конкретных условий, которые были описаны выше. Например, в дистрибутиве Ubuntu 21.10 все работает без каких-либо проблем, а в Ubuntu 20.04 поле будет пустым.

Используем DebugFS

Утилита DebugFS не имеет ограничений по версии. Она будет работать всегда. Но и процедура использования у нее несколько более запутанная. Связано это с тем, что для просмотра даты создания файла через debugfs, нужно узнать номер его inode и файловую систему. Получить inode выйдет с помощью команды ls с опцией -i, указав путь к файлу:

$ ls -i /home/root-user/scripts/main_script.txt

Как посмотреть дату создания файла в Linux

Для просмотра файловой системы пригодится команда df:

Читайте также:  Операционных систем ms dos linux unix

Как посмотреть дату создания файла в Linux

Теперь все нужные данные собраны, и можно переходить к использованию утилиты debugfs. Ей нужно передать опцию -R, указать номер inode, а затем название файловой системы:

Как посмотреть дату создания файла в Linux

После этого в терминале вы сможете найти поле, в котором хранится дата создания. В нашем случае это crtime.

На этом инструкции завершена.

Источник

Дата создания файла в Linux

В свойствах файла в файловом менеджере Linux зачастую отображается только информация о дате последнего обращения к нему и дате изменения. Но вот дата создания там, к сожалению, отсутствует. А иногда нужно посмотреть именно ее, например, чтобы узнать, с какого момента ведется запись лога.

В данной статье мы расскажем о том, какие данные хранятся в файловых системах Linux и объясним, как узнать дату создания файла Linux . Будут упомянуты сразу же два удобных способа, каждый из которых со своими особенностями.

Дата создания файла Linux

В стандарте POSIX прописаны только 3 вида временных меток, которые должна хранить файловая система:

  • atime – время последнего обращения к файлу.
  • mtime – время последнего изменения содержимого.
  • ctime – время последней модификации прав доступа или владельца.

По этой причине в старых файловых системах посмотреть информацию о дате создания файла зачастую невозможно. А вот в современных файловых системах (ext4, zfs, XFS и т. д.) она уже сохраняется.

Данные о дате создания записываются в специальном поле:

Есть два удобных способа просмотра этой информации: с помощью утилиты stat и debugfs. Но первый способ подойдет не для всех дистрибутивов Linux. Второй способ – универсальный, но не такой простой в использовании. Разберемся с каждым из них по отдельности.

1. С помощью stat

Утилита stat выводит подробные сведения о файле. В том числе выводится дата создания файла Linux. Для ее запуска в терминале достаточно указать путь к файлу. Для примера посмотрим информацию про изображение pic_1.jpeg, хранящееся в каталоге /home/root-user/Pictures:

w+IiqFOkD0yMwAAAABJRU5ErkJggg==

Нужная информация записана в графе Создан. А с помощью опции -c получится задать определенные правила форматирования для вывода информации, например, оставив только нужную графу:

stat -c ‘%w’ /home/root-user/Pictures/pic_1.jpeg

wfg1axWkj0EwAAAAABJRU5ErkJggg= https://losst.pro/komanda-stat-v-linux

отдельной статье. Можете с ней ознакомиться.

2. С помощью debugfs

В отличие от утилиты stat, описанной в предыдущем разделе, у debugfs нет таких ограничений по версии. А значит, она будет работать всегда. Но и процедура использования у нее несколько более запутанная. Связано это с тем, что для просмотра даты создания файла через debugfs, нужно узнать номер его inode и файловую систему. Получить inode выйдет с помощью команды ls с опцией -i, указав путь к файлу:

ls -i /home/root-user/scripts/main_script.txt

kbjuEEK5LbK0K6LuAsQU4ZIWsXLUz9ZvcooY+rQ40HYtXfCCLOPe4xkiUvQHr092rnlO55aeZHmA0j6PD4BqQdBLtv8ej9TnrMPYvPVcUVz37alePamcD+sGl9ulKrXsee+ZPv8vdbZpu5IaHMAAAAAASUVORK5CYII=

А для просмотра файловой системы пригодится команда df:

CwwxO5M5TnclAAAAAElFTkSuQmCC

Теперь все нужные данные собраны, и можно переходить к использованию утилиты debugfs. Ей нужно передать опцию -R, указать номер inode, а затем название файловой системы:

sudo debugfs -R ‘stat ‘ /dev/sda5

UvBimUNcruQAAAAASUVORK5CYII https://losst.pro/wp-content/uploads/2022/03/data-sozdaniya-fayla-v-linux-8.png8BecyCvZGa4qkAAAAASUVORK5CYII=

Подробное разъяснение о том, что такое inode, есть в специальной статье на нашем сайте.

Читайте также:  Linux mount efi partition

Выводы

Мы разобрали два способа посмотреть дату создания файла Linux. Утилита stat несколько более удобная, ведь для нее достаточно указать только путь к нему. Но она не будет отображать нужную информацию до версии 8.31 GNU coreutils. А debugfs в этом плане более универсальная, но не такая простая в использовании. Ведь для получения данных она требует ввода номера inode файла и его файловую систему.

Обнаружили ошибку в тексте? Сообщите мне об этом. Выделите текст с ошибкой и нажмите Ctrl+Enter.

Источник

How to find creation date of file?

I want to find out the creation date of particular file, not modification date or access date. I have tried with ls -ltrh and stat filename .

Linux doesn’t keep track of the creation time since it is not required by POSIX. However, Mac OS X does with the HFS filesystem — look under «birth time» in stat(1) .

Fedora 19 ext4 filesystems do set file creation times. I’m sure there are many more examples. See answer below that uses stap to retrieve creation times.

8 Answers 8

stat -c ‘%w’ file on filesystems that store creation time.

The POSIX standard only defines three distinct timestamps to be stored for each file: the time of last data access, the time of last data modification, and the time the file status last changed.

Modern Linux filesystems, such as ext4, Btrfs, XFS (v5 and later) and JFS, do store the file creation time (aka birth time), but use different names for the field in question ( crtime in ext4/XFS, otime in Btrfs and JFS). Linux provides the statx(2) system call interface for retrieving the file birth time for filesystems that support it since kernel version 4.11. (So even when creation time support has been added to a filesystem, some deployed kernels have not immediately supported it, even after adding nominal support for that filesystem version, e.g., XFS v5.)

As Craig Sanders and Mohsen Pahlevanzadeh pointed out, stat does support the %w and %W format specifiers for displaying the file birth time (in human readable format and in seconds since Epoch respectively) prior to coreutils version 8.31. However, coreutils stat uses the statx() system call where available to retrieve the birth time only since version 8.31. Prior to coreutils version 8.31 stat accessed the birth time via the get_stat_birthtime() provided by gnulib (in lib/stat-time.h ), which gets the birth time from the st_birthtime and st_birthtimensec fields of the stat structure returned by the stat() system call. While for instance BSD systems (and in extension OS X) provide st_birthtime via stat , Linux does not. This is why stat -c ‘%w’ file outputs — (indicating an unknown creation time) on Linux prior to coreutils 8.31 even for filesystems which do store the creation time internally.

Читайте также:  Linux intel gma x3100

As Stephane Chazelas points out, some filesystems, such as ntfs-3g, expose the file creation times via extended file attributes.

POSIX is actually wrong on this. mtime used to be both mtime and ctime, and ctime was creation time in orginal unix. see blog.plover.com/Unix/ctime.html

TLDR; Use stap («SystemTap») to create your own kernel API. Demo of ext4 creation time extraction below.

You can extract the ext4 creation times on Fedora 19 systems. Here’s mine:

$ uname -a Linux steelers.net 3.11.1-200.fc19.i686.PAE #1 SMP Sat Sep 14 15:20:42 UTC 2013 i686 i686 i386 GNU/Linux 

It’s clear that the inodes on my ext4 partitions have the creation time. Here’s a shell script that determines the inode associated with a filename and then augments the stat output with the creation time by using stap («systemtap»).

NB: This is just a demo and hugely inefficient since a kernel module is created, loaded, and unloaded for every execution. This is also probably very fragile as no error checking is performed. A proper kernel API would be preferable, but this script could be made much more efficient and read the creation times of multiple files/inodes.

#/bin/sh my_inode_str=$(stat --printf="%i" $1) stap - vfs_inode; > probe kernel.function("ext4_getattr@fs/ext4/inode.c") < probe_inode=\$dentry->d_inode; if (@cast(probe_inode, "struct inode")->i_ino == $my_inode_str) < my_i_crtime = &@cast(probe_inode - my_offsetof,"struct ext4_inode_info")->i_crtime; printf("CrTime: %s GMT\n", ctime(@cast(my_i_crtime, "timespec")->tv_sec)); printf("CrTime (nsecs): %d\n", @cast(my_i_crtime, "timespec")->tv_nsec); exit(); > > end_of_stap_script 
$ ll testfile ls: cannot access testfile: No such file or directory $ touch testfile $ ./stap_stat.sh testfile File: ‘testfile’ Size: 0 Blocks: 0 IO Block: 4096 regular empty file Device: fd02h/64770d Inode: 4850501 Links: 1 Access: (0664/-rw-rw-r--) Uid: ( 1001/ Rick) Gid: ( 1001/ Rick) Context: unconfined_u:object_r:user_home_t:s0 Access: 2013-09-28 06:17:04.221441084 -0400 Modify: 2013-09-28 06:17:04.221441084 -0400 Change: 2013-09-28 06:17:04.221441084 -0400 Birth: - CrTime: Sat Sep 28 10:17:04 2013 GMT CrTime (nsecs): 220441085 $ ll testfile -rw-rw-r--. 1 Rick Rick 0 Sep 28 06:17 testfile $ cat - >> testfile Now is the time . $ ll testfile -rw-rw-r--. 1 Rick Rick 20 Sep 28 06:18 testfile $ ./stap_stat.sh testfile File: ‘testfile’ Device: fd02h/64770d Inode: 4850501 Links: 1 Access: (0664/-rw-rw-r--) Uid: ( 1001/ Rick) Gid: ( 1001/ Rick) Context: unconfined_u:object_r:user_home_t:s0 Access: 2013-09-28 06:17:04.221441084 -0400 Modify: 2013-09-28 06:18:33.684374740 -0400 Change: 2013-09-28 06:18:33.684374740 -0400 Birth: - CrTime: Sat Sep 28 10:17:04 2013 GMT CrTime (nsecs): 220441085 $ cat testfile Now is the time . $ ./stap_stat.sh testfile File: ‘testfile’ Size: 20 Blocks: 8 IO Block: 4096 regular file Device: fd02h/64770d Inode: 4850501 Links: 1 Access: (0664/-rw-rw-r--) Uid: ( 1001/ Rick) Gid: ( 1001/ Rick) Context: unconfined_u:object_r:user_home_t:s0 Access: 2013-09-28 06:19:12.199349463 -0400 Modify: 2013-09-28 06:18:33.684374740 -0400 Change: 2013-09-28 06:18:33.684374740 -0400 Birth: - CrTime: Sat Sep 28 10:17:04 2013 GMT CrTime (nsecs): 220441085 $ mv testfile testfile2 $ ./stap_stat.sh testfile2 File: ‘testfile2’ Size: 20 Blocks: 8 IO Block: 4096 regular file Device: fd02h/64770d Inode: 4850501 Links: 1 Access: (0664/-rw-rw-r--) Uid: ( 1001/ Rick) Gid: ( 1001/ Rick) Context: unconfined_u:object_r:user_home_t:s0 Access: 2013-09-28 06:19:12.199349463 -0400 Modify: 2013-09-28 06:18:33.684374740 -0400 Change: 2013-09-28 06:20:45.870295668 -0400 Birth: - CrTime: Sat Sep 28 10:17:04 2013 GMT CrTime (nsecs): 220441085 $ 

Источник

Оцените статью
Adblock
detector