Временные метки файлов Linux, объясненные примерами
В этом руководстве объясняются типы временных меток файлов Linux и то, как просматривать и изменять временные метки файлов с помощью команды touch
в Linux с примерами.
Краткое введение в временные метки файлов Linux
В Linux и Unix в целом каждый файл имеет три типа временных меток, а именно: atime (время доступа), mtime (время изменения) и ctime ( Время смены). Как следует из названия, временные метки используются, чтобы узнать, когда к файлу обращались, модифицировали и меняли.
Временная метка времени доступа (или, короче, времени) — это время последнего чтения файла. Например, вы могли открыть файл. Возможно, к файлу имела доступ какая-то другая программа или удаленный компьютер. Возможно, вы прочитали содержимое файла с помощью команды (например, команды cat
) или программы (например, gedit, vim и т. д.). Файл не редактируется и не модифицируется. Доступ к нему имели только вы или какой-либо другой пользователь из удаленной системы.
Временная метка времени модификации (или mtime) указывает на последний раз, когда файл (или каталог) был изменен. Другими словами, mtime указывает время изменения содержимого файла. Например, вы могли что-то добавить в файл, удалить что-то из файла или изменить содержимое файла.
Временная метка времени изменения (или ctime) показывает, когда в последний раз изменялось содержимое файла или метаданные файла (т. е. атрибуты файла, такие как владение файлом, права доступа к файлу или группа).
В итоге,
- atime — указывает время последнего доступа к файлу для чтения содержимого.
- mtime — указывает время последнего изменения содержимого файла.
- ctime — указывает время последнего изменения содержимого файла или метаданных файла (владельца, группы или разрешений).
Временные метки могут быть полезны в различных ситуациях. Вот несколько вариантов использования меток времени:
- Находите и сортируйте файлы по времени доступа или изменения.
- Найдите и удалите файлы старше X дней. Полезно для очистки старых файлов на жестком диске.
- Проверьте, когда был изменен файл конфигурации.
- Проверьте, осуществлялся ли доступ к файлу.
- Проверьте, был ли обновлен каталог.
- Найдите файлы старше или новее X дней.
Просмотрите временные метки файлов Linux с помощью команд stat
и ls
.
Мы можем просмотреть временные метки файлов в Linux с помощью команды stat
. Согласно справочным страницам, команда stat
отображает состояние файла или файловой системы в Linux. Команда stat является частью GNU Coreutils
, поэтому не будем ее устанавливать.
Теперь давайте проверим временные метки текстового файла с именем ostechnix.txt
с помощью команды stat
:
stat ostechnix.txt
Пример вывода:
File: ostechnix.txt
Size: 21 Blocks: 8 IO Block: 4096 regular file
Device: 801h/2049d Inode: 4351679 Links: 1
Access: (0664/-rw-rw-r--) Uid: ( 1000/ sk) Gid: ( 1000/ sk)
Access: 2020-11-11 17:31:01.484504149 +0530
Modify: 2020-11-11 17:31:01.484504149 +0530
Change: 2020-11-11 17:31:01.484504149 +0530
Birth: -
Просмотр временных меток файлов Linux с помощью команды stat
Последние три строки в приведенном выше выводе показывают время доступа, время модификации и временные метки времени изменения соответственно. Когда мы просто создаем новый файл, все временные метки одинаковы.
Вы заметили строку «Рождение:
» в конце вывода? Он указывает метку времени создания файла. Стандарт POSIX не определяет временную метку создания файла. Некоторые файловые системы (например, ext4, JFS, Btrfs) хранят это значение, но в настоящее время не существует API ядра Linux для доступа к нему. Итак, в строке «Рождение:» вместо отметки времени мы видим дефис «-».
Вы также можете получить временные метки atime, mtime и ctime по отдельности, используя команду ls
.
Чтобы просмотреть временную метку времени изменения (mtime), используйте команду ls -l
:
ls -l ostechnix.txt
-rw-rw-r-- 1 sk sk 21 Nov 11 17:31 ostechnix.txt
Чтобы просмотреть временную метку времени изменения (ctime), выполните команду ls -lc
:
ls -lc ostechnix.txt
-rw-rw-r-- 1 sk sk 21 Nov 11 17:31 ostechnix.txt
Здесь флаг c
используется для отображения времени последнего изменения метаданных или атрибутов файла.
Просмотрите временную метку времени доступа (atime) с помощью команды ls -lu
:
ls -lu ostechnix.txt
-rw-rw-r-- 1 sk sk 21 Nov 11 17:31 ostechnix.txt
Здесь флаг u
отображает время последнего доступа к файлу.
Просмотр временных меток файлов Linux с помощью команды ls
Измените временные метки файлов Linux с помощью команды touch
Команда touch
используется для изменения временных меток файлов, а также для создания новых пустых файлов в Linux. Как и команда stat
, команда touch
также является частью GNU coreutils
, поэтому вам также не нужно ее устанавливать.
Прежде чем менять временные метки, давайте для справки получим текущие временные метки файла с именем ostechnix.txt
:
stat ostechnix.txt
File: ostechnix.txt
Size: 21 Blocks: 8 IO Block: 4096 regular file
Device: 801h/2049d Inode: 4351679 Links: 1
Access: (0664/-rw-rw-r--) Uid: ( 1000/ sk) Gid: ( 1000/ sk)
Access: 2020-11-11 17:31:01.484504149 +0530
Modify: 2020-11-11 17:31:01.484504149 +0530
Change: 2020-11-11 17:31:01.484504149 +0530
Birth: -
Как видно из приведенного выше вывода, был получен доступ к файлу ostechnix.txt
. изменены и изменены в одну и ту же дату и время, то есть 11 ноября 2020 г., 17:31:01.
Давайте изменим временные метки этого файла с помощью команды touch
, как показано ниже:
touch ostechnix.txt
Приведенная выше команда изменит все временные метки (т. е. atime, mtime и ctime) на текущее время вашего компьютера.
Теперь давайте посмотрим на временные метки файла с помощью команды stat
:
stat ostechnix.txt
File: ostechnix.txt
Size: 21 Blocks: 8 IO Block: 4096 regular file
Device: 801h/2049d Inode: 4351679 Links: 1
Access: (0664/-rw-rw-r--) Uid: ( 1000/ sk) Gid: ( 1000/ sk)
Access: 2020-11-11 17:39:59.430610787 +0530
Modify: 2020-11-11 17:39:59.430610787 +0530
Change: 2020-11-11 17:39:59.430610787 +0530
Birth: -
Измените временные метки файлов Linux с помощью сенсорной команды
Видеть? Все временные метки были изменены на текущее время моей системы, т.е. 2020-11-10 17:51:02
.
Также возможно изменить отдельные временные метки отдельно. Например, вы можете изменить только метку времени доступа (atime) с помощью флага -a
:
touch -a ostechnix.txt
Приведенная выше команда установит временную метку времени доступа на текущее время.
Теперь проверьте временную метку файла ostechnix.txt
с помощью команды stat
:
stat ostechnix.txt
File: ostechnix.txt
Size: 21 Blocks: 8 IO Block: 4096 regular file
Device: 801h/2049d Inode: 4351679 Links: 1
Access: (0664/-rw-rw-r--) Uid: ( 1000/ sk) Gid: ( 1000/ sk)
Access: 2020-11-11 17:43:46.555428706 +0530
Modify: 2020-11-11 17:39:59.430610787 +0530
Change: 2020-11-11 17:43:46.555428706 +0530
Birth: -
Измените только метку времени доступа с помощью сенсорной команды.
Как вы видите в приведенном выше выводе, время доступа изменяется на текущее время. Время изменения также обновляется.
Чтобы изменить только временную метку времени модификации (mtime), используйте флаг -m
:
touch -m ostechnix.txt
Проверьте, изменилось ли время с помощью команды stat
:
stat ostechnix.txt
File: ostechnix.txt
Size: 21 Blocks: 8 IO Block: 4096 regular file
Device: 801h/2049d Inode: 4351679 Links: 1
Access: (0664/-rw-rw-r--) Uid: ( 1000/ sk) Gid: ( 1000/ sk)
Access: 2020-11-11 17:43:46.555428706 +0530
Modify: 2020-11-11 17:47:17.577722187 +0530
Change: 2020-11-11 17:47:17.577722187 +0530
Birth: -
Измените только временную метку модификации с помощью сенсорной команды.
Теперь временные метки mtime и ctime изменились, а время осталось прежним.
Как вы могли заметить, когда мы меняем время доступа или время изменения, ctime также обновляется.
Если вы хотите одновременно изменить временные метки atime и mtime, используйте опцию -d
.
touch -d "2020-11-11 17:50:01" ostechnix.txt
Проверьте, были ли изменены временные метки atime и mtime, с помощью команды stat
:
stat ostechnix.txt
File: ostechnix.txt
Size: 21 Blocks: 8 IO Block: 4096 regular file
Device: 801h/2049d Inode: 4351679 Links: 1
Access: (0664/-rw-rw-r--) Uid: ( 1000/ sk) Gid: ( 1000/ sk)
Access: 2020-11-11 17:50:01.000000000 +0530
Modify: 2020-11-11 17:50:01.000000000 +0530
Change: 2020-11-11 17:51:17.024213698 +0530
Birth: -
Измените временные метки atime и mtime одновременно с помощью сенсорной команды.
Теперь мы установили время доступа и время изменения на определенное время, то есть 2020-11-11 17:50:01
. И временная метка ctime также была обновлена до текущего времени.
Также можно использовать конкретную временную метку вместо текущего времени с флагом -t
:
touch -t 2011111754 ostechnix.txt
Эта команда установит временные метки atime и mtime на 2020-11-11 17:54:00
. Проверьте это с помощью команды stat
, как показано ниже:
stat ostechnix.txt
File: ostechnix.txt
Size: 21 Blocks: 8 IO Block: 4096 regular file
Device: 801h/2049d Inode: 4351679 Links: 1
Access: (0664/-rw-rw-r--) Uid: ( 1000/ sk) Gid: ( 1000/ sk)
Access: 2020-11-11 17:54:00.000000000 +0530
Modify: 2020-11-11 17:54:00.000000000 +0530
Change: 2020-11-11 17:56:20.844405239 +0530
Birth: -
Как уже говорилось, ctime обновляется при изменении atime и mtime. Если вы хотите изменить только временную метку ctime, в команде touch
нет специального флага. Поэтому вам необходимо вручную изменить ctime, изменив метаданные файла или атрибуты файла. Например, я собираюсь назначить разрешение на выполнение файлу ostchnix.txt
с помощью команды chmod
:
chmod +x ostechnix.txt
Проверьте, получает ли ctime обновление с помощью команды stat
:
stat ostechnix.txt
File: ostechnix.txt
Size: 21 Blocks: 8 IO Block: 4096 regular file
Device: 801h/2049d Inode: 4351679 Links: 1
Access: (0775/-rwxrwxr-x) Uid: ( 1000/ sk) Gid: ( 1000/ sk)
Access: 2020-11-11 17:54:00.000000000 +0530
Modify: 2020-11-11 17:54:00.000000000 +0530
Change: 2020-11-11 17:57:21.022720776 +0530
Birth: -
Измените только временную метку изменения с помощью сенсорной команды
Видеть? Временная метка ctime изменилась, а время atime и mtime — нет. Потому что к файлу не обращаются и не изменяют. Я изменил только разрешение файла.
Изменение временных меток файлов путем просмотра, доступа или изменения файлов.
Как уже говорилось, временная метка atime изменяется, когда мы получаем доступ к файлу для чтения. Попробуйте получить доступ к файлу для чтения с помощью команды cat
и посмотрите, что произойдет.
cat ostechnix.txt
This is a text file.
Теперь проверьте, обновлена ли метка времени доступа:
stat ostechnix.txt
File: ostechnix.txt
Size: 21 Blocks: 8 IO Block: 4096 regular file
Device: 801h/2049d Inode: 4351679 Links: 1
Access: (0775/-rwxrwxr-x) Uid: ( 1000/ sk) Gid: ( 1000/ sk)
Access: 2020-11-11 18:00:16.005323521 +0530
Modify: 2020-11-11 17:54:00.000000000 +0530
Change: 2020-11-11 17:57:21.022720776 +0530
Birth: -
Видеть? Значение atime теперь изменилось.
Mtime обновляется, когда мы добавляем или удаляем данные из файла.
Позвольте мне добавить строку в файл ostechnix.txt
:
echo "modify this file" >> ostechnix.txt
Проверьте временные метки файлов:
stat ostechnix.txt
File: ostechnix.txt
Size: 38 Blocks: 8 IO Block: 4096 regular file
Device: 801h/2049d Inode: 4351679 Links: 1
Access: (0775/-rwxrwxr-x) Uid: ( 1000/ sk) Gid: ( 1000/ sk)
Access: 2020-11-11 18:00:16.005323521 +0530
Modify: 2020-11-11 18:01:49.072771458 +0530
Change: 2020-11-11 18:01:49.072771458 +0530
Birth: -
Поскольку содержимое файла изменилось, его mtime и ctime изменились.
Изменить временные метки символических ссылок
По умолчанию, если вы используете команду touch
для символической ссылки (или символической ссылки), она также изменит временные метки соответствующего файла.
Если вы хотите изменить только временную метку символической ссылки, используйте опцию -h
, (--no-dereference
):
touch -h <path-to-symlink>
[Бонусный совет] Скопируйте временные метки из другого файла
Команда touch имеет опцию -r, (--reference=)
, которая позволяет копировать временные метки из одного файла в другой.
Следующая команда скопирует временные метки файла1 в файл2.
touch -r file1.txt file2.txt
Более подробную информацию можно найти на страницах руководства команд stat
и touch
:
man stat
man touch
Заключение
В этом руководстве мы обсудили три типа временных меток файлов Linux, а именно atime, mtime и ctime, а также как просмотреть временные метки файлов с помощью команд stat
и ls
и, наконец, как изменить временные метки этих файлов с помощью команды touch
в Linux. Надеюсь это поможет.