В течение долгого времени Linux не беспокоился о датах создания файлов, потому что ни одна из файловых систем, которые он обычно использовал, не поддерживала их. Однако в настоящее время 2 широко используемые файловые системы (NTFS и ext4) записывают даты создания файлов.
Команда stat
, однако, по-прежнему Birth: -
выводится в файловой системе ext4, хотя мы можем видеть, что ext4 сохранила дату создания файла, используя debugfs -R 'stat <inode_number>' /dev/file_device
.
Когда я выяснил, почему это так, я увидел, что кто-то еще недавно подал на него отчет об ошибке, и ответ связывается с основной проблемой, которая просто гласит: «В настоящее время нет интерфейса ядра Linux для получения этой информации [файл» Дата создания]". Мне кажется замечательным, что это, по-видимому, все еще так, поскольку люди просили, чтобы stat
эта информация отображалась годами (и stat
выводит ли Birth
поле, даже если оно, очевидно, еще не поддерживает его! Они добавили его в ожидании?)
Так правда ли, что в настоящее время нет интерфейса ядра Linux для получения даты создания файла? Есть ли план реализовать это когда-либо?
debugfs
.ZFS
также записывает время создания файла и позволяет получать его через расширенные атрибуты.Ответы:
РЕДАКТИРОВАТЬ: Хорошая новость,
statx()
была объединена, поэтому он должен быть доступен в выпуске 4.11.Работа xstat (), в настоящее время statx (), была пересмотрена в 2016 году.
На этот раз процесс был немного более дисциплинированным (меньше цикличности, соглашение об удалении противоречивых атрибутов, поскольку их всегда можно добавить позже). К сожалению, все еще были возражения против точного интерфейса, и я не видел больше недавних ссылок.
источник
Из того, что я могу сказать (извините за кучу ссылок, памяти и googlage, ничего достаточно связного, чтобы перечислить здесь в качестве ссылки), это никогда не происходило потому, что подчеркивающие системы не поддерживали атрибуты времени создания, а потому, что ни одна из них не могла даже согласен, что это была полезная функция.
См. Http://www.pathname.com/fhs/pub/fhs-2.3.html.
POSIX выкладывает три метки времени. Никто из них не время создания.
Если я правильно помню, аргумент звучал примерно так:
Сейчас многое из этого - память и чтение старых списков рассылки. Я тоже не сидел в центре аргументов. Я был в списке рассылки из-за какой-то нестандартной работы в толстом драйвере для встроенной системы Linux. Я упоминаю об этом, потому что, несомненно, есть более авторитетные источники, чем моя память о чем-то, о чем я только немного заботился.
Я помню, что это была комбинация того факта, что никто не мог придумать хороший вариант использования, никто не мог договориться о том, как обрабатывать поле для других 40 часто используемых файловых систем, которые не поддерживают время создания, и даже придумывание названия для поля превратилось в массовую дискуссию.
источник
debugfs
чтения поля с образа диска не является чем-то вроде интерфейса , и в любом случае ему потребуется привилегированный доступ.Время рождения находится в нескольких собственных файловых системах Linux, а не только в ext4.
Начиная с версии 4.11 ядра Linux (апрель 2017 г.), существует новый
statx()
системный вызов для его получения. Тем не менее, соответствующая функция обертка не была добавлена в GNU Libc пока (по состоянию на 2018-06-26. 2019 редактировать добавили в 2.28), а также инструменты , такие как GNUstat
,ls
,find
не были обновлены , чтобы использовать его ( 2019-08- 22 отредактируйте GNUstat
в системах GNU / Linux с помощью glibc 2.28 или выше, так как coreutils 8.31)Вы можете сделать это
perl
с помощью чего-то вроде:Если у вас
syscall.ph
его нетSYS_statx
, вы можете жестко закодировать его. На архитектурах amd64 это 332. Или попробуйте:Сейчас это время рождения редко бывает полезным. Это не возраст данных в файле (данные записываются в файлы после того, как они были созданы), а также не обязательно время, когда файл появился под этим именем в каталоге (он мог быть создан под другим именем и переименован или связан там и содержание или атрибуты были изменены несколько раз между).
источник
NFSv4
его, он должен был бы поддерживать расширенные атрибуты, иcrtime
в расширенных атрибутах возможна запись . Проверьте, например,ls.c
источник Solaris, который печатает время создания файла сls -l -% crtime
.statx()
. Вstatx()
Linux пока нет стандартной утилиты, к которой можно подключиться, но извлечение расширенных атрибутов поддерживалось десятилетиями. См. Как получить дату создания файла на логическом томе NTFS?openat(fd, ".", O_RDONLY|O_XATTR)
.