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

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

5 min read Linux Обновлено 25 Dec 2025
touch в Linux — создать файл и управлять метками времени
touch в Linux — создать файл и управлять метками времени

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

Коротко о терминах

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

Зачем использовать touch

touch полезен при:

  • создании пустых «заглушек» (placeholder) для тестов и скриптов;
  • быстром обновлении временных меток для сборки/кэширования;
  • синхронизации времён между файлами;
  • восстановлении времён после операций копирования/архивации (в сочетании с резервными копиями).

Важно: touch не записывает данные в файл — он лишь изменяет метки времени или создаёт пустой файл при отсутствии такового (если не указан ключ, запрещающий создание).

Базовый синтаксис

touch [опции] имя_файла [...другие_файлы]

Примеры:

# создать один пустой файл
touch newemptyfile

# создать сразу несколько
touch fileone filetwo filethree

Если файл уже существует, по умолчанию touch обновит его метки времени до текущего момента.

Частые опции и примеры

  • -a — обновить только время доступа (atime).
  • -m — обновить только время модификации (mtime).
  • -c (или –no-create) — не создавать файл, если его нет.
  • -t — задать время в специальном числовом формате.
  • -d — задать время в виде человекопонятной строки (GNU touch).
  • -r — скопировать метки времени из другого файла.

Примеры:

# обновить только atime
touch -a textfile

# обновить только mtime
touch -m textfile

# не создавать файл, если его нет
touch -c existfile

# задать время «5 часов назад» (GNU coreutils)
touch -d "5 hours ago" newfile

# скопировать метки времени из originalfile в copiedfile
touch -r originalfile copiedfile

Формат даты для -t

Опция -t ожидает формат [[CC]YY]MMDDhhmm[.ss]. Примеры:

# 12 декабря 2020 21:00:33
touch -t 202012122100.33 newfile

# если указать без века: YYMMDDhhmm
touch -t 2012120900.00 file

Примечание: синтаксис может незначительно различаться между реализациями Unix-подобных систем, но [[CC]YY]MMDDhhmm[.ss] — стандартный формат в большинстве систем.

Использование date вместе с touch

Можно комбинировать date и touch для более гибких преобразований времени:

# взять mtime из другого файла и вычесть 5 часов
touch -d "$(date -r filename -d '-5 hours')" existfile

# альтернативный шаблон: использовать date для форматирования
touch -t "$(date -d '2020-12-12 21:00:33' +%Y%m%d%H%M.%S)" newfile

Замечание по совместимости: опции date -r и -d доступны в GNU date; на других платформах (например, BSD) синтаксис может отличаться.

Проверка меток времени: stat

Для просмотра текущих времён используйте stat:

stat filename

Вывод содержит Access, Modify и Change. Пример вывода:

File: 'textfile'
Size: 13 Blocks: 8 IO Block: 4096 regular file
Access: 2021-04-12 16:59:45.000000000 +0000
Modify: 2021-04-12 16:57:59.000000000 +0000
Change: 2021-04-12 17:02:43.000000000 +0000

Когда touch не сработает

  • недостаточно прав (нужно иметь право на запись в каталог или на изменение файла);
  • файл помечен как immutable (chattr +i на ext-подобных файловых системах);
  • файловая система монтирована только для чтения;
  • некоторым файловым системам чужды традиционные атрибуты времени (нестандартное поведение на сетевых шарингах или специальных виртуальных FS);
  • при использовании ключа -c файл не создаётся — это ожидаемое поведение.

Альтернативы и дополнительные способы создания файлов

  • перенаправление: > filename (создаёт пустой файл);
  • printf ‘’ > filename или : > filename;
  • cat > filename и ввод содержимого вручную;
  • скрипты на Python/Perl: open(‘file’,’a’).close();
  • графические файловые менеджеры в средах рабочего стола.

Когда использовать touch, а не >: touch удобен для явного управления метками времени и копирования их с других файлов.

Практические советы и лучшие практики

  • Для CI/CD и тестов явно задавайте время, чтобы получить предсказуемое поведение сборки.
  • Для сохранения оригинальных времён сделайте резервную копию меток времени (stat или сохранение output), прежде чем менять их.
  • При автоматизации используйте проверку ошибок (проверка кода возврата) — touch вернёт ненулевой код при ошибках.

Сравнение флагов — шпаргалка

ДействиеКоманда
Создать файлtouch file
Обновить только atimetouch -a file
Обновить только mtimetouch -m file
Не создавать новый файлtouch -c file
Установить дата/время (человеческий формат)touch -d “2 days ago” file
Установить дата/время (число)touch -t 202012122100.33 file
Скопировать метки из другого файлаtouch -r src dst

Mini-методология: безопасное изменение времён в проде

  1. Проверить права и файловую систему: ls -ld каталог; mount | grep путь.
  2. Зафиксировать текущие временные отметки: stat file > file.stat.backup.
  3. Выполнить touch с нужными опциями.
  4. Проверить результат stat и сохранять логи об операциях.
  5. При ошибках восстановить из бэкапа или пересоздать файл.

Ролевые чек-листы

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

  • использовать touch для создания заглушек;
  • при тестах явно устанавливать mtime/atime для воспроизводимости;
  • проверять права и возвращаемый код.

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

  • использовать touch в скриптах обслуживания для управления кэшами;
  • при массовом применении проверять совместимость с NFS/CIFS;
  • хранить журналы операций.

Тестировщик:

  • моделировать старые/новые файлы с touch -t/-d;
  • проверять поведение кэширования и сборки при разных временных метках.

Критерии приёмки

  • файл создан/существует в указанном каталоге;
  • ожидаемые метки времени (atime/mtime/ctime) соответствуют заданным значениям;
  • команда возвращает код 0 при успешном выполнении;
  • при использовании -c файл не создаётся, если его не было.

Edge-case галерея и рекомендации

  • NFS/CIFS: сетевые прописи времени могут отличаться из-за временных зон сервера и клиента — проверяйте синхронизацию времени (ntpd/chrony).
  • immutable-файл: chattr -i filename (требуются права root) — затем touch применится.
  • отсутствие записи в каталог: используйте sudo или измените права.
  • FAT/NTFS на Linux: атрибуты времени сохраняются иначе, возможны ограничения с точностью секунд.

Чек-лист для быстрого применения (шпаргалка)

  • создать файл: touch file
  • задать человекопонятную дату: touch -d “3 days ago” file
  • установить точную дату: touch -t 202501011200.00 file
  • скопировать метки: touch -r src dst
  • не создавать при отсутствии: touch -c file

Примеры реальных сценариев

  • CI: установить mtime на файлов, чтобы сборщик не пересобирал ненужно.
  • Логи: корректировать atime/mtime для тестов ротации логов.
  • Восстановление: после распаковки архива выставить времена согласно метаданным архива.

Короткий словарь терминов

  • mtime: время изменения содержимого.
  • atime: время доступа/чтения.
  • ctime: время изменения метаданных.

Заключение

Команда touch — лёгкий и мощный инструмент для управления файлами и их временными метками. Она незаменима в автоматизации, тестировании и администрировании. Зная основные опции (-a, -m, -c, -t, -d, -r) и ограничения файловых систем, вы сможете использовать touch безопасно и предсказуемо.

Важно: при изменении времён в критичных системах всегда делайте резервные копии и проверяйте совместимость с сетевыми файловыми системами.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

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

Kodi на Linux: установка и настройка
Программное обеспечение

Kodi на Linux: установка и настройка

Focus на Mac — настройка и советы
Mac

Focus на Mac — настройка и советы

Goal Seek в Excel: как найти нужное значение
Excel

Goal Seek в Excel: как найти нужное значение

Как создать файл в Linux — все методы
Linux

Как создать файл в Linux — все методы

Документы в Google Chat: создание и доступ
Google Workspace

Документы в Google Chat: создание и доступ

Google Earth и погодные слои: руководство
Руководство

Google Earth и погодные слои: руководство