Каково законное использование 'сенсорной' команды?

Нет, нет. Не впоследствии, который является.

Но если бы Вы делаете "PS-A> перечисляет" перед уничтожать-командой, у Вас был бы файл названным списком, который содержит список всех процессов, которые работали прежде, чем уничтожить тот процесс.

82
16.01.2014, 20:29
15 ответов

Одно преимущество touch это, это может указать произвольные метки времени, в то время как echo -n будет всегда заканчиваться в текущее время.

Пример законного использования состоит в том, чтобы обновить метку времени файла исходного кода так программа как make будет считать исходный файл более новым, чем его скомпилированный объект и восстанавливать его.

Другое использование должно создать файлы, которые функционируют только на основе их существования, например. /etc/nologin, который запрещает логины, если это существует. Я также обсудил бы это touch myfile более простая конструкция, чем echo -n >> myfile, а также быть короче для ввода.

97
27.01.2020, 19:30
  • 1
    другое общее использование: коснитесь файла на определенную дату, затем "находят / - более новый/the/file" находить, что все файлы изменились/создали после него –  Olivier Dulac 13.01.2014, 11:47
  • 2
    @casey, Когда я проверил документацию echo -n Я вижу, что это говорит, "не производят запаздывающую новую строку". Таким образом, я не вижу, как это может создать пустой файл. Можно ли разъясниться? –  Geek 13.01.2014, 18:03
  • 3
    @Geek echo -n произведет пустую строку, и отдельно ничего не делает. Перенаправление его вывода через >> заставляет пустой вывод быть добавленным в файл. Перенаправление заставит файл быть созданным, если файл не будет существовать. –  casey 13.01.2014, 18:07
  • 4
    Это не работает: открытие существующего файла для вывода, но не записи в него, не изменяет mtime (в моей системе, так или иначе). Даже если это сделало, Вы не нуждаетесь и не должны использовать echo -n для команды, которая ничего не делает. echo -n может произвести строку "-n" под некоторыми оболочками. Если Вам действительно нужна команда, которая ничего не делает, : или true более оптимальный вариант, но >> myfile отдельно также совершенно допустимый способ создать файл, если он не существует. Все это, конечно, поддерживает Ваш ответ, что необходимо просто использовать "касание". –  hvd 13.01.2014, 19:56

У меня есть задание крона, которое получает изменения от базы данных, которые произошли между последним выполнением задания и текущим выполнением. Это производит XML-файл изменений, которые затем обрабатываются в другую базу данных. Это добирается в прошлый раз от метки времени на выходном файле XML.*

Если что-нибудь спутывается в обработке XML-файла, я мог бы хотеть повторить выполнение с исходной даты не с даты, упомянутой на метке времени нового XML-файла.

Самый простой способ сделать это, вместо того, чтобы редактировать сценарии, которые называют и т.д., должно коснуться XML-файла и вынудить метку времени быть датой, которой я требую.

Также, если я начинаю заново (без предыдущего выходного файла XML), я могу просто моделировать его существование с помощью касания.

[*], Прежде чем кто-то укажет на это - я понимаю время, которое запускает задание, и запись XML-файла оставляет разрыв времени нескольких минут, где изменения DB могли произойти. Прогоны задания в то время, когда изменения DB крайне маловероятны. Это - мое оправдание, и я придерживаюсь его :-)

0
27.01.2020, 19:30

Некоторые init-сценарии сравнивают метку времени файла конфигурации с их собственным изодромным с предварением файлом. Результат решает, перезагрузить ли рабочий сервис или нет.

Если существует ситуация, где Вы не хотите изменять конфигурацию, но хотеть вызвать перезагрузку, касание помогает Вам здесь.

1
27.01.2020, 19:30

Я с этой целью еще не использовал его, но у меня есть сценарий, который читает файлы и их даты из каталога и читает их для использования на веб-странице. Если я должен отредактировать один, это изменит свою дату. Я рассмотрел touchлуг их для сброса их порядка.

1
27.01.2020, 19:30

На работе у нас есть архив цифровых карт, возвращающихся 15 + годы. Эти старые карты сохраняются во множестве форматов, таких как PostScript, EMF, PRN, hpgl2, PDF, и т.д. который не понимает большинство программ. Или Вам нужна дюжина различных программ для наблюдения их всех.

Для упрощения легкого поиска и просмотра всех этих различных форматов, мы создаем jpeg версии карт и затем используем касание, чтобы заставить jpeg файл соответствовать метке времени файла первоисточника - часто спустя годы после того, как оригинал был сделан.

Теперь мы можем использовать единственную программу, такую как Picasa, чтобы видеть целую библиотеку и тривиально определить местоположение определенных диапазонов даты. Без касания мы должны были бы добавить метаданные даты для каждого изображения, вероятно, вручную, и затем искать на тех строках при поиске определенного диапазона дат.

2
27.01.2020, 19:30

Часто у Вас может быть процесс, который изменяется от идентификатора пользователя, как от корня-> что-то еще. Касание может дать Вам шанс создать файл в месте, которые только базируются, может затронуть, прежде чем приложение начинает регистрироваться к нему как другой пользователь.

2
27.01.2020, 19:30
  • 1
    Это не использование касания, которое недостижимо "эхом" - видят исходный вопрос –  Domingo Ignacio Galdos 13.01.2014, 03:27
  • 2
    Эхо включает открытие потока и такого. Касание могло быть hyper, оптимизированным путем работы непосредственно с inodes. ПРОИЗВОДИТЕЛЬНОСТЬ FTW! –  user56560 17.02.2017, 08:10

Вот один - я использую программу под названием SageTV для записывания телепередач - они часто зарегистрированы в MPEG-2, который не является очень эффективным кодеком, это также не дружественный iPad/iPhone. Таким образом, я преобразовываю файлы в .mp4 файлы. Но при воспроизведении файлов SageTV ожидает, что метка времени файла будет, когда сериал запустился - если не он завинчивает временную шкалу шоу так, чтобы это не было легко к FF или REW. Поэтому я использую касание для сброса метки времени .mp4 файла для совпадения с orignal файлом.
Это законно?

4
27.01.2020, 19:30

Важное различие по сравнению с. things как echo (или еще лучше > file как упомянуто другими), то, что касание не разобьет содержание. > file освободит файл. touch не будет. Вместо того, чтобы думать о приемах для предотвращения повреждения содержания просто используйте касание! Это сделает меньше работы в ядре так или иначе, потому что это будет работать только с атрибутами файла, не напрасно тратя время на самом деле подготовка к открытому и затем выполнение завершения.

Касание может, вероятно, изменить метку времени, даже если файл в настоящее время находится под обязательной или консультативной блокировкой или эксклюзивным открытым. Хм, никогда не тестировали это или читали об этом...

5
27.01.2020, 19:30
  • 1
    >> добавит вместо перезаписи –  Michael Mrozek♦ 13.01.2014, 04:12
  • 2
    я считал упоминание этим, но это добирается еще больше в территорию побочного эффекта. Необходимо было бы также упомянуть то, что это бросило бы ошибку, если бы файл, оказалось уже, был эксклюзивно открыт, и т.д. и т.д. и т.д. Проблема, которая могла применяться с помощью> также. Я предполагаю свою вторичную точку - вне основной, которой это незначительно более быстро для простого касания, статистика файла - то, что это - хорошая идея написать код, который говорит это прямо вместо хожения вокруг да около. –   20.01.2014, 07:55

Законное использование касания:

  • Обновите метку времени файлов изображений (GIF/JPG/etc) ко времени, они были взяты. Не все чтение рендереров или внимание информация EXIF.
  • Сохраните c/m-time, когда масса, обновляющая ряд, регистрирует, где метка времени важна для пакета файлов.
  • Установите время пакета (т.е. CSV) файл, если необходимо сделать другой импорт после отказа, и программа импорта зависит от метки времени (отпуск, что обсуждение к другой теме :-))
  • Архивные цели, т.е. имеют резервные копии в папках на основе года, затем устанавливая время на этих папках к Jan 1 YYYY для легкой сортировки
11
27.01.2020, 19:30

Я работал по крайней мере с одной веб-платформой (не может помнить, который), который в режиме разработки смотрел файлы исходного кода за изменениями и перезагрузил приложение, когда это произошло.

Конечно, иногда Вы хотели, чтобы это перезагрузило после изменения чего-то, что это не наблюдало, в этом случае touchлуг его основной конфигурационный файл добился цели.

Так, в общем случае, каждый раз, когда Вы хотите запустить процесс, инициированный изменениями в файле, на самом деле не изменяя файл.

12
27.01.2020, 19:30
  • 1
    Это на самом деле имеет место с mod_wsgi и апачем; можно перезагрузить, например, django веб-приложение только путем касания wsgi файла. –  sapi 13.01.2014, 09:59

Один из наиболее популярных способов использования touch - или по крайней мере используется, чтобы быть - для инициирования восстанавливания кода.

Обычные инструменты сборки- make и его derivitives - пытаются сохранить работу, не перекомпилировав/восстанавливая файлы, если один из файлов, которые вошли в создание их, не изменился - например, если.o файл более свеж, чем.c источник, обычно безопасно предположить, что источник C не был изменен начиная с того, чтобы быть скомпилированным для создания того объектного файла.

Но существуют времена, когда Вы хотите вынудить что-то быть восстановленным. Вы могли сделать бесполезную модификацию к одному из ее исходных файлов, но это рискует случайно повреждать что-то. Вместо этого Вы могли просто touch файл, заставляя это выглядеть новым без любого риска изменения его содержания - и этого было бы достаточно для убеждения make то, что пришло время восстановить все, что зависит от того файла.

Существует другое использование, но исторически который был большим.

20
27.01.2020, 19:30
  • 1
    В то время как это швы хорошая идея изменить файл для порождения восстанавливания я привел бы доводы против него. Некоторые системы пересмотра исходного кода могут запутаться об измененном файле. Так touch так же плохо как ручное изменение. Для порождения восстанавливания, я предлагаю удалить выходные файлы .o из рассматриваемого источника. –  harper 13.01.2014, 08:46
  • 2
    Ручные изменения и удаление.o файлов и требуют большего количества времени и ввода, и ручное изменение намного более подвержено ошибкам. И мы только говорим об изменении метки времени на рабочей копии - если редактирования будут сделаны позже, то файл правильно отразит метку времени изменения. И не все системы управления версиями перепутаны меткой времени. –  David 13.01.2014, 16:18
  • 3
    Поскольку David сказал. Это действительно было стандартной практикой Unix не, что давно, и все еще остается общепринятой практикой для разработчиков, работающих вне IDE. –  keshlam 13.01.2014, 17:24

Кроме других двух очень хороших ответов Вы добрались, еще одно использование, в Ваших словах, к

создайте ложное впечатление о возрасте файла

например, для использования в резервных схемах. Вы могли бы хотеть не обновить резервное копирование с более новым, так как они идентичны, или так как изменения не важны по сравнению с расходом обновления резервного копирования на, скажем, медленной строке к удаленному хосту. Для достижения этого у Вас есть простая опция маркировки файла резервной копии с более новой меткой времени, не фальсифицированием, но объявляя, что метка времени законности того файла является теперь другой.

Впечатление о возрасте файла является теперь действительно ложью, но ее значение реально и законно.

20
27.01.2020, 19:30

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

Примеры

1. создание файлов

$ ls -l
total 0

$ touch file{1..3}

$ ls -l
total 0
-rw-rw-r--. 1 saml saml 0 Jan 12 13:33 file1
-rw-rw-r--. 1 saml saml 0 Jan 12 13:33 file2
-rw-rw-r--. 1 saml saml 0 Jan 12 13:33 file3

Примечание: total 0 вывод от ls -l корректно. Эта реализация ls показывает количество блоков, используемых файлами, когда они перечислены. Можно убедиться этого факта путем добавления -s переключатель к ls. Это перечислит блоки, используемые каждым файлом. Здесь я добавил 2 символа к file1 и file2.

Пример

$ ls -ls
total 8
4 -rw-rw-r--. 1 saml saml 3 Jan 13 12:07 file1
4 -rw-rw-r--. 1 saml saml 3 Jan 13 12:09 file2
0 -rw-rw-r--. 1 saml saml 0 Jan 13 12:05 file3

2. информация времени/даты файла - команда статистики

$ stat file1
  File: ‘file1’
  Size: 0           Blocks: 0          IO Block: 4096   regular empty file
Device: fd02h/64770d    Inode: 11403667    Links: 1
Access: (0664/-rw-rw-r--)  Uid: ( 1000/    saml)   Gid: ( 1000/    saml)
Context: unconfined_u:object_r:user_home_t:s0
Access: 2014-01-12 13:33:38.279456149 -0500
Modify: 2014-01-12 13:33:38.279456149 -0500
Change: 2014-01-12 13:33:38.279456149 -0500
 Birth: -

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

3. выборка из сенсорной страницы справочника

   -a     change only the access time
   -m     change only the modification time
   -t STAMP
          use [[CC]YY]MMDDhhmm[.ss] instead of current time

4. управление временем доступа

$ touch -a -t200001010000 file1

$ stat file1
  File: ‘file1’
  Size: 0           Blocks: 0          IO Block: 4096   regular empty file
Device: fd02h/64770d    Inode: 11403667    Links: 1
Access: (0664/-rw-rw-r--)  Uid: ( 1000/    saml)   Gid: ( 1000/    saml)
Context: unconfined_u:object_r:user_home_t:s0
Access: 2000-01-01 00:00:00.000000000 -0500
Modify: 2014-01-12 13:33:38.279456149 -0500
Change: 2014-01-12 13:38:52.023434696 -0500
 Birth: -

5. управляйте изменяют время

$ touch -m -t200001010000 file1

$ stat file1
  File: ‘file1’
  Size: 0           Blocks: 0          IO Block: 4096   regular empty file
Device: fd02h/64770d    Inode: 11403667    Links: 1
Access: (0664/-rw-rw-r--)  Uid: ( 1000/    saml)   Gid: ( 1000/    saml)
Context: unconfined_u:object_r:user_home_t:s0
Access: 2000-01-01 00:00:00.000000000 -0500
Modify: 2000-01-01 00:00:00.000000000 -0500
Change: 2014-01-12 13:39:31.060432026 -0500
 Birth: -

Вы могли бы задаваться вопросом во время изменения (ctime). С помощью это нельзя управлять touch. Это отслеживает время, любые из метаданных были затронуты файла. Дополнительную информацию см. в этом Вопросы и ответы U&L, названные: Что можно сделать в файл, не инициировав Метку времени "Изменения"?.

38
27.01.2020, 19:30
  • 1
    @sim: мой вопрос подразумевает, что я знаю, что касание для изменения меток времени. Я просто хотел знать, почему честный пользователь захочет это. Если бы не ctime часть Вашего ответа у меня был данный Вас-1. –  Quora Feans 12.01.2014, 21:46
  • 2
    @QuoraFea - мой ответ для Вашего преимущества и когда-либо пользователя, который когда-либо сталкивается с ним в будущем. Не предполагайте, что ответ просто ради Вас, и я сожалею, если я оскорбил Вас всегда, это не было мое намерение, я просто пытался объяснить основы как повременные работы. –  slm♦ 12.01.2014, 22:00
  • 3
    @sim: я не оскорблен, просто думал, что ответ не шел в правильном направлении. Так или иначе, спасибо за этот ответ. –  Quora Feans 12.01.2014, 22:36
  • 4
    @QuoraFea - Вам довольно рады, и спасибо за Ваш Q. Они ценятся! –  slm♦ 12.01.2014, 22:36
  • 5
    @Geek - пробует команды. Это - корректный вывод от ls -l в каталоге, где файлы имеют 0 размеров, и ничто иное еще не существует. Как только Вы даете один из размера файлов затем, общее количество разоблачит w/сумма блоков, используемых файлами. Посмотрите мои обновления, если Вы не уверены, я добавил пример. Uuencode –  slm♦ 13.01.2014, 19:12

Базовый системный вызов (utime) важно для различных утилит как tar смочь установить метки времени недавно скопированного (непросмоленного) файла. Некоторые утилиты резервного копирования могут также быть optioned для сброса последнего-accesstime из файлов, которые они скопировали.

Одно законное использование touch должен создать файл с конкретной меткой времени. Такой "ссылочный" файл может затем использоваться командами как find. Например, для нахождения всех файлов позже измененными, чем 1 ноября 2013 (т.е. 01.11.2013)"

touch -amt 201311010000 myref
find . -type f -newer myref -exec ls -ld {} +
39
27.01.2020, 19:30
  • 1
    Как вычислить это 201311010000 средства Nov1,2013? Существует ли утилита, которая скажет мне это? Другими словами, как я определяю вход для касания? –  Geek 13.01.2014, 18:26
  • 2
    @Geek Путем рассмотрения числа и отмечания, что первая часть, 20131101, может быть сломан на 2013-11-01, или 1 ноября 2013. Можно затем предположить что 0000 часть указывает на определенное время суток, в этом случае 00 часов, 00 минут. Или Вы могли просто посмотреть на страницу справочника для touch, который говорит Вам точно, что формат (см. -t). –  JAB 13.01.2014, 18:32
  • 3
    @Geek страницы справочника являются Вашим другом :-) –  JRFerguson 13.01.2014, 18:34

Одно использование должно исправить метку времени файла, который был неправильно установлен.

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

Обычно, это не то, что желаемо. Касание может "зафиксировать" это.

Другое использование должно отразить модификацию файла, которая была отменена путем восстановления метки времени файла к тому, чем это было перед "редактированием... редактирование отмены" операции.

7
27.01.2020, 19:30
  • 1
    Действительно. Время канавки я нашел alias cp='cp --preserve=timestamps' подходит больше для меня в … –  Runium 13.01.2014, 07:24

Теги

Похожие вопросы