- Как найти дату создания файла?
- 7 ответов
- 🐧 Как узнать время и дату изменения файла в системах Linux
- Получение даты последнего изменения файла в Linux с помощью команды date
- Получение даты последнего изменения файла в Linux с помощью команды ls
- Получение даты последнего изменения файла в Linux с помощью команды stat
- Получение даты последнего изменения файла в Linux с помощью команды midnight commander
- Заключение
- Команда date в Linux
- Синтаксис команды date
- Примеры использования date
- Выводы
- Получить дату последнего изменения файла в Linux
- Получить дату последнего изменения файла в Linux с помощью команды date
- Получить дату последнего изменения файлов в Linux с помощью команды ls
- Узнать дату последнего изменения файла в Linux с помощью stat
- Заключение
Как найти дату создания файла?
Я хочу узнать дату создания конкретного файла, а не дату изменения или дату доступа.
Я пробовал с 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 . еще;)
Источник
🐧 Как узнать время и дату изменения файла в системах Linux
В этом туториале показаны 4 простых способа получения даты последнего изменения файла в Linux.
Прочитав это руководство, вы будете знать, как проверить дату последней модификации файла с помощью команд 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-страницы, указанные в конце каждого раздела.
Источник
Команда date в Linux
Главное свойство утилит GNU/Linux — делать что-то одно, но эффективно. Яркий пример — команда date Linux, работающая с датой и временем. С её помощью можно извлекать любую дату в разнообразном формате, в том числе и рассчитывать прошлое и будущее время. Привилегированные пользователи могут перезаписывать системное время, используя её.
Утилита предустановлена во всех дистрибутивах GNU/Linux. В этой статье будут рассмотрены возможности date и способы применения этой команды.
Синтаксис команды date
Программа может выполнятся от имени обычного пользователя. Стандартный синтаксис команды (квадратные скобки обозначают необязательное наличие):
date [ ОПЦИИ ] . [ +ФОРМАТ ]
Ниже представлена таблица с часто применяемыми опциями для date.
Опция | Длинный вариант | Значение |
---|---|---|
-d STRING | —date=STRING | Вывод даты по указанной строке (например ‘yesterday’, ‘tomorrow’, ‘last monday’). |
-I | —iso-8601[=FMT] | Вывод даты в формате ISO 8601. FMT по умолчанию содержит ‘date’. Также может содержать ‘hourse’, ‘minutes’, ‘seconds’, ‘ns’ для отображения соответствующих значений и часовой пояс относительно UTC рядом с датой. |
—rfc-3339=FMT | Вывод даты в формате RFC 3339. FMT по умолчанию содержит ‘date’. Также может содержать ‘seconds’ и ‘ns’ для отображения секунд или наносекунд. | |
-r FILE | —reference=FILE | Вывод даты последней модификации указанного файла в формате по умолчанию. |
-u | —utc | Вывод UTC-даты |
Аргумент ФОРМАТ отвечает за форматирование вывода даты. Для его указания необходимо поставить знак «+» и написать нужную маску. Наиболее популярные форматы:
Формат | Значение |
---|---|
%% | Знак процента |
%a | День недели текущей локали в короткой форме («Чтв») |
%A | День недели текущей локали в длинной форме («Четверг») |
%b | Месяц года текущей локали в короткой форме в родительном падеже («янв») |
%B | Месяц года текущей локали в длинной форме в родительном падеже («января») |
%c | Дата и время текущей локали без указания часового пояса |
%С | Первые две цифры текущего года |
%d | Числовой день месяца с ведущим нулём |
%D | Дата в формате %m/%d/%y |
%e | День месяца; аналог %_d |
%F | Дата в формате %Y-%m-%d |
%h | Аналог %b |
%H | Часы (00..23) |
%I | Часы (01..12) |
%j | День года (001..366) |
%m | Месяц (01..12) |
%M | Минуты (00..59) |
%n | Новая строка |
%q | Квартал года |
%S | Секунды (00..59) |
%t | Знак табуляции |
%T | Время в формате %H:%M:%S |
%u | Числовой день недели; 1 — понедельник |
%x | Дата в локальном формате |
%X | Время в локальном формате |
%Z | Аббревиатура временной зоны |
Примеры использования date
Введем команду без параметров.
Будет отображена текущая дата и время в соответствии с настройками локали системы.
Команда date без параметров по умолчанию применяет маску %a %b %d %X %Z. Поскольку все форматы должны быть переданы как один параметр (из-за принципа обработки данных командным интерпретатором Bash), пробелы между ними необходимо экранировать обратным слэшем (\) или взять в кавычки.
Особое внимание следует уделить параметру -d (—date). Его функциональность не слишком очевидна, но при этом наиболее обширна.
Пример 1. Вычисление даты по числу секунд, прошедших с 1 января 1970 года.
Пример 2. Вычисление даты и времени следующего понедельника при указании часового пояса Нью-Йорка в 03:00.
date —date=’TZ=»America/New_York» 03:00 next mon’
Обратите внимание: указывать название дня недели или месяца можно в любом регистре, в короткой или длинной форме. Параметры next и last обозначают следующий и прошедший, соответственно, ближайшие дни недели.
Пример 3. Если текущий день месяца — последний, сформировать отчет о занятости дискового пространства корневого и домашнего каталога в файл report.
#!/bin/bash
if [[ $(date —date=’next day’ +%d) = ’01’ ]]; then
df -h / /home > report
Такой скрипт можно использовать для автоматизации работы с помощью демона crontab или anacron.
Выводы
Команда date Linux является эффективным инструментом работы с датой и временем, с широкой возможностью их расчёта для прошедших или будущих показателей. Также она применяется в написании сценариев в командном интерпретаторе Bash.
Источник
Получить дату последнего изменения файла в Linux
Главное меню » Debian » Получить дату последнего изменения файла в Linux
Получить дату последнего изменения файла в Linux с помощью команды date
Первый способ узнать дату последней модификации файла в Linux, описанный в этой статье, основан на команде date. Когда за датой команды следует флаг -r, он показывает нам дату последней модификации файла.
В следующем примере показан синтаксис для использования команды date, где andreyex – это файл, дату последнего изменения которого мы хотим напечатать.
Как видите, вывод очень удобен и включает дату и время последней модификации файла.
Получить дату последнего изменения файлов в Linux с помощью команды ls
Второй метод, описанный в этом руководстве, объясняет, как получить дату последнего изменения файла с помощью команды ls.
Во-первых, давайте воспользуемся командой ls, за которой следует флаг -l , как показано на скриншоте ниже. Флаг -l указывает, что команда ls напечатать длинный список форматов файлов. Список длинных форматов включает дату последнего изменения файла.
Как видите, первый столбец показывает разрешения, второй и третий столбцы показывают пользователей и группы файлов. Четвертый столбец – размер. Затем вы можете увидеть месяц, день и время, когда файл был изменен. В отличие от предыдущего метода с ls, вы получите список всех файлов в каталоге, включая даты их изменения.
Для упорядоченного вывода вы можете добавить флаг -t. Флаг -t распечатает вывод, упорядоченный по дате модификации, показывая сначала последние измененные файлы, как показано на следующем изображении.
Как вы теперь видите, последние измененные файлы теперь отображаются первыми.
Команда ls также позволяет вам проверять дату последнего изменения файла индивидуально; для этого просто укажите имя файла, как показано ниже.
Как видите, этот вывод более удобен для пользователя, если вы хотите проверить только один файл.
Узнать дату последнего изменения файла в Linux с помощью stat
Третий метод получения даты последней модификации файла в Linux, описанный в этой статье, показывает, как использовать для этой цели команду stat.
Синтаксис довольно прост; просто запустите команду stat, за которой следует имя файла, дату последнего изменения которого вы хотите узнать, как показано в примере ниже.
Как видите, вывод показывает больше информации, чем предыдущие команды. Важно различать даты модификации и изменения. Строка с именем Modify показывает нам последний раз, когда файл был изменен. Строка с названием «Modify» показывает, когда в последний раз изменялся статус файла; статус включает изменение разрешений, смену владельца и т. д. Вы можете выполнить команду ниже, чтобы получить в выводе только время модификации, опуская остальную информацию.
Как видите, вывод ограничен датой последнего изменения.
Команда stat также позволяет нам проверять несколько файлов одновременно, как показано в примере ниже, в котором проверяются файлы с именами andreyex и andreyexfile.
Теперь мы получаем информацию о двух указанных файлах.
Заключение
В этой статье показано, что получить дату последнего изменения файла в Linux можно разными простыми способами. Ни один из описанных методов не дает особых преимуществ; все они могут быть легко реализованы без установки дополнительных пакетов. В этой статье мы использовали Debian, но все описанные здесь команды доступны во всех дистрибутивах Linux.
Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.
Источник