Гид по технологиям

Команда touch в Linux — создание файлов и управление метками времени

8 min read Linux Обновлено 28 Dec 2025
touch в Linux — создание файлов и метки времени
touch в Linux — создание файлов и метки времени

Quick Links

  • What Is the touch Command?

  • Creating Empty Files

  • Set the Access Time to the Current Time

  • Set the Modification Time to the Current Time

  • Setting Access and Modification Times to Specific Times

  • Set Only One Time to a Specific Value

  • Set the Access and Modification Times to Those of Another File

  • Don’t Create a File, Only Modify Existing Files

  • A touch of Class

Краткое резюме

  • Команда touch обновляет метки доступа (atime) и изменения (mtime) файлов — полезно, чтобы гарантировать включение файлов в бэкап, сборки и другие автоматические процессы.
  • Для создания пустого файла используйте touch new-file.txt.
  • Флаги -m и -a обновляют mtime и atime соответственно; -t и -d позволяют задать конкретную дату/время; -r копирует метки из другого файла; -c запрещает создание новых файлов.

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

Что такое команда touch?

Команда touch входит в GNU coreutils и доступна на большинстве дистрибутивов Linux. Исторически она появилась ещё в ранних версиях Unix. Основная её задача — установить значения меток времени файла: времени последнего доступа (atime) и времени последнего изменения содержимого (mtime). По умолчанию touch также создаёт пустой файл, если указанный файл отсутствует — это удобный побочный эффект.

Краткое определение терминов:

  • atime — время последнего доступа (чтение или открытие файла);
  • mtime — время последнего изменения содержимого;
  • ctime — время последнего изменения метаданных (изменение прав, владельца, или изменение inode).

Важно: touch изменяет только atime и mtime; ctime меняется автоматически, когда меняются метаданные файла.


Создание пустых файлов

Создавать пустые файлы проще простого:

touch new-file.txt  
touch ~/Documents/outlines/rough-outline.txt   
ls *.txt  
ls ~/Documents/outlines/*.txt

Создание нового пустого файла с помощью touch и терминала Linux.

Файл будет создан в файловой системе с нулевым размером — фактически это запись имени и inode. Проверка через ls и stat показывает нулевой размер, но файл присутствует:

ls -hl new-file.txt

Проверка существования вновь созданного файла с помощью ls в терминале Linux.

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

touch new-file-2.txt new-file-3.txt new-file-4.txt   
ls *.txt

Создание нескольких пустых файлов одновременно командой touch в терминале Linux.

Если имена файлов следуют последовательной нумерации, используйте расширение оболочки:

touch even-more-files-{1..6}.txt   
ls even*

Создание пронумерованных файлов с помощью расширения оболочки и touch.

Совет: touch удобен для заготовок, placeholder-файлов и для инициализации структуры каталогов перед выполнением скриптов.


Установить время доступа (atime) на текущее системное время

Для демонстрации используем файл sample-file.txt и команду stat, чтобы увидеть метки времени:

stat sample-file.txt

Вывод stat с метками доступа и изменения файла в терминале Linux.

Чтобы обновить только метку доступа на текущее время, используйте флаг -a:

touch -a sample-file.txt  
stat sample-file.txt

Использование touch с -a для установки времени доступа файла на текущее системное время.

Обратите внимание, что изменение atime считается изменением файла, поэтому ctime (время изменения метаданных) тоже обновляется.

Важно: поведение atime может зависеть от настроек монтирования файловой системы (например, relatime, noatime) — в некоторых конфигурациях файловая система не будет обновлять atime при чтении для снижения дисковых операций.


Установить время изменения (mtime) на текущее системное время

Для обновления только mtime используйте -m:

touch -m sample-file.txt  
stat sample-file.txt

Использование touch с -m для установки времени изменения файла на текущее системное время.

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


Установка atime и mtime на конкретную дату/время

Есть два способа задать конкретные значения одновременно: -d (date) и -t (timestamp). Отличие в формате строки, которую вы передаёте.

  • -d принимает свободную, человекочитаемую строку времени: “Wed, 7 August 2024 16:00:00”, “2024-07-11 16:00:00”, или даже слова вроде “next Sunday”.
  • -t требует жёсткого формата: [[CC]YY]MMDDhhmm[.ss]

Формат -t: сначала месяц и день, затем часы и минуты, секунда после точки опциональна. Годы можно указывать частично; при отсутствии CC/YY предполагается текущий год.

Пример с -d:

touch -d "Wed, August 7 2024 16:00:00" sample-file.txt  
stat sample-file.txt

Пример использования touch -d для установки заданного времени доступа/изменения файла.

Пример с -t: установим метки на полночь в Halloween этого года (2410310000.00 — формат: 24YYMMDDhhmm.ss):

touch -t 2410310000.00 sample-file.txt  
stat sample-file.txt

Пример использования touch -t для установки заданного времени доступа/изменения файла.

Совет по формату: чтобы избежать ошибок при ручном наборе дат, предпочитайте -d с ISO-подобной строкой (YYYY-MM-DD HH:MM:SS).


Установить только одну метку времени на конкретное значение

Флаги -t и -d по умолчанию изменяют обе метки (atime и mtime). Флаги -a и -m изменяют только одну метку, но если используются без -t/-d, они устанавливают метку на текущее время.

Чтобы установить только одну метку на произвольную указанную дату, комбинируйте флаги: сначала указывайте -a или -m, затем -t или -d.

Пример: установить только mtime на 11:45 21 декабря 2024 года. В формате -t (без CC/YY, предполагается текущий год): 12211145.00. Флаг -m должен идти перед -t:

touch -mt 12211145.00 sample-file.txt  
stat sample-file.txt

Использование touch с -mt для установки времени изменения файла на указанное значение.

Аналогично для atime используйте -at.

Совет: порядок ключей важен для читаемости и совместимости в некоторых оболочках; ставьте флаги в логичном порядке: сначала какой атрибут (-a/-m), затем способ задания времени (-t/-d).


Копирование меток времени с другого файла

Можно указать существующий файл в качестве эталона, и touch применит его atime и mtime к целевым файлам с помощью флага -r:

stat reference-file.txt

Вывод stat для файлов-эталонов с метками времени.

Применим метки времени эталона к одному или нескольким файлам (если целевой файл не существует, touch создаст его):

touch -r reference-file.txt sample-file.txt sample-2.txt  
stat sample-file.txt sample-2.txt

Копирование меток времени из файла-эталона на существующие и вновь создаваемые файлы с помощью touch -r.

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


Не создавать файл, изменить только существующие

По умолчанию touch создаёт файл, если его нет. Если нужно обновить только существующие файлы, используйте -c (no-create):

ls missing-in-action.txt  
touch -c -mt 202409170900.00 sample-file.txt missing-in-action.txt  
stat sample-file.txt  
ls missing-in-action.txt

Использование параметра -c для предотвращения создания новых файлов командой touch.

Результат: sample-file.txt обновлён, а missing-in-action.txt не создан.


Ограничения, ошибки и когда touch не сработает

Важно понимать случаи, когда touch не сможет изменить метки времени:

  • Нет прав: если у вас нет прав на запись inode или на директорию, touch вернёт ошибку «Permission denied».
  • Файловая система монтирована с ограничениями: некоторые параметры монтирования (например, noatime) влияют на поведение atime; сетевые FS могут не поддерживать точную установку времени (особенно с учётом таймзон и разрешения).
  • Файл установлен с атрибутом immutable (chattr +i) — тогда любые изменения inode запрещены, включая обновление времён.
  • Время вне допустимого диапазона: старые/будущие даты вне диапазона времени файловой системы могут привести к ошибке.
  • SELinux/AppArmor: политики безопасности могут блокировать изменение меток.

Примеры ошибок и рекомендации:

  • Если touch не меняет atime, проверьте параметры монтирования (mount | grep $(df –output=target sample-file.txt | tail -1)).
  • Для сетевых шар (NFS, SMB) убедитесь, что клиент/сервер синхронизируют время и поддерживают utimes.

Альтернативы и дополняющие инструменты

  • printf/echo с перенаправлением: создают файлы с содержимым, но не позволяют явно установить atime/mtime.
  • touch в скриптах: используется совместно с find (-exec touch {} \;) для массовых операций.
  • GNU utime/utimensat (системные вызовы) и утилиты на уровне API дают более гибкий контроль в программах на C/Python.
  • rsync и tar сохраняют и восстанавливают метки времени при переносе/архивации.

Когда не использовать touch:

  • Если нужно установить метки только на время создания (birth time), touch не меняет birth time на большинстве FS.
  • Если нужно правдиво восстановить историю изменений — лучше использовать резервные копии с сохранением метаданных.

Практическая шпаргалка (cheat sheet)

Команды и их назначение:

# Создать файл (или обновить метки) на текущее время
touch file.txt

# Обновить только atime
touch -a file.txt

# Обновить только mtime
touch -m file.txt

# Установить конкретную дату/время (человеко-понятный формат)
touch -d "2024-08-07 16:00:00" file.txt

# Установить конкретную дату/время (жёсткий формат)
touch -t 202408071600.00 file.txt

# Установить только mtime на указанное значение
touch -mt 202412211145.00 file.txt

# Копировать время из reference.txt
touch -r reference.txt target.txt

# Не создавать файлы, только изменять существующие
touch -c file.txt

Используйте абсолютные пути, когда работаете в скриптах, чтобы избежать неожиданных результатов при запуске из другого каталога.


Модели мышления и эвристики

  • Если файл должен быть обработан заново инструментом сборки: обновите mtime (touch -m).
  • Если нужно отметить файл как недавно прочитанный — обновите atime (touch -a), но будьте внимательны к параметрам файловой системы.
  • Для массовых операций: сначала протестируйте команды на копии или в тестовом каталоге.
  • Предпочитайте -d с ISO-форматом для читаемости и переносимости: “YYYY-MM-DD HH:MM:SS”.

Чек-листы по ролям

Системный администратор:

  • Проверьте права доступа и атрибуты (lsattr, stat).
  • Учтите параметры монтирования (noatime, relatime).
  • Тестируйте на целевых файловых системах (локальные и сетевые).

Разработчик/DevOps:

  • Используйте touch в CI для управления детекцией изменений сборщиками.
  • Предпочитайте явные форматы дат в скриптах (-d с ISO).
  • Логируйте операции touch в скриптах для отладки.

Менеджер резервного копирования:

  • Используйте -r, чтобы синхронизировать метки после восстановления.
  • Учитывайте поведение утилит архивации (tar, rsync) и сохраняйте метаданные.

Контрольные тесты и критерии приёмки

  1. Создание файла: touch test.txt — файл появляется с размером 0 и корректным uid/gid.
  2. Обновление mtime: установить mtime в прошлую дату и проверить stat показывает ожидаемую дату.
  3. Комбинация -m с -t: установить только mtime на указанную дату; atime остаётся неизменным.
  4. -c поведение: попытка touch -c on_missing.txt не создаёт файл.
  5. Копирование меток: touch -r source target — target получает одинаковые atime/mtime.

Критерии приёмки: все перечисленные тесты проходят на целевой системе (локально и в CI), условия доступа и параметры монтирования задокументированы.


Совместимость и отличия между системами

  • GNU/Linux (coreutils): поддерживает -a, -m, -d, -t, -r, -c.
  • BSD/macOS: touch поддерживает аналогичные опции, но синтаксис и поведение некоторых ключей (особенно -d) могут отличаться; macOS использует другой формат для некоторых строк, лучше проверять man touch.
  • Сетевые файловые системы (NFS/SMB): могут иметь нюансы с разрешением времени и синхронизацией часов между клиентом и сервером.

Рекомендация: проверяйте поведение touch на целевой платформе перед массовым применением.


Безопасность и приватность

  • Метки времени — часть метаданных файла; в некоторых юрисдикциях они могут считаться персональными данными, если позволяют восстановить поведение пользователя. При публикации файлов учитывайте, что изменение atime/mtime не удаляет исторические следы из резервных копий.
  • Манипуляция метками времени может использоваться в попытках сокрытия действий (например, изменения метаданных для сокрытия времён модификации). Логируйте критичные операции и держите журнал изменений.

Примеры использования в сценариях

  • Быстро пометить файл как недавно изменённый, чтобы заставить make пересобрать зависимость:
touch src/header.h
make
  • Синхронизировать метки времени после восстановления из архива:
# восстановили файлы, затем применили метку эталона
touch -r /path/to/backup/marker restored/file1 restored/file2
  • Подготовка placeholder-файлов в проекте:
mkdir -p project/{src,docs,tests}
cd project
touch README.md src/{main.c,module.c} tests/{test_main.c}

Краткое резюме и рекомендации

  • touch — простой и мощный инструмент для контроля меток времени и быстрого создания пустых файлов.
  • Всегда учитывайте права доступа, параметры монтирования и специфику сетевых файловых систем.
  • В скриптах используйте явные форматы (-d с ISO) и проверяйте поведение на целевой платформе.

Важно: перед массовыми операциями тестируйте команды в контролируемой среде.


Полезные ресурсы и ссылки

  • man touch — полное руководство по опциям на вашей системе.
  • coreutils documentation — для глубокого понимания реализации и совместимости.
Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Резервное копирование фото на Android — как и где хранить
Mobile

Резервное копирование фото на Android — как и где хранить

Как скрыть полное имя в Slack
Приватность

Как скрыть полное имя в Slack

Bitwarden на Raspberry Pi Zero 2 W — самохостинг
DevOps

Bitwarden на Raspberry Pi Zero 2 W — самохостинг

Удалённый доступ к Mac: локально и через интернет
Руководство

Удалённый доступ к Mac: локально и через интернет

Как создать качественные обои для рабочего стола
Руководство

Как создать качественные обои для рабочего стола

Как выбрать подставку для MacBook
Аксессуары

Как выбрать подставку для MacBook