Я знаю, что в Unix была команда, которую я мог использовать для отслеживания файла и просмотра изменений, которые в него записываются. Это было весьма полезно, особенно для проверки файлов журналов.
Вы знаете, как это называется?
Вы, вероятно, имели в виду хвост, согласно ответу Джона Скита.
Еще один полезный - смотреть; это позволяет вам периодически запускать команду и видеть вывод в полноэкранном режиме. Например:
watch -n 10 -d ls -l /var/adm/messages
Запустит команду ls -l /var/adm/messages
каждые 10 секунд и выделите разницу в выходе между последующими запусками. (Полезно, например, для наблюдения за тем, как быстро растет файл журнала).
inotifywait
из инструменты inotify полезно, если вы хотите запускать команду каждый раз при изменении файла (или любых файлов в каталоге). Например:
inotifywait -r -m -e modify /var/log |
while read path _ file; do
echo $path$file modified
done
Я предпочитаю использовать less +FG
1 над 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
опция, отключающая нумерацию строк. На странице руководства:
-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 за указание на это в комментариях.
Хвост великолепен ... также можно использовать меньше, начните меньше в файле, то есть меньше myfile, затем нажмите сдвиг+F. Это меньше действует как хвост.
Я редактирую файл 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"`
.
вы можете использовать хвост командовать его очень простой
tailf logfile.log
Вы также можете использовать inotifywatch / inotifywait, которые подключаются к подсистеме ядра inotify. Таким образом, вы также можете следить за такими вещами, как «открыть», «закрыть» или «получить доступ».
Но если вы просто хотите, чтобы строки добавлялись к стандартному выводу, я согласен с хвостом.
Tail - это стандартный, традиционный, доступный везде инструмент unix. Немного более сложный инструмент - многоцелевой который может отслеживать несколько файлов одновременно и выделять синтаксис.
Если я хочу иметь возможность искать по файлу в дополнение к его отслеживанию, я использую меньше с командой «F».
При использовании tail имейте в виду, что необходимы дополнительные аргументы, если файл может быть перенесен или заменен редактированием (режим по умолчанию для vim's: w).
tail -f заставит tail сохранять дескриптор файла и следовать за ним. Если файл заменен, дескриптор будет изменен. Преимущество следования файловому дескриптору заключается в том, что если файл будет переименован, вы все равно будете следовать ему.
tail --follow = заставит tail отслеживать указанный файл, периодически открывая его, чтобы видеть, был ли он заменен.
--retry - еще одна полезная опция, если вы хотите отслеживать файл журнала, но файл еще не создан.
tail -F - это сокращение для --follow = --retry.
Забудьте о tailf, вам нужна команда diff. Вот хороший трюк, чтобы наблюдать за различиями, которые происходят в реальном времени (или близко) между двумя файлами или одним файлом, в который выполняется запись.
Вы можете использовать эти методы для изменения поведения любым желаемым образом, например, для записи изменений в файл для записи. Поиграйте с интервалом просмотра или другими параметрами для команд ниже.
У вас есть 1 файл, и вы хотите посмотреть, как в него вносятся изменения:
Итак, вот что делать:
скопировать файл
cp file file2
напишите сценарий bash, чтобы найти различия, и обновите файл2
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
а также посмотреть на патч последних данных в файле.