Как проверить время модификации и доступа к файлу в Linux

LinuxBeginner
Практиковаться сейчас

Введение

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

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

Понимание меток времени файлов в Linux

В Linux каждый файл имеет три важные метки времени, которые автоматически поддерживаются системой:

Типы меток времени файлов

  1. Время модификации (mtime): Записывает, когда содержимое файла было последний раз изменено.
  2. Время доступа (atime): Записывает, когда файл был последний раз прочитан или доступен.
  3. Время изменения (ctime): Записывает, когда метаданные файла (разрешения, владелец) были последний раз изменены.

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

Сначала откройте терминал и перейдите в каталог проекта:

cd ~/project

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

touch testfile.txt

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

Проверим основную информацию о файле с помощью команды ls с опцией -l (длинный формат вывода):

ls -l testfile.txt

Вы должны увидеть вывод, похожий на следующий:

-rw-r--r-- 1 labex labex 0 May 15 14:30 testfile.txt

В этом выводе:

  • Первый столбец показывает разрешения на файл.
  • Третий и четвертый столбцы показывают владельца и группу.
  • Пятый столбец показывает размер файла (0 байт).
  • Дата и время ("May 15 14:30" в этом примере) показывают время модификации.
  • Последний столбец - это имя файла.

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

Использование команды stat для просмотра всех меток времени

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

Давайте используем команду stat для просмотра всех меток времени нашего тестового файла:

stat testfile.txt

Вы должны увидеть вывод, похожий на следующий:

  File: testfile.txt
  Size: 0           Blocks: 0          IO Block: 4096   regular empty file
Device: 801h/2049d  Inode: 2101099     Links: 1
Access: (0644/-rw-r--r--)  Uid: (1000/labex)   Gid: (1000/labex)
Access: 2023-05-15 14:30:00.000000000 +0000
Modify: 2023-05-15 14:30:00.000000000 +0000
Change: 2023-05-15 14:30:00.000000000 +0000
 Birth: -

В этом выводе:

  • Access: Показывает, когда файл был последний раз доступен (atime).
  • Modify: Показывает, когда содержимое файла было последний раз изменено (mtime).
  • Change: Показывает, когда метаданные файла были последний раз изменены (ctime).
  • Birth: Показывает время создания файла (не поддерживается на всех файловых системах).

Обратите внимание, что все три метки времени в настоящее время одинаковы, потому что мы только что создали файл. Давайте изменим файл, чтобы увидеть, как эти метки времени изменятся.

Добавим некоторое содержимое в файл с помощью команды echo:

echo "This is a test file" > testfile.txt

Теперь давайте проверим метки времени снова:

stat testfile.txt

Вы должны увидеть, что время модификации (Modify) и время изменения (Change) были обновлены, в то время как время доступа может остаться прежним в зависимости от конфигурации вашей системы.

  File: testfile.txt
  Size: 19          Blocks: 8          IO Block: 4096   regular file
Device: 801h/2049d  Inode: 2101099     Links: 1
Access: (0644/-rw-r--r--)  Uid: (1000/labex)   Gid: (1000/labex)
Access: 2023-05-15 14:30:00.000000000 +0000
Modify: 2023-05-15 14:35:12.000000000 +0000
Change: 2023-05-15 14:35:12.000000000 +0000
 Birth: -

Проверка времени модификации (mtime)

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

Использование команды ls для проверки времени модификации

Стандартная команда ls -l по умолчанию показывает время модификации:

ls -l testfile.txt

Вывод:

-rw-r--r-- 1 labex labex 19 May 15 14:35 testfile.txt

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

Настройка формата времени

Для получения более подробной информации о метке времени используйте опцию --time-style с командой ls:

ls -l --time-style=full-iso testfile.txt

Вывод:

-rw-r--r-- 1 labex labex 19 2023-05-15 14:35:12.000000000 +0000 testfile.txt

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

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

ls -l --time-style=long-iso testfile.txt

Вывод:

-rw-r--r-- 1 labex labex 19 2023-05-15 14:35 testfile.txt

Использование команды date для отображения времени модификации

Другой способ проверить время модификации - использовать команду date с опцией -r:

date -r testfile.txt

Вывод:

Mon May 15 14:35:12 UTC 2023

Эта команда отображает время модификации в удобочитаемом формате.

Проверка времени доступа (atime)

Время доступа (atime) обновляется всякий раз, когда файл считывается или к нему обращаются. Однако многие современные системы Linux используют параметры монтирования, такие как relatime или noatime, чтобы уменьшить частоту обновления atime и повысить производительность.

Использование команды ls для проверки времени доступа

Для просмотра времени доступа вместо времени модификации используйте опцию -u с командой ls -l:

ls -lu testfile.txt

Вывод:

-rw-r--r-- 1 labex labex 19 May 15 14:40 testfile.txt

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

Давайте обратимся к файлу, чтобы обновить его время доступа:

cat testfile.txt

Вывод:

This is a test file

Теперь проверим время доступа снова:

ls -lu testfile.txt

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

Сравнение всех меток времени

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

stat testfile.txt

Вывод:

  File: testfile.txt
  Size: 19          Blocks: 8          IO Block: 4096   regular file
Device: 801h/2049d  Inode: 2101099     Links: 1
Access: (0644/-rw-r--r--)  Uid: (1000/labex)   Gid: (1000/labex)
Access: 2023-05-15 14:41:05.000000000 +0000
Modify: 2023-05-15 14:35:12.000000000 +0000
Change: 2023-05-15 14:35:12.000000000 +0000
 Birth: -

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

Изменение прав доступа к файлу для обновления времени изменения

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

chmod 640 testfile.txt

Проверим все метки времени снова:

stat testfile.txt

Вывод:

  File: testfile.txt
  Size: 19          Blocks: 8          IO Block: 4096   regular file
Device: 801h/2049d  Inode: 2101099     Links: 1
Access: (0640/-rw-r-----)  Uid: (1000/labex)   Gid: (1000/labex)
Access: 2023-05-15 14:41:05.000000000 +0000
Modify: 2023-05-15 14:35:12.000000000 +0000
Change: 2023-05-15 14:42:30.000000000 +0000
 Birth: -

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

Управление метками времени файлов с помощью команды touch

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

Обновление всех меток времени

Для обновления всех меток времени (доступа, модификации и изменения) до текущего времени:

touch testfile.txt

Проверьте метки времени:

stat testfile.txt

Вывод:

  File: testfile.txt
  Size: 19          Blocks: 8          IO Block: 4096   regular file
Device: 801h/2049d  Inode: 2101099     Links: 1
Access: (0640/-rw-r-----)  Uid: (1000/labex)   Gid: (1000/labex)
Access: 2023-05-15 14:45:10.000000000 +0000
Modify: 2023-05-15 14:45:10.000000000 +0000
Change: 2023-05-15 14:45:10.000000000 +0000
 Birth: -

Обновление только времени доступа

Для обновления только времени доступа:

touch -a testfile.txt

Проверьте метки времени:

stat testfile.txt

Вывод:

  File: testfile.txt
  Size: 19          Blocks: 8          IO Block: 4096   regular file
Device: 801h/2049d  Inode: 2101099     Links: 1
Access: (0640/-rw-r-----)  Uid: (1000/labex)   Gid: (1000/labex)
Access: 2023-05-15 14:46:15.000000000 +0000
Modify: 2023-05-15 14:45:10.000000000 +0000
Change: 2023-05-15 14:46:15.000000000 +0000
 Birth: -

Обратите внимание, что время изменения (ctime) также обновляется, так как метаданные файла изменились.

Обновление только времени модификации

Для обновления только времени модификации:

touch -m testfile.txt

Проверьте метки времени:

stat testfile.txt

Вывод:

  File: testfile.txt
  Size: 19          Blocks: 8          IO Block: 4096   regular file
Device: 801h/2049d  Inode: 2101099     Links: 1
Access: (0640/-rw-r-----)  Uid: (1000/labex)   Gid: (1000/labex)
Access: 2023-05-15 14:46:15.000000000 +0000
Modify: 2023-05-15 14:47:20.000000000 +0000
Change: 2023-05-15 14:47:20.000000000 +0000
 Birth: -

Снова время изменения также обновляется.

Установка конкретных меток времени

Вы можете установить конкретную метку времени, используя опцию -d с командой touch:

touch -d "2023-01-01 12:00:00" testfile.txt

Проверьте метки времени:

stat testfile.txt

Вывод:

  File: testfile.txt
  Size: 19          Blocks: 8          IO Block: 4096   regular file
Device: 801h/2049d  Inode: 2101099     Links: 1
Access: (0640/-rw-r-----)  Uid: (1000/labex)   Gid: (1000/labex)
Access: 2023-01-01 12:00:00.000000000 +0000
Modify: 2023-01-01 12:00:00.000000000 +0000
Change: 2023-05-15 14:48:30.000000000 +0000
 Birth: -

Это устанавливает как время доступа, так и время модификации на 1 января 2023 года, 12:00 дня. Время изменения все еще обновляется до текущего времени.

Создание нового файла с метками времени существующего файла

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

## Create a new file
touch newfile.txt

## Set its timestamps based on testfile.txt
touch -r testfile.txt newfile.txt

Проверьте метки времени нового файла:

stat newfile.txt

Вывод:

  File: newfile.txt
  Size: 0           Blocks: 0          IO Block: 4096   regular empty file
Device: 801h/2049d  Inode: 2101100     Links: 1
Access: (0644/-rw-r--r--)  Uid: (1000/labex)   Gid: (1000/labex)
Access: 2023-01-01 12:00:00.000000000 +0000
Modify: 2023-01-01 12:00:00.000000000 +0000
Change: 2023-05-15 14:49:45.000000000 +0000
 Birth: -

Время доступа и модификации newfile.txt теперь совпадают с временем testfile.txt.

Резюме

В этом практическом занятии вы научились:

  • Понимать три типа меток времени файлов в Linux: время модификации (mtime), время доступа (atime) и время изменения (ctime)
  • Использовать команду ls с различными опциями для отображения меток времени файлов
  • Использовать команду stat для просмотра подробной информации о метках времени
  • Читать содержимое файлов для обновления времени доступа
  • Изменять права доступа к файлам для обновления времени изменения
  • Использовать команду touch для ручного управления метками времени файлов
  • Применять конкретные метки времени к файлам
  • Копировать метки времени из одного файла в другой

Эти навыки являются важными для эффективного управления и мониторинга файлов в Linux. Метки времени файлов помогают отслеживать изменения, контролировать шаблоны доступа и обеспечивать правильное обслуживание файлов. Независимо от того, являетесь ли вы системным администратором, отслеживающим несанкционированные изменения, разработчиком, отлаживающим проблемы, связанные с файлами, или обычным пользователем, организовывающим свои файлы, понимание меток времени файлов - ценный навык в среде Linux.