Я знаю, что в Unix была команда, которую я мог бы использовать для мониторинга файла и просмотра изменений, которые в него записываются. Это было очень полезно, особенно для проверки файлов журнала.
Вы знаете, как это называется?
Я знаю, что в Unix была команда, которую я мог бы использовать для мониторинга файла и просмотра изменений, которые в него записываются. Это было очень полезно, особенно для проверки файлов журнала.
Вы знаете, как это называется?
Ответы:
tail -F
будет следовать именам файлов, а не объектам файла, что особенно полезно в случае ротации файла журнала.
tailf
сейчас устарело и tail -f
безопасно. (подтвердите это в вашей системе с помощью man tailf
.) См. документацию: man7.org/linux/man-pages/man1/tailf.1.html
Вы, вероятно, имели в виду хвост, согласно ответу Джона Скита.
Еще один полезный - часы ; это позволяет вам периодически запускать команду и видеть вывод на весь экран. Например:
смотреть -n 10 -d ls -l / var / adm / messages
Будет запускать команду ls -l /var/adm/messages
каждые 10 секунд и выделять разницу в выходных данных между последующими запусками. (Полезно для просмотра, например, как быстро растет файл журнала).
inotifywait
из inotify-tools полезен, если вы хотите запускать команду каждый раз, когда файл (или любые файлы в каталоге) изменяются. Например:
inotifywait -r -m -e modify /var/log |
while read path _ file; do
echo $path$file modified
done
path
которое не лучший выбор для имени переменной. На zsh
, кажется , что окружающая среда вары не чувствительны к регистру. Для меня установка также path
приводит PATH
к установке, и это в основном означает, что ничего не будет выполняться, пока вы не исправите это. Вкл bash
, настройка path
не влияет на PATH
.
Я предпочитаю использовать less +FG
1 над , tail -f
потому что я считаю себя необходимости искать файл журнала для конкретной ошибки или ID. Если мне нужно что-то искать, я печатаю, ^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
опцию, которая отключает нумерацию строк. Из справочной страницы:
-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 за указание на это в комментариях.
alias
желаемые параметры, чтобы вам не приходилось вводить их каждый раз.
Я редактирую файл 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"`
.
NEW=`tree -sDct . -I 'ignore_pattern|another_pattern'`
вы можете использовать команду tailf, это очень просто
tailf logfile.log
Вы также можете использовать inotifywatch / inotifywait, который подключается к подсистеме inotify ядра. Таким образом, вы также можете наблюдать за такими вещами, как «открыть», «закрыть» или «доступ».
Но если вы просто хотите добавить дополнительные строки к stdout, я согласен с хвостом.
Хвост - это стандартный, традиционный, доступный везде инструмент unix. Немного более сложный инструмент - это мультитейл, который может контролировать несколько файлов одновременно и делает подсветку синтаксиса.
Если я хочу иметь возможность искать вокруг файла в дополнение к простому отслеживанию, я использую меньше с командой «F».
При использовании tail, имейте в виду, что необходимы дополнительные аргументы, если файл может быть перевернут или заменен на edit (режим по умолчанию для vim: w).
tail -f заставит tail хранить файловый дескриптор и следовать ему. Если файл будет заменен, дескриптор будет изменен. Преимущество использования дескриптора файла заключается в том, что если файл переименован, вы все равно будете следовать за ним.
tail --follow = заставит tail отслеживать именованный файл, периодически открывая его, чтобы увидеть, был ли он заменен.
--retry - еще одна полезная опция, если вы хотите подключить файл журнала, но файл еще не создан.
tail -F - это сокращение для --follow = --retry.
Забудьте tailf, diff - это команда, которую вы хотите. Вот хороший трюк, чтобы увидеть различия, как они происходят в режиме реального времени (или близко) между 2 файлами или в одном файле, в который производится запись.
Вы можете использовать эти методы, чтобы изменить поведение любым способом, таким как запись изменений в файл для ведения записи. Поиграйте с интервалом часов или другими параметрами для приведенных ниже команд.
У вас есть 1 файл, и вы хотите посмотреть, как в него вносятся изменения:
Итак, что делать:
cp file file2
touch check-differences.sh
nano check-differences.sh
chmod 755 check-differences.sh
#!/bin/bash
diff file file2
cp file file2
watch ./check-differences
это будет обновляться каждые 2 секунды по умолчанию. Поэтому, если вам нужно вернуться и прочитать их, запишите вывод diff в файл скрипта.
или используйте cron для регулярного запуска скрипта, если вам не нужно видеть вывод.
Продолжая tail -f somefile.txt
прокручивать новые данные, я иногда предпочитаю less +G somefile.txt
также посмотреть патч последних данных в файле.