Что команда «трогает» при применении к каталогу?
$ 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
Что команда «трогает» при применении к каталогу?
$ 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» устанавливает время для каталога (новое время в списке было таким же, как и в оригинале, просто потому, что 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
~~~~~~~~~~~~~
touch
стандартная программа Unix, используемая для изменения времени доступа к файлу и его изменения Он также используется для создания нового пустого файла.Спецификация Single Unix (SUS) указывает, что касание должно изменить время доступа, время модификации или оба, для файла. Файл идентифицируется путем, указанным в качестве единственного аргумента. В нем также указывается, что если указанный файл не существует, файл создается, а время доступа и изменения устанавливаются в соответствии с указаниями. Если новые временные метки не указаны, touch использует текущее время.
-Wikipedia
Вы можете найти более подробную информацию о touch
команде (или любой другой команде, о которой вы хотели бы знать), используя man
команду, подобную этой:
man touch
Непосредственной причиной этого вопроса является тот факт, что временное разрешение по умолчанию ls -l
- в минутах, поэтому запись файловой системы, затронутая в течение той же минуты, будет отображаться точно так же в ls -l
выходных данных по умолчанию .
Решение этой проблемы описано по адресу /superuser/355318/how-to-have-linux-ls-command-show-second-in-time-stamp
и в основном включает в себя запуск ls -l --time-style=full-iso
вместо этого.