Дата модификации файла Linux

Обновлено: 03.07.2024

Я просто знаю, что ls -t и ls -f дают разную сортировку файлов и подкаталогов в каталоге.

  • В чем разница между отметкой времени, временем модификации и временем создания файла?
  • Как получить и изменить такую ​​информацию с помощью команд?
  • В отношении какой информации люди говорят, что один файл "новее" другого?
  • Какие изменения информации не изменят файл?

Например, я видел, как кто-то написал:

По умолчанию программа rsync только проверяет, отличаются ли файлы по размеру и отметке времени. Неважно, какой файл новее, если он другой, он будет перезаписан. Вы можете передать флаг --update в rsync, что заставит его пропускать файлы в месте назначения, если они новее, чем файл в источнике, но только до тех пор, пока они относятся к тому же типу файлов. Это означает, что если, например, исходный файл является обычным файлом, а конечный файл является символической ссылкой, конечный файл будет перезаписан независимо от временной метки.

Кроме того, означает ли здесь тип файла только обычный файл и симлинк, а не такие типы, как pdf, jpg, htm, txt и т. д.?



2 ответа 2

Существует 3 вида "временных меток":

  • Доступ — время последнего чтения файла
  • Изменить — время последнего изменения файла (содержимое было изменено)
  • Изменить — время последнего изменения метаданных файла (например, разрешения)

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

stat также покажет вам дополнительную информацию, такую ​​как устройство, индексные дескрипторы, ссылки и т. д.

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

Утилита для изменения временных меток — touch . Есть несколько аргументов, чтобы решить, какую метку времени изменить (например, -a для времени доступа, -m для времени модификации) и повлиять на синтаксический анализ новой заданной метки времени. Дополнительные сведения см. в разделе «Прикосновение к человеку».

touch может оказаться удобным в сочетании с cp -u ("копировать, только если исходный файл новее целевого файла или когда целевой файл отсутствует") или для создания пустого маркера файлы.

Спасибо! Для команды rsync в «неважно, какой файл новее» с точки зрения того, какую отметку времени он подразумевает под «новее». Кроме того, примечание: означает ли тип файла, о котором заботится rsync, только обычный файл и симлинк, а не такой тип, как pdf, jpg, htm, txt и т. д.?

Как правило, ссылкой на время файла является "модифицированная" отметка времени. Например, что вы видите из ls -l . И тип файла относится к файлу и символической ссылке (или другим типам файлов, таким как каталоги или устройства). Не тип данных в файле (текст или jpeg и т. д.).

@Tim В этом контексте это измененная временная метка; rsync говорит, что когда он решает, следует ли создавать резервную копию файла, он не проверяет, был ли исходный файл изменен позднее, чем существующая резервная копия (что характерно для программ резервного копирования); он просто проверяет, имеют ли файлы разные размеры или время модификации, и создает резервную копию, если это так

А как узнать, когда файл был создан первым? Эта информация вообще где-то хранится или теряется в обновлениях? так сказать, как долго файл существует.

Ответ echox верен, но я хочу добавить информацию о времени создания файла.

Некоторые файловые системы поддерживают дополнительную запись в индексном узле, касающуюся времени создания (или времени рождения). Я знаю, что ext4 поддерживает эту функцию, а также JFS и BTRFS.

Однако большинство инструментов и API еще не обновлены для чтения этой дополнительной информации. Так что даже если он может быть там, он недоступен.

Например, в Ubuntu 12.04 LTS для файла, который я создал сегодня, я получаю следующее:

Вы можете видеть, что новая функция статистики имеет поле рождения, хотя вывод кажется неверным. И через debugfs мы можем получить информацию (crtime, так как я на файловой системе ext4).

После ядра 4.11 появился новый системный вызов statx, помимо лучшей поддержки Y2038 или сетевых файловых систем, он также предоставляет несколько дополнительных функций, таких как доступ к времени btime или времени рождения (времени создания). Поддержка ext4 должна быть в той же версии ядра 4.11.

Были исправления для добавления поддержки этого нового системного вызова в более поздних выпусках ядра: например. BTRFS и F2FS в ядре 4.13, SMB3 в 4.14, GFS2 в 4.15, NFS в 4.16 и т. д.

Грядущий glibc будет предоставлять вызов функции для запроса этого интерфейса (см. новости Phoronix о поддержке glibc statx).Так что мы можем ожидать поддержку этой функции в пользовательском пространстве довольно скоро.

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

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

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

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


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

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

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

Сначала воспользуемся командой ls, а затем флагом -l, как показано на снимке экрана ниже. Флаг -l указывает команде ls напечатать список файлов в длинном формате. Длинный список форматов включает дату последнего изменения файла.


Как видите, в первом столбце показаны права доступа, во втором и третьем — пользователи и группы файлов. Четвертая колонка - размер. Затем вы можете увидеть месяц, день и время, когда файл был изменен. В отличие от предыдущего метода с ls, вы получите список всех файлов в каталоге, включая даты их изменения.

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


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

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


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

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

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

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


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

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

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


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

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


Теперь мы получаем информацию о двух указанных нами файлах.

Заключение

В этом руководстве показано, что получить дату последнего изменения файла в Linux можно с помощью различных простых методов. Ни один из объясненных методов не дает особых преимуществ; все они могут быть реализованы легко и без установки дополнительных пакетов. Для этого руководства я использовал Debian, но все описанные здесь команды доступны во всех дистрибутивах Linux.Все объясненные команды имеют дополнительные функции, о которых вы можете узнать, прочитав справочные страницы, указанные в конце каждого раздела.

Спасибо, что следите за нами; продолжайте читать Linux Hint для получения дополнительных советов и руководств.

Об авторе

Дэвид Адамс

Дэвид Адамс — системный администратор и писатель, специализирующийся на технологиях с открытым исходным кодом, программном обеспечении для обеспечения безопасности и компьютерных системах.

Я новичок в Linux. Я использую командную строку. Я пытаюсь просмотреть дату последнего изменения файла. Как это сделать в Linux из командной строки?

@BrunoBieri Это дата модификации. См. man ls . Типичные файловые системы Linux даже не отслеживают дату создания — смотрите принятый ответ, чтобы узнать, какие даты отслеживаются.

7 ответов 7

Как упомянул @edvinas.me, статистика сообщает вам различную информацию о файле, включая дату последнего изменения.

Сначала меня смутили Modify и Change, чтобы уточнить, списки вывода статистики:

  • Доступ показывает время последнего доступа к данным (например, чтения).
  • Modify показывает время последней модификации данных.
  • Изменение показывает время последнего изменения статуса файла.

Используйте для этого команду stat:

Еще один более гибкий способ — использовать date -r . С мужской даты :

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

Да, очень полезно, спасибо. Вот функция bash, которая переименует файл так, чтобы к нему добавлялся префикс измененного времени: function mvfilestime() < if [ x"$<1>" = "x" ] ; затем echo "mvfilestime: отсутствует аргумент файла для mv" else f=$(date +"%Y-%m-%d-%H-%M" -r $<1>)-$ <1>echo mv $ <1>$ mv $ <1>$ фи >

ls -l должен сделать эту работу.

На основе комментария @Adam Taylor в ответе @phoops и ответе @Sparhawk.

Чтобы конкретно просто получить дату (например, 3 октября 2019 года, потому что это был мой последний день рождения)

  • stat -c %y файл | cut -d' ' -f1 даст вам 2019-10-03
  • date +%F -r file также даст вам 2019-10-03
  • date +%D -r file даст вам 03.10.19
  • date +%x -r file вероятно даст либо 03.10.2019, либо 03.10.19, если вы находитесь в США, и либо 10.03.2019, либо 03 /10/19, если вы находитесь в Великобритании, просто чтобы назвать пару примеров (конечно, есть и другие возможности)

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

Сокращенное название месяца локали %b (например, январь)
Полное название месяца локали %B (например, январь)
.
%d день месяца (например, 01)
%D дата; то же, что и %m/%d/%y
%e день месяца, заполненный пробелами; то же, что и %_d
%F полная дата; то же, что и %Y-%m-%d
.
%m месяц (01..12)
.
Представление даты локали %x (например, 31.12.99)
.
%y последние две цифры года (00..99)
%Y год
.
По умолчанию дата дополняет числовые поля нулями.
Следующие необязательные флаги могут следовать за `%':

- (дефис) не дополнять поле
_ (подчеркивание) дополнять пробелами
0 (ноль) дополнять нулями
^ по возможности использовать верхний регистр

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

Метод 1: Использование команды stat
Команда stat используется для проверки состояния файла и возвращает сведения о файле, такие как его размер, права доступа, дату создания, дату последнего обращения к нему и дату последнего изменения файла. файл.
За командой stat должно следовать имя (или полный путь) файла, как показано ниже, и она выдаст следующий вывод.

stat demofile.txt

Вы можете увидеть дату последнего изменения в выходных данных выше.
Если вам не нужны подробные выходные данные и вас интересуют только последние измененные данные, используйте приведенную ниже команду.

stat -c '%y' demofile.txt

где флаг -c используется для отображения данных в пользовательском формате, а %y используется для отображения времени последней модификации. Таким образом, эта команда будет выводить только

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

Метод 2: Использование команды date
команды date с опцией -r, за которой следует имя файла, отобразит дату и время последнего изменения файла.
Пример,

дата -r demofile.txt

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

которая является датой и временем последнего изменения данного файла. Команда date также может использоваться для определения даты последнего изменения каталога.
В отличие от команды stat, дату нельзя использовать без каких-либо параметров.

Способ 3. Использование команды ls
Команда ls используется для вывода списка файлов и папок, а ее параметр -l отображает имена файлов и каталогов вместе с другими сведениями, такими как права доступа к файлам и папкам, пользователь-владелец, дата изменения и т. д. .
При выполнении этой команды

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