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


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

Вы знаете, как это называется?


136
2018-04-30 21:00


Источник




Ответы:


Ты имеешь ввиду

tail -f logfile.log

?

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


184
2018-04-30 21:01



Да, это в реальном времени. - Adam Gibbins
Sidenote: Если в вашем дистрибутиве предусмотрена команда tailf, используйте это в предпочтении tail -f. tailf более эффективен, потому что ему не нужно получать доступ к просмотренному файлу, если он не записывается (запросы опроса раздражают, если вы установили файловую систему с обновлением атима). - Mihai Limbăşan
В суперпользователь Я нашел ответ рекомендуя хвост -F вместо -f , слишком - Rafa
tail -F будет следовать именам файлов, а не файловым объектам, что особенно полезно в случае поворота файла журнала. - Amir Ali Akbari
Обновление через несколько лет: tailf теперь устарела и tail -f безопасно. (подтвердите это в своей системе с помощью man tailf.) См. Документацию: man7.org/linux/man-pages/man1/tailf.1.html - exp1orer


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

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

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

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


113
2018-04-30 21:07





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

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

+cmd   Causes  the  specified  cmd  to be executed each time a new file is
       examined.  For example, +G causes less to  initially  display  each
       file starting at the end rather than the beginning.

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

-n or --line-numbers
          Suppresses line numbers.  The default (to use line numbers)  may
          cause  less  to run more slowly in some cases, especially with a
          very large input file.  Suppressing line  numbers  with  the  -n
          option  will  avoid this problem.  Using line numbers means: the
          line number will be displayed in the verbose prompt and in the =
          command,  and the v command will pass the current line number to
          the editor (see also  the  discussion  of  LESSEDIT  in  PROMPTS
          below).

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


33
2018-04-30 23:44



Не забудьте установить alias с вашими желаемыми параметрами, поэтому вам не нужно вводить их каждый раз. - Michael Hampton♦
На самом деле, вы обычно предпочитаете функции оболочки над псевдонимами в большинстве случаев. - tripleee


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

inotifywait -r -m -e modify /var/log | 
   while read path _ file; do 
       echo $path$file modified
   done

22
2018-06-02 12:13





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


19
2018-04-30 21:04



less + F myfile сделает это слишком - rgmarcha


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

#!/bin/bash
FILE="$1"
CMD="$2"
LAST=`ls -l "$FILE"`
while true; do
  sleep 1
  NEW=`ls -l "$FILE"`
  if [ "$NEW" != "$LAST" ]; then
    "$CMD" "$FILE"
    LAST="$NEW"
  fi
done

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

./watch.sh file.tex pdflatex

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


12
2017-10-10 09:32



смотреть каталоги и их содержимое вместо одного файла: NEW=`tree -sDct . -I 'ignore_pattern|another_pattern'` - Andy


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

tailf logfile.log

7
2017-10-15 13:26





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

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


5
2018-04-30 22:40





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


2
2018-04-30 22:58





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

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

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

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

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

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


2
2018-05-27 15:47