Дата создания файла представления Linux
Обновлено: 21.11.2024
Утилита stat может использоваться для получения временных меток файлов Unix, а именно atime , ctime и mtime . Из них преимущество mtime, которое записывает время последнего изменения файла, сразу становится очевидным. С другой стороны, atime 1, который записывает время последнего доступа к файлу, был назван «возможно, самой глупой дизайнерской идеей Unix всех времен». Интуитивно можно ожидать, что ctime запишет время создания файла. Однако ctime записывает время последнего изменения метаданных файла.
Обычно Unices не записывает время создания файла. В то время как некоторые отдельные файловые системы записывают время создания файлов 2 , до недавнего времени в Linux не было общего интерфейса, который фактически открывал бы их для приложений пользовательского пространства. В результате вывод stat (GNU coreutils v8.30) в файловой системе ext4 (которая записывает время создания) выглядит примерно так:
С полем «Рождение», предназначенным для отображения времени создания, с удручающим знаком «-».
Тот факт, что ctime означает не время создания, а время изменения, в сочетании с отсутствием реального интерфейса времени создания приводит к некоторой путанице. Путаница кажется настолько распространенной, что драйвер msdos в ядре Linux счастливо стирает время создания FAT со временем изменения Unix!
Ограничения текущего системного вызова stat() известны уже давно. Новый системный вызов, предоставляющий расширенные атрибуты, был впервые предложен в 2010 году, а новый интерфейс statx() был наконец объединен с Linux 4.11 в 2017 году. Это заняло так много времени, по крайней мере частично, потому что разработчики ядра быстро столкнулись с одной из самых сложных проблем в области компьютерных наук. : называть вещи. Поскольку стандарта для них не существовало, каждая файловая система стала называть время создания другим именем. Ext4 и XFS назвали его crtime, а Btrfs и JFS назвали его otime. Реализации также имеют немного другую семантику: JFS хранит время создания только с точностью до секунд.
Glibc потребовалось некоторое время, чтобы добавить оболочку для statx() с поддержкой приземления в версии 2.28, выпущенной в 2018 году. Перенесемся в март 2019 года, когда была выпущена версия GNU coreutils 8.31, в которой stat наконец-то получил поддержку чтения времени создания файла:
Влияние atime на производительность диска смягчается использованием relatime в современных системах Linux. ↩︎
Для ext4 можно получить время создания файла с помощью подкоманды stat утилиты со странным названием debugfs. ↩︎
Если не указано иное, содержимое этого веб-сайта находится под лицензией Creative Commons Attribution 4.0 International License.
Файлы играют ключевую роль для вашей операционной системы, поскольку они необходимы для бесперебойной работы и правильной работы. Знание даты создания файла системных файлов иногда важно по соображениям безопасности, поскольку оно сообщает вам, когда файл был фактически создан. Например, если кто-то внес изменения в какой-либо системный файл, то вы можете легко найти, что какие-то изменения были внесены. Вы можете найти время создания любого файла с помощью утилиты под названием «debugfs», но для использования этой команды вам нужно сначала найти номер инода файла, который является уникальным номером, присваиваемым каждому новому файлу, когда он был сначала создан, поэтому для которые сначала создают тестовый файл, набрав.
После этого найдите индекс файла, введя:
Или вы также можете ввести:
После получения номера инода вам нужно ввести следующую команду, чтобы получить информацию о диске:
На приведенном выше изображении /dev — это файл устройства, который присутствует в корневом каталоге, тогда как sda5 — это жесткий диск, принадлежащий ОС Linux, как показано ниже, и вы можете получить информацию об этом конкретном каталоге, набрав. р>
На приведенном выше изображении «crtime» указывает время создания определенного файла, и наряду с этим вы также можете увидеть «ctime», «atime» и «mtime».
Итак, на изображении выше mtime покажет вам время, когда файл был изменен или модифицирован в последний раз. Например, вы могли что-то добавить в файл, удалить что-то из файла или изменить содержимое файла.
Следующим является atime, представляющий, когда в последний раз к файлу обращались или читали, например, вы могли открыть файл или использовать команду cat для чтения содержимого файла. Файл не был изменен или каким-либо образом изменен.
ctime не относится к изменениям, внесенным в содержимое файла.Скорее, это относится к моменту, когда информация о файле была обновлена, например, изменения в правах доступа к файлу.
Теперь давайте попробуем найти время создания любого системного файла, например «systemd», и для этого вам нужно сначала найти номер инода, набрав его.
Как видите, номер инода для файла «systemd» равен 131200, поэтому, чтобы найти время создания файла, вам нужно ввести его.
Аналогично, вы можете найти отметку времени создания нескольких файлов, написав одну команду:
Если вас интересует, когда в последний раз изменялись созданные файлы, вы можете сделать это, набрав:
Если вы ищете конкретный файл, вам необходимо следовать приведенному ниже общему синтаксису:
Точно так же вы можете увидеть, что при изменении временной метки файла и его содержимого наберите:
$ ls -lc testfile.txt
$ ls -lu testfile.txt
Как вы можете видеть, временная метка для приведенных выше команд одинакова, поэтому, чтобы дать вам лучшую картину, давайте отредактируем текстовый файл, написав любые случайные строки, а затем сохраним этот файл. Это изменит отметку времени, и вы увидите новое время, как показано ниже:
Заключение
Операционная система Linux может иметь несколько пользователей, и иногда важно знать время создания файла, особенно для системных администраторов. Разные пользователи обладают разным опытом, поэтому для целей аудита необходимо знать, какой пользователь создает файл какого типа из соображений безопасности, так как он также может содержать вирусы.
Есть ли в Linux команда, которая показывает, когда файл был создан? Я вижу, что ls -l дает время последнего изменения, но могу ли я получить время/дату создания?
Несмотря на то, что "OT" запрашивает инструмент для отображения этой информации, я думаю, что это полезно знать программистам при работе с большим количеством файловых систем UNIX-y.
Команда: sudo debugfs -R 'stat /path/to/file' /dev/sdaX (замените sdaX на имя устройства файловой системы, в которой находится файл). Время создания — это значение crtime. Вы можете добавить | grep .[^ca]time, чтобы указать только mtime (время модификации) и crtime (время создания).
3 ответа 3
Команда stat может вывести это - (тире). Я думаю, это зависит от файловой системы, которую вы используете. статистика называет его "Время рождения". Однако на моем ext4 fs он пуст.
%w Время рождения файла, человекочитаемый; - если неизвестно
%W Время рождения файла, секунды с начала эпохи; 0, если неизвестно
Что делать, если у нас не установлена команда stat и я не могу добавить команду stat в эту среду? bash: stat: команда не найдена
Упоминая %w, вы не говорите, как его использовать. Я бы предложил изменить этот ответ, чтобы показать пример команды для получения даты создания, если она не включена по умолчанию. Например, "stat -c %w файл"
Извините, но это просто неправильный ответ. Я просматриваю файл, созданный несколько дней назад, и он показывает мне, что время рождения было несколько часов назад.
Google сообщает мне: "Стандартная файловая система ext4 Linux также выделяет место для временной метки создания файла в своих внутренних структурах файловой системы, но это еще не реализовано. Иногда эта временная метка заполняется, но вы не может зависеть от значений в нем."
Linux предлагает три метки времени для файлов: время последнего доступа к содержимому (atime), время последнего изменения содержимого (mtime) и время последнего изменения индексного дескриптора (метаданные, ctime). Так что нет, нельзя. Однако mtime каталога соответствует последнему созданию или удалению файла.
Существует естественная путаница между ОС Linux и различными файловыми системами, которые можно использовать с Linux. Вы не можете просто делать общие заявления о Linux в отношении вещей, специфичных для файловых систем.
@yzorg Я думаю, что понимаю вашу точку зрения, но я не уверен, какое значение имеют объемы. Любая копия файла, даже с параметром cp -a, создаст новый индексный дескриптор, ctime которого будет соответствовать времени создания индексного дескриптора, но с таким же mtime (который был в прошлом).
@yzorg Я этого не говорил. Я сказал, что если вы cp -a, он создаст новый inode, который будет иметь mtime. Объемы тут ни при чем
Нет, такой команды нет. В Unix время создания не сохраняется (только: доступ, модификация и изменение).
Некоторые файлы могут иметь метаданные (например, exif), в которых записана дата/время создания. Если все ваши файлы являются цифровыми фотографиями, у вас, скорее всего, есть эти данные. Вот пример использования Perl Image::ExifTool.
В основном это зависит от файловой системы, например, файловая система ext4 хранит дату создания файла.
Связано
Связанные
Горячие вопросы о сети
дизайн сайта / логотип © 2022 Stack Exchange Inc; вклады пользователей под лицензией cc by-sa. версия 2022.3.24.41762
Linux является зарегистрированным товарным знаком Линуса Торвальдса. UNIX является зарегистрированным товарным знаком The Open Group.
Этот сайт никоим образом не связан с Линусом Торвальдсом или The Open Group.
В Unix-подобных системах, таких как Linux, все считается файлом, и вся информация о файле (метаданные или атрибуты файла, такие как время создания, последняя модификация и т. д.), за исключением фактического содержимого файла, хранится в inode, а Linux идентифицирует каждый файл по его номеру inode, отличному от удобочитаемого имени файла.
Кроме того, программа Linux stat является полезной утилитой для отображения состояния файла или файловой системы. Он показывает такую информацию, как номер инода, время рождения файла, последнее изменение данных, последний доступ, последнее изменение статуса и многое другое. Мы объединим обе программы, чтобы найти фактическое время создания файла в Linux.
В этой статье мы объясним, как найти один из критических атрибутов файла с помощью программ debugfs и stat, чтобы получить следующую информацию о создании/доступе к файлу в файловых системах Linux.
- ctime: показывает время изменения файла.
- atime: показывает время доступа к файлу.
- mtime: показывает время изменения файла.
- crtime: показывает время создания файла.
Поиск даты создания файла в Linux
<р>1. Чтобы найти дату и время создания файла «crtime», нужно найти индекс файла с помощью команды stat для файла с именем «About-TecMint».Кроме того, вы можете использовать команду ls -i для файла под названием «About-TecMint».
Из вывода приведенных выше команд номер индексного дескриптора файла — 14420015. Запишите этот уникальный номер индексного дескриптора, так как мы будем использовать этот номер индексного дескриптора в следующих шагах.
<р>2. Теперь нам нужно найти корневую файловую систему, в которой находится наш файл, просто введите следующую команду df -h, чтобы определить корневую файловую систему.Из приведенного выше вывода файловая система для корневого раздела — /dev/sda10 (запишите эту файловую систему). В вашей системе это будет отличаться.
<р>3. Затем используйте команду debugfs, чтобы найти время создания файла с именем «About-TecMint» с флагом -R, который указывает debugfs выполнить единственную внешнюю команду, указанную с номером инода 14420015 (в данном случае stat), а затем выйти.Из приведенного выше вывода видно, что файл «About-TecMint» был создан в понедельник 1 августа 10:26:36 2016 года, как это было предоставлено crtime. Вы также увидите «ctime», «atime» и «mtime» вашего файла.
Если вам понравилась эта статья, подпишитесь на уведомления по электронной почте о руководствах по Linux. Если у вас есть вопросы или сомнения? обратитесь за помощью в разделе комментариев.
Если вы цените то, что мы делаем здесь, в TecMint, вам следует подумать о следующем:
TecMint – это самый быстрорастущий и пользующийся наибольшим доверием сайт сообщества, где можно найти любые статьи, руководства и книги по Linux в Интернете. Миллионы людей посещают TecMint! для поиска или просмотра тысяч опубликованных статей, доступных всем БЕСПЛАТНО.
Если вам нравится то, что вы читаете, купите нам кофе (или 2) в знак признательности.
Мы благодарны за вашу бесконечную поддержку.
Похожие сообщения
8 мыслей о «Команда DEBUGFS — показать время создания файла в Linux»
Работает ли это с файлами, которые были созданы на другом сервере, но были скопированы на сервер, где я могу выполнять указанные выше команды в интерфейсе командной строки?
Начиная с (по крайней мере) версии e2fsprogs 1.44.1 нет необходимости заранее узнавать номер инода, вы можете передать сам путь к файлу, опуская "", вот так… р>
Большое спасибо, что поделились этой полезной информацией.
Как дата изменения может опережать дату создания.
Или я что-то упустил?
Это правильное наблюдение, возможно, время на тестовой машине было неправильным, мы узнаем об этом больше, используя новый файл.
Мне не помогло:
Возможно, вы используете тип файловой системы EXT2 на своем разделе, это будет работать только на разделах EXT4.
Вы пропустили вокруг номера инода, что вызывает это сообщение об ошибке ext2_lookup, также на ext4
Есть что сказать? Присоединяйтесь к обсуждению. Отменить ответ
Этот сайт использует Akismet для уменьшения количества спама. Узнайте, как обрабатываются данные ваших комментариев.
Читайте также: