Linux дата изменения файла

Обновлено: 30.06.2024

Исторически так сложилось, что man-страница команды ls и встроенная помощь по команде ls --help не содержат сведений о том, как посмотреть разные времена действий с файлами. Точнее, сведения эти неполные.

На файловой системе extX (где X- это число) обычно хранится следующая временн а я информация:

  • crtime (create time, не путать с ctime! ) — время создания файла
  • mtime (modification time) — время последнего изменения файла, каталога
  • atime — (access time) — время последнего доступа к файлу, каталогу
  • ctime — (change time, не путать с crtime! ) — время последнего изменения атрибутов файла, каталога (данных из в inode-области)
  • dtime (delete time) — время удаления файла

Однако документация на ls говорит, что можно получить следующие сведения:

--time=WORD with -l, show time as WORD instead of default

modification time: atime or access or use (-u)

ctime or status (-c); also use specified time

as sort key if --sort=time

Отсюда мы имеем, что mtime (время модификации) отображается в команде ls -l по-умолчанию:

drwxr-xr-x 2 www-data www-data 4096 May 1 2016 helpers

-rw-rw-rw- 1 www-data www-data 5871 May 1 2016 Plugin_Articles.php

-rw-rw-rw- 1 www-data www-data 241 Sep 3 2010 Plugin_Empty.php

-rw-rw-rw- 1 www-data www-data 3077 May 1 2016 Plugin_Gallery.php

-rw-rw-rw- 1 www-data www-data 10318 Apr 30 2016 Plugin_Guestbook_Captcha.php

-rw-rw-rw- 1 www-data www-data 12054 Mar 7 14:06 Plugin_Guestbook.php

Время последнего доступа к файлу/каталогу atime можно посмотреть командой:

drwxr-xr-x 2 www-data www-data 4096 Mar 9 05:02 helpers

-rw-rw-rw- 1 www-data www-data 5871 Mar 9 05:02 Plugin_Articles.php

-rw-rw-rw- 1 www-data www-data 241 Mar 9 05:02 Plugin_Empty.php

-rw-rw-rw- 1 www-data www-data 3077 Mar 9 05:02 Plugin_Gallery.php

-rw-rw-rw- 1 www-data www-data 10318 Mar 9 05:02 Plugin_Guestbook_Captcha.php

-rw-rw-rw- 1 www-data www-data 12054 Mar 9 05:02 Plugin_Guestbook.php

Здесь видно, что срабатывало ночное архивирование в 5:02. А если просто открыть один файл на просмотр, то после такого действия получим:

drwxr-xr-x 2 www-data www-data 4096 Mar 9 05:02 helpers

-rw-rw-rw- 1 www-data www-data 5871 Mar 10 10:31 Plugin_Articles.php

-rw-rw-rw- 1 www-data www-data 241 Mar 9 05:02 Plugin_Empty.php

-rw-rw-rw- 1 www-data www-data 3077 Mar 9 05:02 Plugin_Gallery.php

-rw-rw-rw- 1 www-data www-data 10318 Mar 9 05:02 Plugin_Guestbook_Captcha.php

-rw-rw-rw- 1 www-data www-data 12054 Mar 9 05:02 Plugin_Guestbook.php

Время последнего изменения атрибутов файла/каталога (изменений в inode) ctime узнается так:

drwxr-xr-x 2 www-data www-data 4096 May 8 2016 helpers

-rw-rw-rw- 1 www-data www-data 5871 May 8 2016 Plugin_Articles.php

-rw-rw-rw- 1 www-data www-data 241 May 8 2016 Plugin_Empty.php

-rw-rw-rw- 1 www-data www-data 3077 May 8 2016 Plugin_Gallery.php

-rw-rw-rw- 1 www-data www-data 10318 May 8 2016 Plugin_Guestbook_Captcha.php

-rw-rw-rw- 1 www-data www-data 12054 Mar 7 14:06 Plugin_Guestbook.php

Но у нас еще остались crtime и dtime . Как их узнать? Можно попробовать команду:

ls: invalid argument ‘crtime’ for ‘--time’

- ‘atime’, ‘access’, ‘use’

Ошибка. Но вот что интересно. Оказывается, команда ls поддерживает не только atime , ctime и mtime (по умолчнию). Есть еще какие-то загадочные access , use , status . И что они обозначают, в документации ls не написано. И кроме того, непонятно как посмотреть crtime и dtime .

Долгие ковыряния в интернете показали, что, в Linux все очень запутано. Например, в ext3 время создания crtime вообще не хранится. А в ext4 хранится, но его невозможно напрямую посмотреть через ls. Для ext4 рекомендуют применять следующий трюк:

1. Узнать номер i-ноды файла через опцию -i , например:

385631 drwxr-xr-x 2 www-data www-data 4096 May 1 2016 helpers

385633 -rw-rw-rw- 1 www-data www-data 5871 May 1 2016 Plugin_Articles.php

385634 -rw-rw-rw- 1 www-data www-data 241 Sep 3 2010 Plugin_Empty.php

385629 -rw-rw-rw- 1 www-data www-data 3077 May 1 2016 Plugin_Gallery.php

385638 -rw-rw-rw- 1 www-data www-data 10318 Apr 30 2016 Plugin_Guestbook_Captcha.php

385637 -rw-rw-rw- 1 www-data www-data 12054 Mar 7 14:06 Plugin_Guestbook.php

2. Найти информацию об i-ноде данного файла:

Inode: 385633 Type: regular Mode: 0666 Flags: 0x80000

Generation: 3970661518 Version: 0x00000000:00000001

User: 33 Group: 33 Size: 5871

File ACL: 0 Directory ACL: 0

Links: 1 Blockcount: 16

Fragment: Address: 0 Number: 0 Size: 0

ctime: 0x572f7053:875a9d88 -- Sun May 8 19:58:59 2016

atime: 0x58c25640:80cad680 -- Fri Mar 10 10:31:12 2017

mtime: 0x57260da3:00000000 -- Sun May 1 17:07:31 2016

crtime: 0x572f6fa8:65ca9a70 -- Sun May 8 19:56:08 2016

Size of extra inode fields: 28

Да, номер ноды вот так, с угловыми скобками, и надо писать. В полученной информации видно время crtime . И что интересно, оно почти совпадает с временем ctime .

Почему оно совпадает? Потому что с момента создания файла никакие атрибуты файла не менялись. Почему почти совпадает? Могу предположить, что при копировании файлов файлы сначала копируются, а потом им назначаются атрибуты или устанавливается содержимое. Вот, например, какое время у файла /etc/networks:

ctime: 0x56a233b8:3ac960a0 -- Fri Jan 22 16:50:48 2016

atime: 0x58c264eb:43bd7fb8 -- Fri Mar 10 11:33:47 2017

mtime: 0x56a233b8:3ac960a0 -- Fri Jan 22 16:50:48 2016

crtime: 0x56a233b0:54892ca0 -- Fri Jan 22 16:50:40 2016

Здесь видно, что время создания crtime - самое первое на временной шкале. Остальные времена отличаются на секунды.

Теперь, если поменять, например, права доступа файла Plugin_Articles.php , то можно увидеть:

Inode: 385633 Type: regular Mode: 0755 Flags: 0x80000

Generation: 3970661518 Version: 0x00000000:00000001

User: 33 Group: 33 Size: 5871

File ACL: 0 Directory ACL: 0

Links: 1 Blockcount: 16

Fragment: Address: 0 Number: 0 Size: 0

ctime: 0x58c262ee:19ffcde0 -- Fri Mar 10 11:25:18 2017

atime: 0x58c25640:80cad680 -- Fri Mar 10 10:31:12 2017

mtime: 0x57260da3:00000000 -- Sun May 1 17:07:31 2016

crtime: 0x572f6fa8:65ca9a70 -- Sun May 8 19:56:08 2016

Size of extra inode fields: 28

Теперь crtime и ctime содержат совсем разные даты. Так и должно быть.

Хинт! Можно не долбаться с i-node, а воспользоваться просто именем файла в команде debugfs:

debugfs -R 'stat /home/user/file1' /dev/sda1

Ищем параметр crtime - это и есть дата создания файла.

Остался вопрос по dtime. Для того чтобы узнать дату удаления файла нужно знать inod удаленного файла. Все, в принципе, уже делали выше по тексту:

1. смотрим номер inode (первая цифра)

ls -li /home/user/file1

3. Указываем inode вместо имени файла

sudo debugfs -R 'stat <659471>' /dev/sda1

И видим что появился еще один параметр dtime который указывает время удаления файла.

И напоследок, полезная команда:

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

Favorite

Добавить в избранное

Главное меню » Debian » Получить дату последнего изменения файла в Linux

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Заключение

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

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Этичный хакинг и тестирование на проникновение, информационная безопасность

Всё началось с того, что я заинтересовался, как найти в системе файлы созданные или изменённые за определённый промежуток времени. Например, как узнать, какие файлы в папке /etc были изменены за последний день или за последнюю неделю?

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

  • Доступ
  • Модифицирован
  • Изменён
  • Создан

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

Именно этому и посвящена данная статья, в ней будет рассказано:

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

Все эти вопросы имеют практический смысл: от простого домашнего использования — поиск файла, для которого мы не помним имя, но для которого помним время создания; до серьёзного профессионального — появление новых файлов на сервере, либо недавние модификации важных файлов, могут свидетельствовать о взломе системы или неавторизованном доступе, могут помочь при расследовании подобных случаев для понимания событий произошедшего. Либо быть применены с противоположными мотивами — что и как нужно поменять в метках времени, чтобы снизить возможности криминалистического исследования.

Временные метки файла в файловой системе и в метаданных

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

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

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

Нельзя ни в коем случае забывать о метаданных если ваша цель отредактировать метки времени! Для доступа/редактирования к метаданным используются различные приложения и эти вопросы не входят в тему данной статьи. Данная статья посвящена меткам времени файлов и папо, которые хранит файловая система.

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

Сразу все временные метки файла можно посмотреть с помощью команды stat. Запуск очень простой:

Например, я хочу узнать информацию о файле prog.txt:


С временем создания всё понятно — это когда файл был создан. Между прочим, эту информацию программа stat стала показывать довольно недавно. До этого на вопрос «как узнать время создания файла?» знатоки отвечали, что ядро Linux это не поддерживает. В качестве рабочего решения нужно было посмотреть иноду интересующего файла, а затем другой командой посмотреть дату создания этой иноды — это и считалось временем создания файла.

Выше показан вывод для команды на файловой системе ext4. Для файловой системы ext2 дата создания файла по-прежнему недоступна:


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

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

Метки времени (timestamps):

Доступ (Access - last access) — время, когда файл был прочитан последний раз. Это время меняется при доступе таких системных вызовов как mknod(2), utimes(2) и read(2). Если это текстовый файл, то дата последнего доступа обновляется при каждом его открытии. Если это исполнимый файл, то дата доступа обновится при его запуске.

Но прежде чем придумывать практическое использование времени последнего доступа к файлу (например, чтобы проверить, какие команды запускалась за последний час), нужно учитывать очень важные нюансы. Выше показано, что поддержка определённых меток времени зависит от файловой системы. Ещё поведение меток времени зависит от того, с какими опциями была смонтирована файловая система. Например, при запуске скрипта мы ожидаем, что время доступа к этому файлу изменится на текущее. Это так — для выполнения скрипта его нужно прочитать и atime должна поменяться на время выполнения. Обычно это так и происходит. Но если запускаемый/читаемый файл находится в файловой системе, которая смонтирована с опциями noatime или relatime (или другими возможными опциями, которые могут повлиять на изменение atime — к пример «только чтение»), то поведение будет другим.

noatime

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

relatime

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

Итак — время последнего доступа к файлу может быть неточным! По сути, если при монтировании диска используется опция relatime, то получается, что оно показывает:

1) время последнего изменения или модификации файла

2) время сегодняшнего первого открытия файла

3) ИНОГДА оно действительно показывает время последнего доступа к файлу (если сегодня файл открывали только один раз), либо если этот доступ к файлу выполнен после его модификации или изменения статуса

Модифицирован (Modify - last modified) — время последнего изменения содержимого файла. То есть если это текстовый файл, то время модификации поменяется когда вы его откроете и удалите какое-то слово или что-то допишите. Меняется системными вызовами mknod(2), utimes(2) и write(2).

Изменён (Change - last changed) — Время последнего изменения метаданных файлов в файловой системе. То есть если в файле изображения вы измените EXIF метаданные — это будет модификация (поскольку по сути поменяется содержимое файла). Примером Изменения файла является смена разрешений доступа к нему (чтение, запись, выполнение), смена владельца, группы и т. д. Меняется с chmod(2), chown(2), link(2), mknod

Что такое время доступа, время модификации и время изменения директории в Linux

Посмотреть метки времени папки можно также с помощью команды stat:

Например, чтобы посмотреть информацию о текущей папке:

Для папок время последнего доступа обновляется при просмотре списка файлов внутри неё. Действуют такие же правила, как и для файлов — зависит от опций, с которыми смонтирована файловая система.

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

Какое время показывает команда ls -l

Если запустить команду ls с опцией -l, то она покажет последнее время модификации содержимого файла (или директории). Используя опцию --time можно вызвать показ других меток времени:

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

Если добавить опцию --sort=time, то будет также выполнена сортировка по выбранной метки времени.

Имеется несколько сокращённых опций:

Можно выбрать формат времени:

Значением TIME_STYLE могут быть: full-iso, long-iso, iso, locale или +ФОРМАТ.

Значение ФОРМАТа как в date(1). Если значение ФОРМАТа равно ФОРМАТ1<новая строка>ФОРМАТ2, то ФОРМАТ1 применяется не к последним файлам, а ФОРМАТ2 к новым. Если TIME_STYLE начинается с «posix-», то он применяется только для локалей отличных от POSIX. Также, используемый стиль по умолчанию задаёт переменная окружения TIME_STYLE.

Есть сокращение популярного варианта:

Поиск и сортировка файлов по времени модификации, доступа и изменения

Теперь мы переходим к потрясающей команде find. С её помощью мы будем выводить нужные файлы по дате изменения, а также искать файлы, которые были изменены или к которым был получен определённое время назад.

Кстати, настоятельно рекомендуется к изучению следующий материал по команде find:

С помощью команды find можно настроить очень гибкий поиск и вывод результатов.

Предположим, я хочу просмотреть файлы в папке /etc отсортированные по дате модификации:

Аналогично, но файлы отсортированы по дате доступа:

И снова аналогичный пример, но файлы отсортированы по времени изменению статуса:

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

Или только файлов с расширением .desktop:

Или любых файлов, отсортированных по дате доступа, но только первых 20:

Поиск файлов по времени изменения

Для этого мы опять будем использовать команду find. Для поиска по времени у неё есть следующие опции:

-amin n

Последний раз к файлу был совершён доступ n минут назад.

-atime n

К файлу был совершён доступ n*24 часов назад. Когда find определяет, как много 24-часовых периодов назад к файлу был совершён доступ, любая дробная часть игнорируется, поэтому для соответствия -atime +1 к файлу должен быть сделан доступ по крайней мере два дня назад.

-cmin n

Статус файла был изменён последний раз n минут назад.

-ctime n

Последний раз статус файла был изменён n*24 часов назад. Смотрите комментарий для -atime для понимания, как округление влияет на интерпретацию времени изменения статуса файла.

-mmin n

Данные файла последний раз были изменены n минут назад.

-mtime n

Данные файла были изменены последний раз n*24 часов назад. Смотрите комментарий для -atime для понимания, как округление влияет на интерпретацию времени модификации файла.

То есть если в опции слово min — то число n трактуется как минуты, а если в опции присутствует слово time, то n трактуется как сутки.

В качестве числа n можно указать точное значение, а также выражения «больше чем n» и «меньше чем n» следующими способами:

С find можно строить весьма сложные конструкции условий чтобы найти именно то, что вам нужно. Далее всего несколько примеров — но количество возможностей безгранично. С опцией -name можно указывать шаблон имени, можно комбинировать с поиском по любым другим свойствам файла: размер, права доступа и т.д.

Чтобы найти все файлы, содержимое которых было изменено ровно 50 дней назад:

Чтобы найти все файлы, к которым был получен доступ ровно 50 дней назад:

Чтобы найти все файлы, содержимое которырх было модифицировано более 50 дней назад и менее 100 дней назад:

Чтобы найти файлы, статус которых был изменён за последний час:

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

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

Чтобы найти все файлы в текущей папке с расширением .php, которые были изменены или созданы за последние 10 дней:

Чтобы найти все исполнимые файлы в текущей папке, которые были изменены или созданы за последние 10 дней:

Как отредактировать метки времени файла

С помощью команды touch можно изменить три метки времени файла или папки:

  • время доступа
  • время модификации
  • время изменения статуса

Если вы хотите изменить все эти значения на текущее время, то достаточно запустить команду вида:

Можно отдельно поменять только время доступа или только время модификации, соответствующие опции:

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

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

  • CC – Первые две цифры года (от слова century — века)
  • YY – Вторые две цифры года
  • MM – Месяц года (01-12)
  • DD – День месяца (01-31)
  • hh – Часы дня (00-23)
  • mm – Минуты часа (00-59)
  • ss – Секунды (00-59)

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

С помощью опции -t невозможно указать доли секунды и в выводе команды stat на их месте всегда будет 000000000

С помощью опции -d можно использовать разные более человечные способы указать время, например, «две недели назад». Это должно работать на английском, не знаю как с национальными языками. Опция -d (судя по описанию) понимает много разных вариантов синтаксиса, но для меня самым интересным свойством является возможность установить доли секунды, чтобы метки времени выглядели естественно, поскольку временные метки с девятью нулями на конце наводят мысль о том, что они спуфлены. Пример установки времени с указанием долей секунды:

То есть формат строки такой (из неё можно пропустить дефисы и двоеточия — опция -d всё равно её поймёт, но я их добавил для наглядности):

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

Хотя файловая система ext4 поддерживает такое свойство файлов как «время создания», в ядро Linux возможность чтения этого свойства была добавлена недавно. Что касается возможности изменения времени создания файла, то такой функции нет (и не факт, что файловые системы это вообще поддерживают).

Но, как обычно, можно что-то придумать.

Время назад

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

Изменение времени создания в других ОС или файловых системах

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

Действительно, в Windows можно изменить не только время модификации файла, но и время создания. Но проблема в том, что при переносе в Linux сохраняется только время модификации. В качестве времени создания записывается текущее (то есть время создания иноды в файловой системе). И если это понимать — что временем создания файла является время модификации иноды, то становится понятно, невозможно никак перенести файл (ни в архиве, ни как-то ещё) с сохранением временем создания.

Также становится понятно, что из Windows невозможно изменить время создания файла, который находится в совместной папке в файловой системе ext4 (хотя я на всякий случай попробовал).

То есть вариантов поменять дату создания файла в Linux всего два: 1) поменять время системы; 2) низкоуровневое редактирование файловой системы (например, шестнадцатеричным редактором или специальными инструментами (если они существуют)) — с соответствующими рисками нарушить целостность файловой системы.

То есть плохая новость в том, что изменить время создания файла очень трудно или практически невозможно. Но хорошая новость в том, что время создания файла на практике почти не используется из-за того, что это поддерживают не все файловые системы, и в самой Linux эта поддержка появилась недавно. Например, команда find ничего не знает о времени создания файла (хотя может искать по другим трём меткам времени: модификация, доступ, изменение статуса), команда ls также не умеет отображать время создания файла (только обычные три метки времени).

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

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

Кстати, если вам интересно, как поменять время создания файла в Windows, то это можно сделать с помощью утилиты NirCmd:

Я проверил команду nircmd.exe — сработала идеально в последней Windows 10.


Заключение

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

Я об этом уже говорил, но напомню ещё раз — редактируя метки времени файла, не нужно забывать о соответствующих метках времени в метаданных самого файла (а не файловой системы). Про просмотр и удаление метаданных вы найдёте больше информации по ссылкам:

Команда Date в Linux с примерами

Команда date отображает или устанавливает системную дату. Чаще всего он используется для печати даты и времени в разных форматах и ​​для расчета будущих и прошлых дат.


Использование Date

Синтаксис date команды следующий:

Чтобы отобразить текущее системное время и дату, используя форматирование по умолчанию, вызовите команду без каких-либо параметров и аргументов:

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


Параметры форматирования даты

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

Символ %Y будет заменен на год, %m месяц и %d день месяца:

Вот еще один пример:

Ниже приведен небольшой список некоторых наиболее распространенных символов форматирования:

  • %a - Сокращенное название дня недели (например, понедельник)
  • %A - Сокращенное полное название дня недели (например, понедельник)
  • %b - Сокращенное название месяца (например, январь).
  • %B - сокращенное длинное название месяца (например, январь)
  • %d - день месяца (например, 01)
  • %H - час (00..23)
  • %I - час (01.12.12)
  • %j - День года (001..366)
  • %m - Месяц (01.12.12)
  • %M - Минута (00..59)
  • %S - Второй (00 .. 60)
  • %u - день недели (1..7)
  • %Y - Полный год (например, 2019)

Чтобы получить полный список всех параметров форматирования, запустите date --help или man date в своем терминале.

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

-d Опция позволяет работать на дату конкретного. Вы можете указать дату в виде удобочитаемой строки даты, как показано ниже:

Использование пользовательского форматирования:

Строка даты принимает значения, такие как «завтра», «пятница», «последняя пятница», «следующая пятница», «следующий месяц», «следующая неделя» .. и т. Д.

Вы также можете использовать параметр строки даты, чтобы показать местное время для разных часовых поясов. Например, чтобы показать местное время 6:30 утра следующего понедельника на восточном побережье Австралии, введите:


Переопределить часовой пояс

Команда date возвращает дату в системном часовом поясе по умолчанию . Чтобы использовать другой часовой пояс, установите переменную среды TZ в желаемый часовой пояс.

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

Чтобы получить список всех доступных часовых поясов , вы можете либо перечислить файлы в /usr/share/zoneinfo каталоге, либо использовать timedatectl list-timezones команду.


Конвертер эпох

date Команда может быть использована в качестве преобразователя Epoch. Время, или метки времени Unix, - это количество секунд, прошедших с 1 января 1970 года в 00:00:00 UTC.

Чтобы напечатать количество секунд от эпохи до текущего дня, вызовите date с %s контролем формата:

Чтобы преобразовать секунды с начала эпохи в дату, установите секунды в виде строки даты с префиксом @ :


Использование date с другими командами

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

Команда ниже создаст файл резервной копии Mysql в следующем формате database_name-20190601.sql

Вы также можете использовать date команду в своих сценариях оболочки. В приведенном ниже примере мы присваиваем выход date к date_now переменной:


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

Команда date с -r параметром показывает время последнего изменения файла. Например:

Если вы хотите изменить временную метку файла, используйте touch команду .


Установите системное время и дату

Установка системного времени и даты вручную с помощью этой date команды не рекомендуется, поскольку в большинстве дистрибутивов Linux системные часы синхронизируются с ntp помощью systemd-timesyncd служб или .

Однако, если вы хотите установить системные часы вручную, вы можете использовать эту --set= опцию. Например, если вы хотите установить дату и время 17:30, 01 июня 2019 г., введите:

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