Найти тему
Эникей на передержке

touch - изменение временных меток файлов | Linux 🐧

Оглавление

Одно из самых частых использований этой команды - создание пустых файлов, однако на самом деле назначение утилиты иное.

touch входит в состав базовых утилит GNU, присутствующих в любой системе GNU/Linux

Описание

Основное назначение команды - изменение времени модификации, изменения или последнего обращения к файлу. Общий синтаксис выглядит следующим образом:

touch [параметры] файл [файл2 файл3]

*значения в квадратных скобках являются необязательными

Что такое временные метки файла?

Современные файловые системы могут хранить полезную информацию о файлах. Создадим пустой файл и выведем о нём информацию с помощью команды stat:

Информация о файле /tmp/myfile
Информация о файле /tmp/myfile

Четыре последние строки содержат:

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

Более подробно о временных метках можете прочитать здесь:

Изменение временных меток

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

touch myfile

Если файл не существует, он будет создан. В результате выполнения команды в поля atime, mtime и ctime будет записано текущее время системы:

Обновлённые временные метки выделены жёлтым
Обновлённые временные метки выделены жёлтым
Команда touch не может изменить временную метку создания файла.

Не создавать файл

Чтобы отключить создание файла в случае его отсутствия, достаточно указать параметр '-c' или его длинную версию '--no-create':

Файл не был создан
Файл не был создан
Также этот параметр позволяет отключить вывод предупреждения о несуществующем файле.

Временные метки из другого файла

У вас есть эталонный файл, с которого необходимо скопировать временные метки? Используйте параметр '-r имя_файла':

Как и в других случаях использования команды, изменяются только записи atime и mtime
Как и в других случаях использования команды, изменяются только записи atime и mtime

Применить изменения к симлинкам

По умолчанию, если вы примените touch к символической ссылке, команда изменит метки файла и не тронет сам симлинк. Чтобы применить изменения к символической ссылке непосредственно, укажите параметр '-h', он же '--no-dereference':

Изменение временных меток произошло только у симлинка
Изменение временных меток произошло только у симлинка
Изменение временных меток символических ссылок должно поддерживаться файловой системой.

Access timestamp

Если требуется поменять только метку времени последнего доступа к файлу, укажите параметр '-a':

Обратите внимание, что у нас изменяются атрибуты файлов, поэтому вместе с atime обновляется временная метка  ctime
Обратите внимание, что у нас изменяются атрибуты файлов, поэтому вместе с atime обновляется временная метка ctime
Для изменения atime также можно использовать параметры ‘--time=atime’, ‘--time=access’ или ‘--time=use’

Modification timestamp

Аналогично можно изменить метку mtime. Для этого используйте один из следующих параметров: ‘-m’, ‘--time=mtime’ или ‘--time=modify’:

Аналогично с изменением параметра mtime меняется и метка ctime
Аналогично с изменением параметра mtime меняется и метка ctime

Произвольная дата

Если вместо текущей даты вам необходимо подставить конкретное значение, используйте '-d' или '--date=значение':

Вместо конкретной даты можно указать "yesterday" или "last/next month". В метку ctime при этом записывается текущее время
Вместо конкретной даты можно указать "yesterday" или "last/next month". В метку ctime при этом записывается текущее время
Кроме даты вы можете указать ещё и время, в этом случае использовать параметр -t не понадобится

Произвольное время

Для изменения времени используйте параметр '-t'. Аналогично предыдущему параметру, здесь можно указать дату. Общий формат записи следующий:

[[ГГ]ГГ]ММДДччмм[.сс]

*значения в квадратных скобках являются необязательными

Установка значения даты и времени
Установка значения даты и времени

Заключение

Краткий вывод: установить произвольную дату или время можно только для меток atime и mtime. Метка ctime всегда устанавливается в соответствии с текущем временем системы, метка birthtime не может быть изменена.

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

Пожалуйста, оцените мой труд лайком и подпиской, это позволит вам чаще видеть в ленте подобный контент. Всего доброго!)

---

Подробный обзор других команд Linux:

Linux CLI | Эникей на передержке | Дзен

Материальная поддержка автора:

-11