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

[ ls ] Как узнать время создания файла?

Я в ступоре. Мне нужно сделать простое действие — распечатать список файлов, чтобы рядом с именем файла показывалось время его создания.

Документация по ls написана для экстрасенсов, а я им не являюсь.

Re: [ ls ] Как узнать время создания файла?

Файловые системы не хранят время создания файла

есть mtime, atime, ctime

  • m — modify
  • a — access
  • c — change (metadata)

[ ls ] Как узнать время создания файла?

> Файловые системы не хранят время создания файла

Вот так сюрприз. Что, интересно, мешает хранить время создания?

[ ls ] Как узнать время создания файла?

>Что, интересно, мешает хранить время создания?

Re: [ ls ] Как узнать время создания файла?

Что, интересно, мешает хранить время создания?

А зачем? За последние 10 лет не припомню ни одного случая, когда бы это понадобилось.

Сегодня при наличии рабочего inotify можно вести отдельный лог создания фалов (IN_CREATE File/directory created in watched directory)

[ ls ] Как узнать время создания файла?

>А зачем? За последние 10 лет не припомню ни одного случая, когда бы это понадобилось.

Как только у нас чего нету мы говорим: «А зачем?». 🙂

[ ls ] Как узнать время создания файла?

Re: [ ls ] Как узнать время создания файла?

Как только у нас чего нету мы говорим: «А зачем?». 🙂

Может потому и нет, что незачем? Я потому и привел довод, что у меня за 10 лет админства не было такой потребности.

[ ls ] Как узнать время создания файла?

>Может потому и нет, что незачем? Я потому и привел довод, что у меня за 10 лет админства не было такой потребности.

Да это трололо было. ИМХО, ты прав, для меня так же creation time = modification time

[ ls ] Как узнать время создания файла?

Ну это естественное желание человека — знать когда файл или каталог был создан. Например, в каталоге /home ты бы мог узнать, когда какой пользователь был создан. Или по дате создания конфигурационного файла какого-нить сервиса узнать, стоял он уже в системе на какой-то момент или нет.

[ ls ] Как узнать время создания файла?

> А зачем? За последние 10 лет не припомню ни одного случая, когда бы это понадобилось.

А время модификации метаданных, хоть раз понадобилось? ИМХО, это еще более бесполезная вещь, чем время создания. И тем не менее оно есть.

Re: [ ls ] Как узнать время создания файла?

А время модификации метаданных, хоть раз понадобилось? ИМХО, это еще более бесполезная вещь, чем время создания. И тем не менее оно есть.

когда был сделан chmod/chown данному файлу весьма интересный вопрос

[ ls ] Как узнать время создания файла?

> когда был сделан chmod/chown данному файлу весьма интересный вопрос

А зачем? За несколько лет не припомню ни одного случая, когда бы это понадобилось.

Источник

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

Я пользуюсь Bash в Debian GNU/Linux 6.0. Можно ли получить дату/время создания файла? Не дата и время конфигурации. ls -lh a.txt и stat -c %y a.txt оба дают время модификации. Каждый файл имеет три разных связанных точны: время последнего доступ к данным, время (форма протекания физических и психических процессов, условие возможности изменения) последней модификации данных и время, когда файл статус изменен. Эти значения возвращаются в файле структура характеристик struct stat, как представлено в . Стандарт POSIX определяет только три отдельных временных метки для каждого файла: время заключительного доступа к данным, время последней модификации данных и время последнего изменения статуса файла. Тем не меньше, современные файловые системы Linux, такие как ext4, Btrfs и JFS, сохраняют время создания файла (вдобавок время рождения), но используют разные имена для данного поля ( crtime в ext4, otime в Btrfs и JFS). Хотя в настоящее время Linux не предоставляет API-интерфейс ядра для доступа к временам создания файла , простонар в поддерживающих их файловых системах.

Читайте также:  Курсоры для windows 10 для геймеров крестик

Используйте stap ( «SystemTap» ) для творения собственного API ядра. Ниже приведен пример извлечения времени создания ext4. Вы можете вытянуть время создания ext4 в системах Fedora 19. Вот мой:

$ uname -a Linux steelers.net 3.11.1-200.fc19.i686.PAE #1 SMP Sat Sep 14 15:20:42 UTC 2013 i686 i686 i386 GNU/Linux

Ясно, что inodes на моих ext4-разделах имеют время создания. Вот сценарий оболочки, который оприделяет индексный дескриптор, связанный с именем файла, а затем добавляет результат stat с порой создания, используя stap («systemtap»). NB: Это просто демо-версия и очень неэффективна, потому что модуль ядра создается, загружается и выгружается для каждого исполнения. Это также, вероятно, весьма хрупко, поскольку проверка ошибок не выполняется. Правильный API ядра предпочтительнее, но этот script можно сделать намного более эффективным и прочитать время создания нескольких файлов / inodes.

В ext4 это может быть; потому что файловая система ext4 хранит время создания файла. Но все же вы обнаружите, что команда stat не сможет показать дату, это потому, что я думаю, что у ядра все еще нет API-интерфейсов. В любом случае время появления файла хранится в ext4 и вы можете найти его, хотя это не прямой метод, но используя debugfs

sudo debugfs -R «stat / ABSOLUTE / PATH» / dev / sdxX | grep crtime

Делать условие, если файл создали не позднее 2х недель. пока написал определение даты творения файла, но почему то выводит всегда одно и то же, хотя должны быть разные даты. образчик вывода: 01.01.1970 03:00:00

echo date(«d.m.Y H:i:s.», filemtime($out_1));

$filetime = filectime(«test.txt»);
$time = microtime(true);
$endtime = $time — $filetime;
echo «Файл был сотворен $endtime секунд назад.»;

Тут понадобилось на шлюзаке изменить дату создания файла 🙂 для чего не скажу , а как сделал читайте дальше ))) Для того что бы изменить дату файла на Freebsd (да и вобщем в Unix или Linux) нужно ввести след команду:

touch -t 201208171310 file

ВВ — век,ГГ — год, ММ — луна, ДД — день, чч — часы, мм — минуты, СС — секунды (если не задать секунды то там будет 0)

Источник

Как найти дату создания файла?

Я хочу узнать дату создания конкретного файла, а не дату изменения или дату доступа.

Я пробовал с ls -ltrh и stat filename .

7 ответов

Стандарт POSIX определяет только три разных временных отметки для каждого файла: время последнего доступа к данным, время последней модификации данных и время последнего изменения статуса файла.

Тем не менее, современные файловые системы Linux, такие как ext4, Btrfs и JFS, хранить время создания файла (также время рождения), но использовать разные имена для данного поля ( crtime в ext4, otime в Btrfs и JFS). Тем не менее, в настоящее время Linux не предоставляет API-интерфейс ядра для доступа к файлу времени создания , даже в поддерживающих их файловых системах.

Как Craig Sanders и Мохсен Пахлеванзаде указал, stat поддерживает % w и %w для отображения времени рождения файла (в человекообразном формате и в секундах с Epoch соответственно). Однако %W сам обращается к времени рождения через stat , предоставляемый gnulib (в get_stat_birthtime() ), который получает время рождения из полей lib/stat-time.h и st_birthtime структуры st_birthtimensec , возвращенных системным вызовом stat . Хотя, например, BSD-системы (и в расширении OS X) предоставляют stat() через st_birthtime , Linux этого не делает. Вот почему stat выводит stat -c ‘%w’ file (указывающий на неизвестное время создания) в Linux даже для файловых систем, которые хранят время создания внутри.

Как Стефан Хазелас указывает на , некоторые файловые системы, такие как ntfs-3g, отображают время создания файла с помощью расширенных атрибутов файла.

TLDR; Используйте stap ( «SystemTap» ), чтобы создать свой собственный API ядра. Демонстрация извлечения времени создания ext4 ниже.

Вы можете извлечь время создания ext4 в системах Fedora 19. Вот мой:

Понятно, что inodes на моих ext4-разделах имеют время создания. Вот сценарий оболочки, который определяет индексный дескриптор, связанный с именем файла, и затем добавляет результат stat со временем создания, используя stap («systemtap»).

Читайте также:  Смена sid для windows

NB: это просто демо и чрезвычайно неэффективны, так как модуль ядра создается, загружается и выгружается для каждого исполнения. Это также, вероятно, очень хрупко, поскольку проверка ошибок не выполняется. Правильный API ядра предпочтительнее, но этот скрипт можно сделать намного более эффективным и прочитать время создания нескольких файлов /инодов.

В ext4 это возможно; потому что файловая система ext4 хранит время создания файла. Но все же вы обнаружите, что команда stat не может показать дату, это потому, что я думаю, что у ядра по-прежнему нет API-интерфейсов для этого.

В любом случае время рождения файла сохраняется в ext4 , и вы можете найти его, хотя это не прямой метод, но используя debugfs

sudo debugfs -R «stat /ABSOLUTE /PATH» /dev /sdxX | grep crtime

В теории с GNU stat вы можете использовать stat -c ‘%w’ или %W , чтобы получить дату создания файла (также время рождения).

На практике большинство файловых систем не записывают эту информацию, и ядро ​​linux не предоставляет никакого доступа к ней.

Самое близкое, что вы можете получить, это ctime файла, который является not временем создания, это время, когда метаданные файла были в последний раз изменены.

В Weekly News Linux появилась интересная статья об этом несколько лет назад — http://lwn.net/Articles/397442/

Разница между FreeBSD и GNU\Linux в stat command :

Если вы вызываете команду stat в GNU\Linux , она вызывает параметр -x , но в FreeBSD вы сами должны вызывать -x.

Примечания: -x очень полезно в сценарии —printf .

В OS X вы можете использовать ls -lU , stat -f%B , GetFileInfo -d или mdls -n kMDItemFSCreationDate :

Кстати, это работает только на ext4. Я не нашел решение для BtrFS . еще;)

Источник

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

При использовании операционных систем UNIX, как и в случае с Linux, каждый компонент каталогизируется как файл и каждый «файл», и каждый раз, когда мы вносим какие-либо изменения в этот элемент, все эти изменения размещаются в индексном узле, и Linux позаботится об этом. идентификация каждого файла по соответствующему номеру inode, который не является человеческим именем файла, с которым он был создан.

В среде Linux у нас есть команда «stat» (Статистика), которая, как следует из названия, отвечает за отображение состояния файловой системы, генерируя полезную информацию, такую ​​как:

  • Дата создания файла
  • Номер inode
  • Последние изменения, внесенные в файл
  • Последнее изменение состояния
  • Последний доступ и более актуальная информация.

В Linux у нас есть такие параметры, как:

Отображение времени смены файла.

Он генерирует время доступа к файлу.

Показывает время модификации файла.

Показывает время создания файла.

Чтобы не отставать, не забудьте подписаться на наш канал на YouTube! ПОДПИСЫВАТЬСЯ

1. Найдите дату создания файла в Linux

Чтобы найти подробную информацию о файле, в частности, дату и время его создания, мы можем использовать crtime, который отвечает за поиск inode файла с помощью команды stat, для этого мы выполним следующий синтаксис:

Для этого мы должны перейти в каталог, где находится файл для анализа, и, как мы видим, отображаемая информация содержит такие детали, как:

  • Дата последнего доступа и изменения
  • Ссылки
  • Размер
  • Номер узла и другое.

В качестве альтернативы мы также можем использовать команду ls. В этом случае будет отображаться индексный дескриптор указанного файла. Необходимо будет принять во внимание номер inode, связанный с этим файлом.

2. Знать корневую систему в Linux

Следующим шагом является определение корневой файловой системы, в которой размещен отсканированный файл, для этого мы выполним команду df -h, чтобы определить корневую файловую систему следующим образом:

В этом случае мы видим, что корневая система — это «/ dev / sda1». Теперь, имея эту информацию, мы будем использовать команду «debugfs », чтобы найти время создания файла, добавив параметр« -R », который сообщает debugfs выполнить одну внешнюю команду, связанную с номером inode файла. для использования, Для этого мы выполним следующий синтаксис:

В результате мы можем увидеть гораздо более полную информацию о выбранном файле с такими деталями, как:

  • Номер inode
  • Режим
  • Связанный пользователь и группа
  • Размер
  • Подробная информация о ctime, atime, mtime и crtime
  • Контрольная сумма и многое другое.
Читайте также:  Активация windows 10 ltsc ключики 2019

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

Источник

Как я нахожу время создания файла?

Я должен найти время создания файла, когда я прочитал некоторые статьи об этой проблеме, все упомянули, что нет никакого решения (как Site1, Site2).

Когда я попробовал stat команда, указывает это Birth: — .

Таким образом, как я могу найти время создания файла?

5 ответов

Есть способ узнать дату создания каталога, просто выполните следующие действия:

Узнайте inode каталога с помощью ls -i команда (скажем, ее X )

Узнайте, на каком разделе сохранен ваш каталог, с помощью команды df -T / path (скажем, это на / dev / sda1 )

Теперь используйте эту команду: sudo debugfs -R ‘stat ‘ / dev / sda1

В выводе вы увидите:

crtime — дата создания вашего файла.

Что я тестировал :

  1. Создал каталог в определенное время.
  2. Получил доступ к нему.

Изменил его, создав файл.

Я попробовал команда, и она дала точное время.

  • Затем я изменяю ее и снова проверяю, crtime осталось прежним, но изменить и доступ время изменено.
  • @Nux нашел отличное решение для этого, которое вы все должны проголосовать. Я решил написать небольшую функцию, которую можно было бы использовать для прямого запуска всего. Просто добавьте это в свой

    Теперь вы можете запустить get_crtime , чтобы распечатать даты создания любого количества файлов или каталогов:

    TL; DR: Просто беги: sudo debugfs -R ‘stat / path / to / your / file’ / dev /

    (Чтобы определить вашу fs, запустите df -T / path / to / your / file , скорее всего, это будет / dev / sda1 ).

    Длинная версия:

    Мы собираемся запустить две команды:

    Узнать имя раздела для ваш файл.

    Вывод будет выглядеть следующим образом (сначала имя раздела):

    Узнать время создания этого файла.

    В выходных данных найдите ctime .

    Неспособность stat показать время создания связана с ограничением системного вызова stat (2) , структура возврата которого не включает поле для времени создания. Однако, начиная с Linux 4.11 (т.е. 17.10 и новее *), доступен новый системный вызов statx (2) , который включает время создания в его возвращаемую структуру.

    * И, возможно, в более старых версиях LTS, использующих ядра аппаратного стека (HWE). Проверьте uname -r , чтобы убедиться, что вы используете ядро ​​версии не ниже 4.11 для подтверждения.

    К сожалению, вызывать системные вызовы непосредственно в программе на языке C непросто. Обычно glibc предоставляет оболочку, которая упрощает работу, но glibc добавила оболочку только для statx (2) в августе 2018 г. (версия 2.28 , доступна в 18.10). Сама команда stat получила поддержку statx (2) только в GNU coreutils 8.31 (выпущена в марте 2019 г.) , однако даже только Ubuntu 20.04 имеет coreutils 8.30 .

    Но я не думаю, что это будет перенесено на выпуски LTS, даже если они получат или уже используют новые ядра или glibcs. Поэтому я не ожидаю, что stat в любой текущей версии LTS (16.04, 18.04 или 20.04) когда-либо напечатает время создания без ручного вмешательства.

    В 18.10 и новее, вы можете напрямую использовать функцию statx , как описано в man 2 statx (обратите внимание, что на странице руководства 18.10 неверно указано, что glibc еще не добавил оболочку).

    в Ubuntu 20.10 вы сможете использовать stat напрямую:

    К счастью, для старых систем @whotwagner написал пример программы на C , в которой показано, как использовать Системный вызов statx (2) в системах x86 и x86-64. Его вывод имеет тот же формат, что и stat по умолчанию, без каких-либо параметров форматирования, но его просто изменить, чтобы печатать только время рождения.

    Сначала клонируйте его:

    Вы можете скомпилировать код statx.c или, если вам просто нужно время рождения, создайте Birth.c в клонированном каталоге со следующим кодом (который является минимальной версией ] statx.c печатает только временную метку создания, включая точность наносекунды):

    Теоретически это должно сделать время создания более доступным:

    • должно поддерживаться больше файловых систем, чем только ext * ( debugfs — это инструмент для файловых систем ext2 / 3/4, который нельзя использовать в других)
    • вам не нужен root, чтобы использовать это (за исключением установки некоторых необходимых пакетов, таких как make и linux-libc-dev ).

    Тестирование системы xfs, например:

    Однако это не сработало для NTFS и exfat. Я полагаю, что файловые системы FUSE для них не учитывали время создания.

    Источник

    Оцените статью