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

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

Я пользуюсь 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-интерфейс ядра для доступа к временам создания файла , простонар в поддерживающих их файловых системах.

Используйте 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)

Источник

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

В этом туториале показаны 4 простых способа получения даты последнего изменения файла в Linux.

Читайте также:  Для чего это windows bios flash utility

Прочитав это руководство, вы будете знать, как проверить дату последней модификации файла с помощью команд ls, date и stat и бонус метод с MC.

Получение даты последнего изменения файла в Linux с помощью команды date

Первый способ узнать дату последней модификации файла в Linux, описанный в этой статье, основан на команде date.

Когда за командой date следует флаг -r, она показывает нам дату последней модификации файла.

Следующий пример показывает синтаксис для использования команды date, где itisgood – файл, дату последней модификации которого я хочу вывести.

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

Для получения дополнительной информации о команде date посетите сайт https://man7.org/linux/man-pages/man1/date.1.html.

Получение даты последнего изменения файла в Linux с помощью команды ls

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

Сначала используем команду ls с флагом -l, как показано на скриншоте ниже.

Флаг -l указывает команде ls вывести список файлов в длинном формате.

Список в длинном формате включает дату последней модификации файла.

Как вы можете видеть, в первом столбце показаны права, во втором и третьем – пользователи и группы файлов.

Четвертый столбец – размер.

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

В отличие от предыдущего метода с ls, вы получите список всех файлов в каталоге, включая даты их модификации.

Для упорядоченного вывода вы можете добавить флаг -t.

Флаг -t выведет упорядоченный по дате модификации вывод, показывая сначала последние измененные файлы.

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

Команда ls также позволяет проверить дату последней модификации файла по отдельности; для этого просто укажите имя файла, как показано ниже.

Получение даты последнего изменения файла в Linux с помощью команды stat

Третий метод получения даты последней модификации файла в Linux, описанный в этой статье, показывает, как использовать команду stat для достижения этого результата.

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

Как вы можете видеть, вывод показывает больше информации, чем предыдущие команды.

Важно различать даты модификации и изменения.

Строка с именем Modify показывает последний раз, когда файл был изменен.

Строка с именем Change показывает последний раз, когда статус файла изменился; статус включает изменение прав, изменение владельца и т.д.

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

Получение даты последнего изменения файла в Linux с помощью команды midnight commander

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

Заключение

Это руководство показывает, что получить дату последнего изменения файла в Linux можно с помощью различных простых методов.

Ни один из описанных методов не имеет особых преимуществ; все они могут быть реализованы легко и без установки дополнительных пакетов.

Для этого руководства я использовал Debian, но все описанные здесь команды доступны во всех дистрибутивах Linux.

Все описанные команды имеют дополнительные возможности, о которых вы можете узнать, прочитав man-страницы, указанные в конце каждого раздела.

Источник

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

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

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

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

5 ответов

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

Читайте также:  Windows переключает раскладку автоматически

Узнайте 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 для них не учитывали время создания.

    Читайте также:  Линукс команда копирования всего

    Источник

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

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

    Я пробовал с 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»).

    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 . еще;)

    Источник

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