Я хочу узнать дату создания конкретного файла, а не дату изменения или дату доступа.
Я пытался с ls -ltrh
и stat filename
.
linux
files
timestamps
stat
Özzesh
источник
источник
stat(1)
.stap
для получения времени создания.Ответы:
Стандарт POSIX определяет только три различные временные метки, которые должны храниться для каждого файла: время последнего доступа к данным, время последней модификации данных и время последнего изменения статуса файла.
Тем не менее, современные файловые системы Linux, такие как ext4, Btrfs и JFS, хранят время создания файла (или время рождения), но используют разные имена для рассматриваемого поля (
crtime
в ext4,otime
в Btrfs и JFS). Однако в настоящее время Linux не предоставляет API ядра для доступа ко времени создания файлов , даже в файловых системах, поддерживающих их.Как указали Крейг Сандерс и Мохсен Палеванзаде ,
stat
он поддерживает спецификаторы формата%w
и%W
для отображения времени рождения файла (в удобочитаемом формате и в секундах с начала эпохи соответственно). Однако,stat
сам по себе доступ к времени рождения с помощьюget_stat_birthtime()
обеспечивается gnulib (вlib/stat-time.h
), которая получает время от рожденияst_birthtime
иst_birthtimensec
полойstat
структуры , возвращеннойstat()
системного вызовом. В то время как, например, системы BSD (и в расширении OS X) предоставляютst_birthtime
черезstat
, Linux не делает. Вот почемуstat -c '%w' file
вывод-
(с указанием неизвестного времени создания) в Linux даже для файловых систем, которые хранят время создания внутри.Как указывает Стефан Чазелас , некоторые файловые системы, такие как ntfs-3g, предоставляют время создания файла через расширенные атрибуты файла.
источник
stap
для создания своего собственного API ядра. Смотрите пример в ответе здесь.TLDR; Используйте
stap
( «SystemTap» ) для создания собственного API ядра. Демонстрация извлечения времени создания ext4 ниже.Вы можете извлечь время создания ext4 в системах Fedora 19. Вот мой:
Понятно, что иноды на моих разделах ext4 имеют время создания. Вот сценарий оболочки, который определяет индекс, связанный с именем файла, а затем дополняет
stat
вывод временем создания, используяstap
("systemtap").NB: Это просто демонстрация и крайне неэффективная, поскольку модуль ядра создается, загружается и выгружается для каждого выполнения. Это также, вероятно, очень хрупко, поскольку проверка ошибок не выполняется. Правильный API ядра был бы предпочтительнее, но этот сценарий можно было бы сделать намного более эффективным и считывать время создания нескольких файлов / inode.
[содержимое stap_stat.sh]
Вот демо:
источник
debugfs + stat
позволяет получитьcrtime
без обезьян патч ядра.В
ext4
это возможно; потому чтоext4
файловая система хранит время создания файла. Но, тем не менее, вы обнаружите, чтоstat
команда не может показать дату, потому что я думаю, что у ядра нет API для этого.Во всяком случае, время рождения файла хранится в,
ext4
и вы можете узнать его, хотя и не прямым методом, а с помощьюdebugfs
источник
xstat filename
/dev/sdxX
подключен,/some/path
а файл есть/some/path/some/file
, указывается толькоsome/file
путь: его путь должен указывать не на корень файловой системы, а на точку монтирования. В противном случае файл не будет найден.Теоретически, с помощью GNU stat вы можете использовать
stat -c '%w'
или%W
получить дату создания файла (то есть время рождения).На практике большинство файловых систем не записывают эту информацию, а ядро Linux не предоставляет никакого способа доступа к ней.
Самое близкое, что вы можете получить - это ctime файла, это не время создания, а время последнего изменения метаданных файла.
У Linux Weekly News была интересная статья об этом несколько лет назад - http://lwn.net/Articles/397442/
источник
Разница между
FreeBSD
иGNU\Linux
наstat command
:Если вы вызываете
stat
команду, вGNU\Linux
ней вызывается-x
опция, но во FreeBSD вы сами должны вызывать эту-x
опцию.Смотрите также Какие файловые системы в Linux хранят время создания?
Примечания:
--printf
очень полезно вscripting
....!источник
В OS X вы можете использовать
ls -lU
,stat -f%B
,GetFileInfo -d
илиmdls -n kMDItemFSCreationDate
:источник
Проверь это:
Кстати, это работает только на ext4. Я не нашел решения для BtrFS ... пока;)
источник