Команда Linux touch

Опубликовано admin - вт, 07/26/2022 - 13:28

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

Использование команды Linux touch с примерами

Команда touch может изменить модификацию и время доступа для любого заданного файла. Утилита создает файл только в том случае, если он ещё не существует.

Содержание

Синтаксис

touch [ПАРАМЕТР]… ФАЙЛ…

Опции

-a
Изменять только время доступа
-c, --no-create
Не создавать новые файлы
-d, --date=СТРОКА
Проанализировать СТРОКУ и использовать её вместо текущего времени
-f
 (Игнорируется)
-h, --no-dereference
 Изменять символические ссылки, а не файлы, на которые они ссылаются (имеет смысл только на системах, где можно изменять владельца символической ссылки)
-m
Изменять только время изменения
-r, --reference=ФАЙЛ
Использовать время ФАЙЛА вместо текущего времени
-t ВРЕМЯ
Использовать [[ВВ]ГГ]ММДДччмм[.сс] вместо текущего времени
--time=СЛОВО
Изменять время, указанное СЛОВОм: значения access, atime, use эквивалентны -a значения modify, mtime эквивалентны -m

Примеры использования команды touch в Linux

При работе с файлами в Linux необходимо помнить о трёх временных метках:

Время доступа или atime
Изменяются, когда команда считывает содержимое файла, например grep или cat. Команда ls -lu отображает время для файлов.
Изменение времени или ctime
При изменении свойств файла, например при переименовании файлов, изменении прав доступа к файлам или перемещении файла. Команда ls -lc показывает ctime для файлов.
Время модификации или mtime
Изменяется при изменении содержимого файла. Команда ls -l показывает mtime для файлов.

Приведенные ниже примеры запускаются из терминала и демонстрируют, как использовать команду Linux touch с различными параметрами и какой результат следует ожидать.

Создание файла

Создание пустого файла — самый простой способ использования команды touch без параметров:

oleg@mobile:~/Directory:$ touch example
oleg@mobile:~/Directory:$ ls -l
итого 0
-rw-r--r-- 1 oleg users 0 июл 26 11:40 example
oleg@mobile:~/Directory:$ 

Создание нескольких файлов

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

oleg@mobile:~/Directory:$ ls -l
итого 0
-rw-r--r-- 1 oleg users 0 июл 26 11:42 example_1
-rw-r--r-- 1 oleg users 0 июл 26 11:42 example_2
-rw-r--r-- 1 oleg users 0 июл 26 11:42 example_3
oleg@mobile:~/Directory:$ 

Создание большого пакета файлов

Для создания большого количества файлов командой touch необходимо к имени файла добавить первый и последний элемент, заключив их в фигурные скобки и отделив друг от друга двумя точками (..):

oleg@mobile:~/Directory:$ touch example_{1..15}
oleg@mobile:~/Directory:$ ls -l
итого 0
-rw-r--r-- 1 oleg users 0 июл 26 11:48 example_1
-rw-r--r-- 1 oleg users 0 июл 26 11:48 example_10
-rw-r--r-- 1 oleg users 0 июл 26 11:48 example_11
-rw-r--r-- 1 oleg users 0 июл 26 11:48 example_12
-rw-r--r-- 1 oleg users 0 июл 26 11:48 example_13
-rw-r--r-- 1 oleg users 0 июл 26 11:48 example_14
-rw-r--r-- 1 oleg users 0 июл 26 11:48 example_15
-rw-r--r-- 1 oleg users 0 июл 26 11:48 example_2
-rw-r--r-- 1 oleg users 0 июл 26 11:48 example_3
-rw-r--r-- 1 oleg users 0 июл 26 11:48 example_4
-rw-r--r-- 1 oleg users 0 июл 26 11:48 example_5
-rw-r--r-- 1 oleg users 0 июл 26 11:48 example_6
-rw-r--r-- 1 oleg users 0 июл 26 11:48 example_7
-rw-r--r-- 1 oleg users 0 июл 26 11:48 example_8
-rw-r--r-- 1 oleg users 0 июл 26 11:48 example_9
oleg@mobile:~/Directory:$ 

Команда не позволяет сочетать цифры и буквы.

Установка конкретной временной мерки

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

$ touch -t <timestamp> <filename>

Формат метки времени следует шаблону:

[[CC]YY]MMDDhhmm[.ss]

Здесь:

CC
Первые две цифры года
YY
Две последние цифры года
MM
Месяц
DD
День
hh
Час
mm
Минуты
ss
Секунды

Цифры в квадратных скобках необязательны. При использовании двузначного формата года установка YY любого числа от 0 до 68 автоматически предполагает, что CC — это 20, тогда как 69–99 предполагает, что CC — это 19.

Например, чтобы изменить отметку времени для файла с именем example на полночь 1 января 2022 года, запустите:

$ touch -t 202201010000 example

Создаём файл example и меняем временную метку:

oleg@mobile:~/Directory:$ touch example
oleg@mobile:~/Directory:$ ls -l --full-time
итого 0
-rw-r--r-- 1 oleg users 0 2022-07-26 12:05:41.019328038 +0300 example
oleg@mobil202201010000 exampleh -t 202201010000 example
oleg@mobile:~/Directory:$ ls -l --full-time
итого 0
-rw-r--r-- 1 oleg users 0 2022-01-01 00:00:00.000000000 +0200 example
oleg@mobile:~/Directory:$ 

Для того чтобы видеть детали временной метки, команда ls использовалась с опцией --full-time.

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

В данном случае используется опция -d:

$ touch -d <string> <filename>

Строчная дата является гибким форматом времени и принимает множество различных удобочитаемых текстовых форм.

Вот некоторые примеры:

Даты календаря
Такие как 19 August 2020.
Время суток
Например 9:27pm или 8:02am.
Дни недели
Такие как Sunday, Monday, и т.д.
Относительное время
Такое как 5 years ago, yesterday, next tuesday, и т.д.

Как например можно изменить временную метку с помощью -d tomorrow:

oleg@mobile:~/Directory:$ touch -d tomorrow example
oleg@mobile:~/Directory:$ ls -l
итого 0
-rw-r--r-- 1 oleg users 0 июл 27  2022 example
oleg@mobile:~/Directory:$ 

Изменение времени доступа на текущее

В данном случае используется лишь опция -a.

Проверяем время доступа к файлу:

oleg@mobile:~/Directory:$ ls -lu
итого 0
-rw-r--r-- 1 oleg users 0 июл 27  2022 example
oleg@mobile:~/Directory:$

Изменяем время доступа и проверяем изменённое время:

oleg@mobile:~/Directory:$ touch -a example
oleg@mobile:~/Directory:$ ls -lu
итого 0
-rw-r--r-- 1 oleg users 0 июл 26 12:19 example
oleg@mobile:~/Directory:$ 

Время доступа изменилось на текущую отметку времени.

Явное изменение времени доступа

В данном случае используются опции -a и -t.

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

oleg@mobile:~/Directory:$ ls -lu
итого 0
-rw-r--r-- 1 oleg users 0 июл 26 12:19 example
oleg@mobile:~/Directory:$ 

Изменяем время доступа к файлу example на полночь 01 января 2019 года, добавив отметку времени, и проверяем время доступа после внесения изменений:

oleg@mobile:~/Directory:$ touch -at 1901010000 example
oleg@mobile:~/Directory:$ ls -lu
итого 0
-rw-r--r-- 1 oleg users 0 янв  1  2019 example
oleg@mobile:~/Directory:$ 

После выполнения команды время доступа изменилось на время, заданное опцией -t.

Изменение времени модификации на текущее

В этом случае используется опция -m.

Проверяем mtime файла перед изменением метки времени:

oleg@mobile:~/Directory:$ ls -l
итого 0
-rw-r--r-- 1 oleg users 0 июл 27  2022 example
oleg@mobile:~/Directory:$ 

Изменяем время модификации файла и снова проверяем mtime после изменения:

oleg@mobile:~/Directory:$ touch -m example
oleg@mobile:~/Directory:$ ls -l
итого 0
-rw-r--r-- 1 oleg users 0 июл 26 12:34 example
oleg@mobile:~/Directory:$ 

Опция -m изменила время модификации на текущую метку времени.

Явное изменение времени модификации

В этом случае используются опции -m и -t.

Проверяем mtime файла перед изменением:

oleg@mobile:~/Directory:$ ls -l
итого 0
-rw-r--r-- 1 oleg users 0 июл 26 12:34 example
oleg@mobile:~/Directory:$ 

Изменяем время модификации на полночь 1 января 2001 года и перепроверяем время модификации:

oleg@mobile:~/Directory:$ touch -mt 0101010000 example
oleg@mobile:~/Directory:$ ls -l
итого 0
-rw-r--r-- 1 oleg users 0 янв  1  2001 example
oleg@mobile:~/Directory:$ 

Одновременное изменение времени модификации и доступа

Используются опции -a и -m:

Проверяем atime и mtime перед их изменением:

oleg@mobile:~/Directory:$ ls -l
итого 0
-rw-r--r-- 1 oleg users 0 янв  1  2001 example
oleg@mobile:~/Directory:$ ls -lu
итого 0
-rw-r--r-- 1 oleg users 0 янв  1  2019 example
oleg@mobile:~/Directory:$ 

Изменяем atime и mtime тестового файла example на текущую отметку времени и снова проверяем оба времени после изменения:

oleg@mobile:~/Directory:$ touch -am example
oleg@mobile:~/Directory:$ ls -l
итого 0
-rw-r--r-- 1 oleg users 0 июл 26 12:57 example
oleg@mobile:~/Directory:$ ls -lu
итого 0
-rw-r--r-- 1 oleg users 0 июл 26 12:57 example
oleg@mobile:~/Directory:$ 

Заключение

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

Поделиться с друзьями