Что означает команда «прикасаться» к каталогу?
$ mkdir test
$ ls -l test
drwxrwxr-x 2 dragos dragos 4096 Oct 27 18:08 test
$ touch test
$ ls -l
drwxrwxr-x 2 dragos dragos 4096 Oct 27 18:08 test
Как указано в справочной странице , основное использование touch
заключается в следующем:
Обновление времени доступа и модификации каждого ФАЙЛА до текущего времени.
Таким образом, он обновляет время доступа и модификации каталога.
Пример в верхней части не проясняет, что «касание» задает время каталога (новое время в списке было таким же, как и в оригинале, просто потому, что касание произошло так скоро после создания каталога ) ... да, определение «ФАЙЛ» в документации включает каталоги, так что вы можете использовать touch для изменения их временных меток, НО ...
В некоторых ситуациях вы не можете изменить временную метку каталога (для некоторых типов удаленно смонтированных каталогов), даже если у вас есть разрешение на что-либо еще. например это монтирование NFS:
$ touch -d "2014-07-02 12:15" /public/test.dir
touch: setting times of ‘/public/test.dir’: Operation not permitted
Кроме того, вы можете столкнуться с проблемами с некоторыми старыми датами, которые не поддерживаются на некоторых серверах, например:
$ mkdir /Acer/kopies/test.dir
$ ls -ald /Acer/kopies/test.dir
drwxr-xr-x 2 mark aitchison 0 Mar 11 17:40 /Acer/kopies/test.dir
Это работает:
$ touch "2014-04-01 00:00" /Acer/kopies/test.dir
$ ls -ald /Acer/kopies/test.dir
drwxr-xr-x 2 mark aitchison 0 Apr 1 2014 /Acer/kopies/test.dir
Это сработало бы в локальной директории, но дает странную дату при монтировании Samba:
$ touch -d "1955-07-02 12:15" /Acer/kopies/test.dir
$ ls -ald /Acer/kopies/test.dir
drwxr-xr-x 2 mark aitchison 0 Nov 26 60410 /Acer/kopies/test.dir
~~~~~~~~~~~~~
Непосредственной причиной этого вопроса является тот факт, что временное разрешение по умолчанию ls -l
указано в минутах, поэтому запись в файловой системе, затронутая в течение той же минуты, будет отображаться точно так же в выходном сигнале ls -l
по умолчанию.
Решение этой проблемы описано в https://superuser.com/questions/355318/how-to-have-linux-ls-command-show-second-in-time-stamp и в основном включает запуск ls -l --time-style=full-iso
вместо.
touch
- это стандартная программа Unix, используемая для изменения меток времени доступа к файлу и его изменения. Он также используется для создания нового пустого файла.В спецификации Single Unix (SUS) указывается, что касание должно изменить время доступа, время модификации или и то и другое для файла. Файл идентифицируется путем, указанным в качестве единственного аргумента. В нем также указывается, что если указанный файл не существует, файл создается, а время доступа и изменения устанавливаются в соответствии с указаниями. Если новые временные метки не указаны, touch использует текущее время.
-Википедия
Более подробную информацию о команде touch
(или любой другой команде, о которой вы хотели бы узнать) можно найти с помощью команды man
, например:
man touch