Примеры использования утилиты touch в Linux

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

Онлайн-курс по устройству компьютерных сетей

На углубленном курсе "Архитектура современных компьютерных сетей" вы с нуля научитесь работать с Wireshark и «под микроскопом» изучите работу сетевых протоколов. На протяжении курса надо будет выполнить более пятидесяти лабораторных работ в Wireshark.

Когда-то давно я увидел, что с её помощью можно создать пустой файл. Запомнил это и сам постоянно её использую, хотя есть способы проще. А изначально touch была создана для обновления информации о времени изменения и доступа к файлу. Об этом прямо написано в man этой утилиты: Update the access and modification times of each FILE to the current time.

Создание файлов

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

# touch file01.txt
# touch file01.txt file02.txt file03.txt
# touch file0{1,2,3}.txt

А с помощью дополнительных ключей можно обновить информацию о времени последнего доступа к файлу:

# ls -l file01.txt --time=atime
# touch -a file01.txt
# ls -l file01.txt --time=atime

Посмотрели старое время доступа, обновили его до актуального и посмотрели ещё раз. Время будет обновлено.

То же самое для времени изменения файла:

# ls -l file01.txt
# touch -m file01.txt
# ls -l file01.txt

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

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

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

Также с помощью touch можно явно указать дату изменения файла. Можно его существенно состарить:

# touch -t 201903211655 file01.txt
# ls -l file01.txt
-rw-r--r-- 1 root root 0 Mar 21 2019 file01.txt

изменение даты создания файла с помощью touch

Установили дату изменения файла - 21 марта 2019 года 16:55. Формат даты в команде - YYMMDDhhmm. Данный приём активно использую всякие зловреды на сайтах, чтобы затеряться среди старых файлов. Обычно когда разбираются во взломе, первым делом ищут все недавно изменённые файлы. А после такого изменения файл может разом состариться на пару лет.

Но если внимательно посмотреть на изменяемый файл с помощью stat, то можно увидеть время его создания и изменения атрибутов (change и birth):

# stat file01.txt
 File: file01.txt
 Size: 0      Blocks: 0     IO Block: 4096  regular empty file
Device: 802h/2050d Inode: 790197   Links: 1
Access: (0644/-rw-r--r--) Uid: (  0/  root)  Gid: (  0/  root)
Access: 2019-03-21 16:55:00.000000000 +0300
Modify: 2019-03-21 16:55:00.000000000 +0300
Change: 2023-01-19 01:09:17.084405177 +0300
 Birth: 2023-01-19 00:50:59.789606107 +0300

Наверное их тоже можно поменять, но я не разбирался с этим. Если кто-то знает, как это сделать, подскажите.

Автор Zerox

Владимир, системный администратор, автор сайта. Люблю настраивать сервера, изучать что-то новое, делиться знаниями, писать интересные и полезные статьи. Открыт к диалогу и сотрудничеству. Если вам интересно узнать обо мне побольше, то можете послушать интервью. Запись на моем канале - https://t.me/srv_admin/425 или на сайте в контактах.

2 комментария

  1. Иллинори

    Изменить ctime стандартными методами вроде как нельзя(кроме изменения времени на ПК, конечно).
    Но если очень хочется, то при отмонтированном диске можно внести изменения прямым доступом к файловой системе через debugfs - акутально для ext2/etx3/etx4.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Нажимая кнопку "Отправить комментарий" Я даю согласие на обработку персональных данных.
Используешь Telegram? Подпишись на канал автора →
This is default text for notification bar