Найти в Дзене
UFO.Hosting

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

С датой создания файла в Linux есть один важный нюанс: она существует не всегда и показывается не на всех файловых системах. Многие пользователи привыкли, что у файла должна быть отдельная «дата рождения», как в Windows, но в Linux всё долгое время крутилось вокруг трёх других меток времени: доступа, изменения содержимого и изменения метаданных. Поддержка именно времени создания есть, но зависит от файловой системы, ядра и утилит, которыми вы пользуетесь. GNU stat умеет показывать время рождения файла как Birth, а если система не может его получить, выводит - или 0; в Linux это поле связано с btime и интерфейсом statx. Из-за этого вопрос «как узнать дату создания файла» в Linux на практике звучит чуть точнее: сначала нужно проверить, хранит ли ваша файловая система это время вообще, а уже потом — какой командой его удобнее смотреть. Если для работы, хранения данных или развёртывания своих сервисов вам нужен VPS или выделенный сервер, в UFO.Hosting можно заказать подходящую конфигурацию
Оглавление

С датой создания файла в Linux есть один важный нюанс: она существует не всегда и показывается не на всех файловых системах. Многие пользователи привыкли, что у файла должна быть отдельная «дата рождения», как в Windows, но в Linux всё долгое время крутилось вокруг трёх других меток времени: доступа, изменения содержимого и изменения метаданных.

Поддержка именно времени создания есть, но зависит от файловой системы, ядра и утилит, которыми вы пользуетесь. GNU stat умеет показывать время рождения файла как Birth, а если система не может его получить, выводит - или 0; в Linux это поле связано с btime и интерфейсом statx.

Из-за этого вопрос «как узнать дату создания файла» в Linux на практике звучит чуть точнее: сначала нужно проверить, хранит ли ваша файловая система это время вообще, а уже потом — какой командой его удобнее смотреть.

Если для работы, хранения данных или развёртывания своих сервисов вам нужен VPS или выделенный сервер, в UFO.Hosting можно заказать подходящую конфигурацию со скидкой по промокоду DZEN. Это удобный вариант для тех, кому важна предсказуемая производительность, стабильная работа сервера и возможность спокойно запускать свои проекты под полной собственный контроль.

Какие временные метки есть у файла

Когда вы смотрите информацию о файле, обычно встречаются четыре времени.

→ atime — когда файл в последний раз читали.
→ mtime — когда в последний раз меняли его содержимое.
→ ctime — когда в последний раз менялись метаданные inode: права, владелец, ссылки и так далее. Это
не дата создания.
→ btime или Birth — собственно время создания файла, если файловая система и инструменты это поддерживают. Linux man-pages отдельно отмечают, что btime исторически не было в классическом интерфейсе stat, а поддержка зависит от файловой системы.

Это distinction важна, потому что очень многие путают ctime с датой создания. На самом деле ctime может обновиться, например, после chmod или chown, даже если сам файл никто не переписывал.

Самый простой способ: stat

Чаще всего начинать стоит именно с stat. Это самый понятный и безопасный вариант.

stat имя_файла

Пример:

stat report.txt

Обычно вы увидите что-то вроде:

File: report.txt

Size: 1240 Blocks: 8 IO Block: 4096 regular file

Device: ...

Inode: ...

Access: 2026-03-26 12:10:00.000000000 +0200

Modify: 2026-03-25 21:44:12.000000000 +0200

Change: 2026-03-25 21:44:12.000000000 +0200

Birth: 2026-03-25 21:44:10.000000000 +0200

Если строка Birth заполнена, значит дата создания доступна. Если вместо неё стоит -, система не смогла её получить. Форматы %w и %W в GNU stat как раз отвечают за время рождения файла: %w выводит читаемую дату, а %W — секунды с начала эпохи Unix; при отсутствии данных утилита показывает - или 0.

Если вам нужна только дата создания без лишней информации, можно вывести её отдельно:

stat -c %w report.txt

А если нужен Unix timestamp:

stat -c %W report.txt

Это удобно для скриптов, сортировки и автоматической обработки. Поддержка этих форматов описана в документации GNU Coreutils.

Когда stat показывает Birth: -

Это самая частая ситуация, которая сбивает с толку. Пользователь видит stat, ожидает дату создания, а вместо неё — пустоту. Обычно это означает одно из трёх:

Во-первых, файловая система не хранит время создания файла.
Во-вторых, файловая система хранит его, но текущий стек инструментов не умеет это корректно показать.
В-третьих, файл лежит не там, где вы думаете: например, на сетевом ресурсе, старом разделе или внешнем носителе с другой файловой системой.

Linux man-pages прямо отмечают, что btime поддерживается не всеми файловыми системами, а стандартная структура stat исторически вообще не возвращала это поле. Для получения времени создания используется более новый интерфейс statx.

Проще говоря, команда у вас может быть правильной, а ответ — пустым не из-за ошибки, а потому что самой даты создания в доступном виде просто нет.

Можно ли посмотреть дату создания через ls

Иногда да, но с оговорками.

У GNU ls есть режим:

ls -l --time=birth report.txt

или

ls -l --time=creation report.txt

Но тут есть тонкий момент: если время рождения недоступно, ls может откатиться к mtime, то есть показать время изменения содержимого. В документации Coreutils это описано прямо: --time=birth в long-формате печатает время создания, если оно доступно, а если нет — использует mtime.

Поэтому для проверки именно даты создания ls — не лучший первый выбор. Для быстрой ориентировки он подходит, но если нужен точный ответ, лучше смотреть через stat, потому что там сразу видно, есть Birth или нет.

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

Если нужно просмотреть даты создания нескольких файлов, удобнее использовать цикл или find.

Например, так:

for f in *; do

stat -c '%n | %w' "$f"

done

Команда выведет имя файла и его дату создания, если она доступна.

У find тоже есть поддержка времени рождения файла. В GNU Findutils директива %B отвечает именно за birth time; если ОС или файловая система её не поддерживает, она выводит пустую строку.

Пример:

find . -maxdepth 1 -type f -printf '%p | %B+\n'

Так удобно просматривать каталог целиком. Но на практике для разовой проверки всё равно чаще используют stat, потому что он понятнее и предсказуемее.

Что делать на ext4, если обычные команды не помогают

С ext4 есть интересная деталь. В документации ext4 сказано, что inode этой файловой системы умеет хранить crtime, то есть время создания файла. При этом обычный старый интерфейс stat() не давал к нему прямого доступа, а debugfs умеет его показывать.

Если stat не показывает Birth, но вы точно знаете, что файл находится на ext4, можно попробовать debugfs. Это уже не повседневный пользовательский способ, а скорее технический обходной путь.

Сначала узнайте, на каком разделе лежит файл:

df имя_файла

Затем выполните:

sudo debugfs -R 'stat имя_файла' /dev/sdXN

Где /dev/sdXN — это ваш раздел, например /dev/sda2.

В выводе ищите строку crtime. Для ext4 это и есть время создания. Такой подход давно используется как практический способ вытащить creation time на ext4, когда обычные средства не показывают Birth, а сама документация ext4 подтверждает наличие crtime и то, что debugfs умеет его отображать.

С debugfs стоит быть аккуратнее. Это низкоуровневый инструмент для работы с файловой системой. Если использовать его только на чтение, как в примере выше, риск минимален, но запускать такие команды всё равно лучше осознанно.

Почему дата создания может “пропасть”

У пользователей часто возникает ощущение, что дата создания то есть, то нет. Обычно причина в одном из типичных сценариев.

Первый — файл был скопирован, а не перемещён. Практически это означает создание нового файла, а значит и новое btime.
Второй — файл лежит на другой файловой системе: например, на флешке, сетевой папке или старом разделе.
Третий — вы смотрите не на сам файл, а на симлинк, контейнер, bind mount или другой объект, для которого поведение отличается.

Из определения btime в Linux следует практический вывод: это время устанавливается при создании файла и потом не меняется. Поэтому обычное переименование в пределах той же файловой системы обычно сохраняет дату создания, а копирование создаёт уже новый объект с новой датой. Это логическое следствие того, как ядро описывает btime и inode.

Как узнать тип файловой системы

Если команда ничего не показывает, полезно сразу понять, с чем вы вообще работаете.

df -T имя_файла

Эта команда покажет раздел и тип файловой системы. После этого уже легче понять, стоит ли ждать Birth от обычного stat или придётся искать обходной путь.

Если это ext4, можно пробовать debugfs. Если это современная файловая система с нормальной поддержкой btime, stat обычно достаточно. Если это что-то сетевое, экзотическое или старое, дата создания может просто не возвращаться наружу. Поддержка btime действительно зависит от файловой системы, и man-pages Linux отдельно это подчеркивают.

Команды, которые полезно запомнить

Если нужен минимум без длинных разборов, вот практический набор:

stat файл

Показать полную информацию, включая Birth, если она есть.

stat -c %w файл

Вывести только дату создания. Если её нет, будет -.

stat -c %W файл

Вывести дату создания в виде Unix timestamp. Если её нет, будет 0.

ls -l --time=birth файл

Быстро посмотреть время создания через ls, но помнить, что при отсутствии birth time утилита может показать mtime.

df -T файл

Понять, на какой файловой системе лежит файл.

sudo debugfs -R 'stat файл' /dev/sdXN

Технический способ для ext4, если нужен crtime.

Короткий практический совет

Если вам нужно быстро и без лишней теории проверить дату создания файла в Linux, начинайте с stat. Это самый честный вариант:

stat файл

Если в выводе есть строка Birth, задача решена. Если там -, дело уже не в команде, а в том, что ваша система или файловая система не отдала это время. Тогда следующий шаг — посмотреть тип файловой системы через df -T, а для ext4 при необходимости добраться до crtime через debugfs.

Если хотите, я могу сразу сделать ещё и короткую версию этой статьи для сайта или YouTube-сценария.