Утилиты CLI, атрибуция файлов: команда touch для атрибуции
Кроме атрибутов принадлежности и доступа, файлам свойственны еще и атрибуты времени -- времени доступа (atime
), времени изменения метаданных (ctime
) и времени изменения данных (mtime
) файла. Они устанавливаются автоматически, в силу самого факта открытия файла (atime
), смены любых атрибутов, например, доступа (ctime
) или редактирования содержимого файла (mtime
).
Однако бывают ситуации, когда автоматически установленные временные атрибуты требуется изменить. Случай продления жизни trial-версии программы не рассматриваем -- настоящий POSIX'ивист до такого не опускается, не так ли? А вот сбой системных часов, в результате которого временные атрибуты создаваемых и модифицируемых файлов перестанут соответствовать действительности -- штука вполне вероятная.
Казалось бы, чего страшного? Ан нет, фактор времени играет в Unix-системах очень существенную роль. Во-первых, команда make
(а под ее управлением компилируются программы из исходников) проверяет временные атрибуты файлов (в первую очередь -- атрибут mtime
) и при их несоответствии может работать с ошибками. Ну и более обычная ситуация -- на основе временных меток файлов можно эффективно осуществлять, скажем, резервное копирование (см. параграф о той же утилите find
). И потому желательно, чтобы они отражали реальное время создания и модификации файла.
Так вот, для изменения временных атрибутов файлов и предназначена в первую очередь команда touch
, которую ранее мы использовали просто для создания пустого файла. Данная же с именем существующего файла в качестве аргумента -
$ touch exist_file
она присвоит всем его временным атрибутам (atime
, ctime
, mtime
) значения текущего момента времени. Изменение временных атрибутов можно варьировать с помощью опций. Так, если указать только одну из опций -a
, -c
, или -m
, то текущее значение времени будет присвоено только атрибуту atime
, ctime
или mtime
, соответственно. Если при этом использовать ещё и опцию -d
[значение], то любому из указанных атрибутов (или им всем) можно присвоить любую временную метку, в том числе и из далекого будущего. А посредством опции -r filename
файл-аргумент получит временные атрибуты, идентичные таковым референсного файла filename
.
Содержание . .