touch
Создать пустой файл или обновить временные метки существующего файла
Описание
touch — утилита с двойным назначением: создание новых пустых файлов и обновление временных
меток (timestamps) существующих файлов. Команда появилась в ранних версиях Unix как инструмент управления
временем доступа и модификации — отсюда название «touch» (прикоснуться).
Каждый файл в Linux имеет три временные метки: atime (access time — время последнего
доступа), mtime (modification time — время последнего изменения содержимого) и
ctime (change time — время последнего изменения метаданных). Команда touch
обновляет atime и mtime до текущего времени или до указанного значения.
Самый распространённый сценарий на практике — создание пустых файлов-заглушек: конфигурационных файлов,
файлов-маркеров для систем сборки (Makefile), файлов блокировок, тестовых фикстур. Также touch
незаменим при работе с инструментами типа make, которые принимают решение о пересборке
на основе временных меток файлов.
Синтаксис
- ОПЦИИ — необязательные флаги управления метками времени
- ФАЙЛ — один или несколько файлов; если файл не существует — создаётся пустым
Формат времени для флага -t:
Формат строки времени для флага -d (человекочитаемый):
Флаги и опции
| Флаг | Описание | Пример |
|---|---|---|
-a |
Обновить только время доступа (atime), не изменять mtime | touch -a file.txt |
-m |
Обновить только время модификации (mtime), не изменять atime | touch -m file.txt |
-c, --no-create |
Не создавать файл, если он не существует (только обновить метки) | touch -c missing.txt |
-d, --date=STRING |
Установить время из строки в человекочитаемом формате | touch -d "2025-01-01" f.txt |
-t STAMP |
Установить время в формате [[CC]YY]MMDDhhmm[.ss] | touch -t 202501011200 f.txt |
-r FILE, --reference=FILE |
Скопировать временные метки из указанного файла-эталона | touch -r source.txt dest.txt |
-h, --no-dereference |
Обновить метки символической ссылки, а не файла, на который она указывает | touch -h symlink |
--help |
Показать справку и выйти | touch --help |
--version |
Показать версию утилиты и выйти | touch --version |
Паттерны использования
Создать пустой файл
touch newfile.txt touch config.yaml README.md .gitkeep
Если файл не существует, touch создаёт его пустым. Можно создать несколько файлов одной командой.
Создать файл-маркер для git (пустая директория)
mkdir -p logs touch logs/.gitkeep
Git не отслеживает пустые директории. Файл .gitkeep (или .keep) — общепринятое соглашение для фиксации пустой папки в репозитории.
Обновить метку времени для make
# Принудить make к пересборке зависимого таргета touch src/main.c make
make сравнивает временные метки исходников и артефактов. Обновление метки исходника заставит make пересобрать цель.
Установить конкретную дату
touch -d "2025-06-15 09:00:00" report.pdf touch -t 202506150900 report.pdf
Полезно при тестировании программ, которые проверяют дату файла, или для синхронизации меток после переноса файлов.
Скопировать метки времени из другого файла
touch -r original.txt copy.txt
Файл copy.txt получит те же atime и mtime, что и original.txt. Удобно при клонировании окружений или тестовых данных.
Создать серию файлов по шаблону
touch file{1..5}.txt
# создаст: file1.txt file2.txt file3.txt file4.txt file5.txt
touch 2025-{01..12}-report.md
Bash-раскрытие диапазонов позволяет создавать серии файлов с именами по шаблону.
Советы и предупреждения
Оба варианта создают пустой файл:
touch file.txt и > file.txt.
Но touch безопаснее — если файл уже существует, он не затирает его содержимое,
а только обновляет метку. Оператор > очистит существующий файл.
Используйте
stat file.txt для просмотра всех трёх временных меток файла (Access, Modify, Change).
Команда ls -l показывает только mtime, а ls -lu — atime.
Для отслеживания пустых директорий можно также добавить в них пустой
.gitignore
(он будет работать как .gitkeep и дополнительно позволит настроить игнорирование
в этой папке). Оба подхода распространены в профессиональных проектах.
Флаги
-d и -t позволяют задать произвольное atime/mtime, но
ctime (время изменения метаданных) всегда выставляется в текущий момент ядром ОС
и не может быть задано вручную через touch без привилегий суперпользователя.
На многих современных системах файловая система примонтирована с опцией
noatime
или relatime для повышения производительности. В таких системах флаг -a
(обновить только atime) может не дать видимого эффекта — atime обновляется только при реальном чтении.