Введение
В операционной системе Linux каждый файл имеет связанные метки времени, которые отслеживают, когда файл был изменен, доступен или изменены его атрибуты. Понимание этих меток времени является важным для системных администраторов, разработчиков и обычных пользователей, которые должны отслеживать активность файлов.
В этом руководстве вы узнаете практические методы проверки меток времени файлов в Linux. Вы научитесь просматривать время модификации и доступа с помощью различных команд, что поможет вам лучше отслеживать изменения и контролировать модели использования файлов в вашей среде Linux.
Понимание меток времени файлов в Linux
В Linux каждый файл имеет три важные метки времени, которые автоматически поддерживаются системой:
Типы меток времени файлов
- Время модификации (mtime): Записывает, когда содержимое файла было последний раз изменено.
- Время доступа (atime): Записывает, когда файл был последний раз прочитан или доступен.
- Время изменения (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.



