Как создать файл даты в Linux

Обновлено: 06.07.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 может иметь несколько пользователей, и иногда важно знать время создания файла, особенно для системных администраторов. Разные пользователи обладают разным опытом, поэтому для целей аудита необходимо знать, какой пользователь создает файл какого типа из соображений безопасности, так как он также может содержать вирусы.

В 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) в знак признательности.

Поддержите нас

Мы благодарны за вашу бесконечную поддержку.

Похожие записи

 Отключить Su Access для пользователя

 Переместить домашний каталог в новый раздел

Система Linux Команды администратора

 Как скачать файлы в Linux

Примеры Linux Cron

Linux Vmstat и команды Iostat

8 мыслей о «Команда DEBUGFS — показать время создания файла в Linux»

Работает ли это с файлами, которые были созданы на другом сервере, но были скопированы на сервер, где я могу выполнять указанные выше команды в интерфейсе командной строки?

Начиная с (по крайней мере) версии e2fsprogs 1.44.1 нет необходимости заранее узнавать номер инода, вы можете передать сам путь к файлу, опуская "", вот так…

Большое спасибо, что поделились этой полезной информацией.

Как дата изменения может опережать дату создания.

Или я что-то упустил?

Это правильное наблюдение, возможно, время на тестовой машине было неправильным, мы узнаем об этом больше, используя новый файл.

Мне не помогло:

Возможно, вы используете тип файловой системы EXT2 на своем разделе, это будет работать только на разделах EXT4.

Вы пропустили номер индексного дескриптора, что вызывает это сообщение об ошибке ext2_lookup, также на ext4

Есть что сказать? Присоединяйтесь к обсуждению. Отменить ответ

Этот сайт использует Akismet для уменьшения количества спама. Узнайте, как обрабатываются данные ваших комментариев.

Информационный аватар участника

324, 12

Сегодня я создаю файл в Unix.
Можно ли сделать файл, созданный на 2 дня старше (или на какую-то прошлую дату)?
P.S:
я не хочу менять системную дату на более старую и попробую.

Информационный аватар участника

44, 4

Полагаю, вы можете сделать это с помощью сенсорной команды

Информационный аватар участника

324, 12

Информационный аватар участника

6 402 678 

Дата создания файла — это единственная дата, которую нельзя изменить с помощью "touch". Вы можете изменить дату "последнего обращения" и/или дату "последнего изменения".

Информационный аватар участника

324, 12

Дата создания файла — это единственная дата, которую нельзя изменить с помощью "touch". Вы можете изменить дату "последнего обращения" и/или дату "последнего изменения".

Итак, как мы можем получить дату создания файла?

Информационный аватар участника

6 402 678 

@pandeesh
В современном Unix ближайшей к дате создания файла является "дата последней модификации inode".

Однако эта дата ненадежна, потому что она может быть изменена определенным программным обеспечением для резервного копирования и всем, что изменяет индексный дескриптор, например "chmod" . и, конечно же, сама команда "touch"!

Информационный аватар участника

11 728, 1 345

Дата создания файла (ctime) на самом деле не является датой создания в Unix, это время последнего изменения данных inode и некоторых других метаданных.

chmod изменяет ctime. предположим, что файл -rwxr-xr-x (755), тогда

установит ctime на сейчас.

Команда Linux chattr также может изменить ctime.

Еще 10 обсуждений, которые могут вас заинтересовать

1. Программирование оболочки и создание сценариев

Сценарий оболочки для проверки текущей даты создания файла и его размера >0 КБ или нет для нескольких каталогов

Привет всем, я новичок в написании сценариев и работаю над проектом, в котором у нас есть серверы RSyslog поверх CentOS v7, и более 200 сетевых устройств отправляют журналы на каждый сервер RSyslog. Для каждого сетевого устройства создаются отдельные папки на имя IP-адреса каждого сетевого устройства. Основная. (7 ответов)

Обсуждение начато: Пинаки

2. Программирование оболочки и создание сценариев

Найти файл, созданный в текущую дату

Привет всем! Я пытаюсь найти файл, созданный в текущий день. Я искал на unix.com и нашел команду ниже. find /land/ -mtime -1 -type f -print | grep "FF_Member_STG.dat" Команда проверяет, создан ли сегодня файл с именем "FF_Member_STG.dat", затем завершает работу, иначе продолжает. . (3 ответа)

Обсуждение начато: ace_friends22

3. UNIX для чайников, вопросы и ответы

Как получить часть года из даты создания файла?

Здравствуйте, гуру, мне нужно получить год из даты создания файла. при использовании ls -l он показывает только месяц, день и время. Есть ли какой-либо вариант, который я могу добавить, чтобы получить часть года? Заранее спасибо (7 ответов)

Обсуждение начато: ken6503

4. Программирование оболочки и создание сценариев

Поиск даты создания первого файла в формате ГГГГММДД

Привет всем! Мы копируем все файлы в каталог ARCHIVE после их обработки. Мы делаем этот процесс последние 2 года, теперь у нас есть много файлов в каталоге ARCHIVE. Теперь мне нужно найти, когда первый файл скопирован в этот каталог? Если я выпускаю, ls -l /ARCHIVE/*.* | хвост -1. (3 ответа)

Читайте также: