Команда Shell для мониторинга изменений в файле - что это называется снова?

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

Знаете ли вы, что это называется?

135 голосов | спросил Sebastian Hoitz 1 Mayam09 2009, 01:00:33

12 ответов


182

Вы имеете в виду

  tail -f logfile.log
 

?

( Человеческая страница для хвоста )

ответил Jon Skeet 1 Mayam09 2009, 01:01:20
113

Вероятно, вы имели в виду хвост, как и ответ Джона Скита.

Другим полезным является смотреть ; он позволяет вам периодически запускать команду и видеть полный экран вывода. Например:

watch -n 10 -d ls -l /var /adm /messages

Запустит команду ls -l /var /adm /messages каждые 10 секунд и выделит разницу в выходе между последующими запусками. (Полезно для просмотра того, как быстро растет файл журнала).

ответил Murali Suriar 1 Mayam09 2009, 01:07:31
33

Я предпочитаю использовать less + FG 1 над tail -f , потому что мне нужно найти файл журнала для определенной ошибки или Я БЫ. Если мне нужно что-то искать, я набираю ^ C , чтобы прекратить следовать за файлом и ? , чтобы начать поиск назад.

Связывание клавиш почти такое же, как в vi . Любая команда может быть инициализирована при запуске с помощью опции + :

  + cmd Заставляет заданный cmd выполняться каждый раз, когда новый файл
       рассмотрены. Например, + G вызывает меньше первоначального отображения каждого
       начиная с конца, а не с начала.
 

Для очень длинных журналов я считаю удобным использовать опцию -n , которая отключает нумерацию строк. С manpage:

  -n или -line-numbers
          Подавляет номера строк. Значение по умолчанию (для использования номеров строк) может
          в некоторых случаях меньше работать медленнее, особенно с
          очень большой входной файл. Подавление номеров строк с -n
          вариант позволит избежать этой проблемы. Использование номеров строк означает:
          номер строки будет отображаться в подробном приглашении и в поле =
          команда, а команда v будет передавать текущий номер строки
          редактор (см. также обсуждение LESSEDIT в PROMPTS
          ниже).
 

<суб> 1. Хат-кончик rgmarcha для указания этого в комментариях.

ответил Jon Ericson 1 Mayam09 2009, 03:44:40
22

inotifywait из inotify-tools полезен, если вы хотите запускать команду каждый раз, когда изменяется файл (или любые файлы в каталоге). Например:

  inotifywait -r -m -e изменить /var /log |
   при чтении пути _ file; делать
       echo $ path $ файл изменен
   сделанный
 
ответил richvdh 2 J0000006Europe/Moscow 2016, 15:13:29
19

Хвост велик ... less также можно использовать для начала меньше в файле, то есть меньше myfile, а затем нажмите F. Это меньше действует как хвост.

ответил trent 1 Mayam09 2009, 01:04:05
12

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

  #! /Bin /Баш
FILE = "$ 1"
CMD = "$ 2"
LAST = `ls -l" $ FILE "`
хотя это правда; делать
  спать 1
  NEW = `ls -l" $ FILE "`
  if ["$ NEW"! = "$ LAST"]; тогда
    "$ CMD" "$ FILE"
    LAST = "$ NEW"
  фи
сделанный
 

Сохраните его как watch.sh и выполните chmod u + x watch.sh . Затем я выполняю его следующим образом:

./watch.sh file.tex pdflatex

Если вы хотите, чтобы команда выполнялась только в случае фактической модификации, вы можете использовать `md5sum" $ FILE "` вместо `ls -l" $ FILE "` .

ответил oliphaunt 10 +04002012-10-10T13:32:11+04:00312012bEurope/MoscowWed, 10 Oct 2012 13:32:11 +0400 2012, 13:32:11
7

вы можете использовать команду tailf для самой простой

  tailf logfile.log
 
ответил reegan vijay 15 +04002012-10-15T17:26:08+04:00312012bEurope/MoscowMon, 15 Oct 2012 17:26:08 +0400 2012, 17:26:08
5

Вы также можете использовать inotifywatch /inotifywait, который подключается к подсистеме inotify ядра. Таким образом, вы также можете смотреть такие вещи, как «открыть», «закрыть» или «получить доступ».

Но если вы просто хотите получить добавленные строки в stdout, я соглашусь на хвост.

ответил Martin 1 Mayam09 2009, 02:40:36
2

Хвост - стандартный, традиционный, доступный везде инструмент unix. Немного более сложный инструмент multitail , который может контролировать несколько файлов одновременно и выделять синтаксис.

ответил hlovdal 1 Mayam09 2009, 02:58:55
2

Если я хочу иметь возможность искать по всему файлу в дополнение к простому его хвосту, я использую меньше с командой «F».

При использовании хвоста имейте в виду, что необходимы дополнительные аргументы, если файл может перескакивать или заменяться редактированием (режим по умолчанию для vim's: w).

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

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

- повторная попытка - это еще один полезный вариант, если вы хотите связать файл журнала, но файл еще не создан.

tail -F - это ярлык для -follow = -retry.

ответил deinspanjer 27 Maypm09 2009, 19:47:45
0

В то время как tail -f somefile.txt сохраняет прокрутку с новыми данными, я иногда предпочитаю less + G somefile.txt , а также смотреть на патче последних данных в файле.

ответил phantomastray 25 52016vEurope/Moscow11bEurope/MoscowFri, 25 Nov 2016 23:51:04 +0300 2016, 23:51:04
0

Забудьте tailf, diff - это команда, которую вы хотите. Вот хороший трюк, чтобы наблюдать за различиями, как они происходят в реальном времени (или закрываются) между 2 файлами или в одном файле, на который записывается.

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

У вас есть 1 файл, и вы хотите посмотреть, как его вносят изменения:

Итак, что делать:

  1. скопировать файл

cp file file2

  1. напишите сценарий bash, чтобы найти различия, и обновите файл2

touch check-differences.sh

nano check-differences.sh

chmod 755 check-differences.sh

  1. Вот основная идея для скрипта. Сделайте запись в файл, если хотите

#! /Bin /баш

файл файла diff2

cp file file2

  1. Затем вы можете либо наблюдать различия на экране, используя часы

смотреть ./check-differences

это будет обновляться каждые 2 секунды по умолчанию. Поэтому, если вам нужно вернуться и прочитать их, напишите вывод diff в файл в скрипте.

или используйте cron для регулярного запуска вашего скрипта, если вам не нужно видеть вывод.

ответил Mezmer 26 MarpmMon, 26 Mar 2018 21:21:13 +03002018-03-26T21:21:13+03:0009 2018, 21:21:13

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

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132