Назад | Перейти на главную страницу

Как отслеживать изменения в нескольких файлах в Linux?

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

Любая помощь приветствуется.

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

Легкий: посмотрите в inotify

Более приспособленный (демон): fam (Монитор изменения файлов)

Или, если это не обычное дело, вы будете делать:

Или на разовое: watch -d -n 1 ls -t в каталоге, который вы хотите просмотреть (только в плоском каталоге, не рекурсивном, но вы можете изменить его для этого) - затем запустите tail для результата.

Есть много способов снять шкуру с этой кошки ... например ...

вы можете агрегировать журналы, используя logstash

если бы все они находились в одной папке, вы могли бы создать репозиторий git для отслеживания изменений ...

$ touch ~/test
$ git init
$ git add .
$ echo "##this is a comment" >> ~/test
$ git status | grep modified
=># modified:   test

вы можете настроить контролировать смотреть контрольную сумму файлов,

check file /home/myhome/somefile.txt
    if changed checksum then alert

check file /home/myhome/somefile2.txt
    if changed checksum then alert

и, возможно, это может сработать ...

check directory /home/myhome/
    if changed checksum then alert

или более легкое использование инструменты inotify следить за изменениями;

inotifywait -m -r --format '%f' -e modify -e move -e create -e delete ~/test | while read line
do
    echo "hello $line"
done

Если вы хотите сделать это из командной строки, вы можете использовать такой сценарий, чтобы сделать это

# When this exits, exit all back ground process also.
trap 'kill $(jobs -p)' EXIT

# iterate through the each given file names,
for file in "$@"
do
# show tails of each in background.
tail -f $file &
done

# wait .. until CTRL+C
wait

Сохраните этот файл как multitail.sh или как хотите, затем выполните вот так

./multitail.sh file.txt file1.txt file2.txt file3.txt file4.txt file5.txt Я только что запустил это, и он успешно запустил 6 файлов, нижняя сторона - это только сообщает вам, какой текст был изменен, а не имя файла текстового файла / файла журнала. Я использовал это в прошлом. Для получения дополнительной информации и т. Д. Смотрите здесь http://www.thegeekstuff.com/2009/09/multitail-to-view-tail-f-output-of-multiple-log-files-in-one-terminal/ этот человек сделал отличную запись, надеюсь, это поможет

Будь проще. tail -f

например:

tail -f file1 file2 file3 file4 file5

Если вы действительно хотите увидеть, какой файл был изменен, просто укажите их с правильной опцией сортировки: ls -alt file1 file2 file3

При этом вверху отобразится самый последний измененный файл.

Вы даже можете использовать динамический дисплей: watch -n 1 ls -alt file1 file2 file3