Существуют довольно многие:
Vimprobable - WebKit и подобные Энергии привязки клавиш. Существует двух версий.
dwb - веб-браузер мозаичного размещения разрабатывается пользователем Linux Дуги (снова, WebKit)
Conkeror - если Вы предпочитаете привязку Emacs
Перемещение - другой кормит грудью продукт...
xombrero - "минималистский веб-браузер со сложными разработанными средствами защиты - в" (от связанной страницы Wiki)
Можно выследить несколько файлов с … мультихвостом.
multitail -Q 1 'directory/*'
-Q 1 PATTERN
средства проверить на новое содержание в существующих или новых файлах, соответствующих, КОПИРУЮТ каждую 1 секунду. Строки из всех файлов показывают в том же окне, используют -q
вместо -Q
иметь отдельные окна.
Никакая идея о решении для оболочки, но (принятие Linux1
) inotify
мог быть способ пойти... посмотрите, что этот пример подражает tail -F
(использование pyinotify
), возможно, это может использоваться в качестве основания для следующего весь каталог.
В целом, inotify
может контролировать каталоги (цитирование man 7 inotify
)
Следующие биты могут быть указаны в маске при вызове inotify_add_watch (2) и могут быть возвращены в поле маски, возвращенном чтением (2):
IN_ACCESS File was accessed (read) (*). IN_ATTRIB Metadata changed, e.g., permissions, timestamps, extended attributes, link count (since Linux 2.6.25), UID, GID, etc. (*). IN_CLOSE_WRITE File opened for writing was closed (*). IN_CLOSE_NOWRITE File not opened for writing was closed (*). IN_CREATE File/directory created in watched directory (*). IN_DELETE File/directory deleted from watched directory (*). IN_DELETE_SELF Watched file/directory was itself deleted. IN_MODIFY File was modified (*). IN_MOVE_SELF Watched file/directory was itself moved. IN_MOVED_FROM File moved out of watched directory (*). IN_MOVED_TO File moved into watched directory (*). IN_OPEN File was opened (*).
При контроле каталога события, отмеченные со звездочкой (*) выше, могут иметь место для файлов в каталоге, в этом случае поле имени в возвращенной inotify_event структуре определяет название файла в рамках каталога.
(... и pyinotify
тесно следует за опциями тезисов),
1
: BSDs имеют подобную вещь, kqueue
. Возможно, межплатформенным решением является достижимое использование GIO (привязка Python) как уровень абстракции, так как это может, около inotify
, также используйте kqueue
xtail
также альтернатива. Его страница справочника описывает это как:
Xtail контролирует один или несколько файлов и отображает все данные, записанные в файл начиная с вызова команды. Это очень полезно для контроля нескольких файлов журнала одновременно. Если запись, данная на командной строке, будет каталогом, то все файлы в том каталоге будут контролироваться, включая созданных после xtail вызова. Если запись, данная на командной строке, не будет существовать, то xtail будет наблюдать за нею и контролировать, это когда-то создало. При переключении файлов в дисплей печатается баннер, показывающий путь файла.
Символ прерывания (обычно CTRL/C или DEL) отобразит список последний раз измененных наблюдаемых файлов. Отправьте сигнал выхода (обычно CTRL/backslash) для остановки xtail.
Я написал быстрое письмо, которое удовлетворяет потребность.
#!/bin/bash
LOG_PATTERN=$1
BASE_DIR=$(dirname $LOG_PATTERN* | head -1)
run_thread (){
echo Running thread
tail -F $LOG_PATTERN* &
THREAD_PID=$!
}
# When someone decides to stop the script - killall children
cleanup () {
pgrep -P $$ | xargs -i kill {}
exit
}
trap cleanup SIGHUP SIGINT SIGTERM
if [ $# -ne 1 ]; then
echo "usage: $0 <directory/pattern without * in the end>"
exit 1
fi
# Wait for the directory to be created
if [ ! -d $BASE_DIR ] ; then
echo DIR $BASE_DIR does not exist, waiting for it...
while [ ! -d $BASE_DIR ] ; do
sleep 2
done
echo DIR $BASE_DIR is now online
fi
# count current number of files
OLD_NUM_OF_FILES=$(ls -l $LOG_PATTERN* 2>/dev/null | wc -l)
# Start Tailing
run_thread
while [ 1 ]; do
# If files are added - retail
NUM_FILES=$(ls -l $LOG_PATTERN* 2>/dev/null | wc -l)
if [ $NUM_FILES -ne $OLD_NUM_OF_FILES ]; then
OLD_NUM_OF_FILES=$NUM_FILES
kill $THREAD_PID
run_thread
fi
sleep 1
done
Также вы можете просматривать каталог с помощьюwatch
watch -n0,1 "ls -lrt /directory/ | tail"
Это работает рекурсивно.
Он используетinotify
(apt-get install inotify-utils
в Debian )и просто перезапускает команды tail
при обнаружении новых файлов/каталогов.
#!/bin/bash
logDir=/var/log/
while true; do
( find "$logDir" -type f -print0 | xargs -0 tail --verbose --follow --lines=0 )&
tailPid=$!
inotifywait --recursive --quiet --event create --format=%w%f "$logDir" | tr \\n \\0 | xargs -0 tail --verbose
kill $tailPid
done
Мой вариант использования заключался в перенаправлении всех журналов в /dev/stderr
внутри контейнера докера, чтобы они отображались в docker-compose logs -f
.
Вот сценарий bash, который также использует inotifywait
. Он следит за любым новым или измененным файлом и запускает tail --verbose -n {NN}
для этого файла, который печатает имя файла и последние NN
строки.
#!/usr/bin/bash
NLINES=75
function usage() {
echo "Usage: $0 {folder} [#lines]
Monitor {folder} and execute 'tail -n [#lines]'
for any new or modified files.
Default [#lines] is $NLINES.
"
exit 1
}
[[ ! -z $1 ]] || usage
[[ -d $1 ]] || {
echo "ERROR: $1 is not a a folder."
usage
}
[[ -z $2 ]] || {
[[ $2 =~ ^[0-9]+$ ]] && NLINES=$2 || {
echo "ERROR: [#lines] must be an integer"
usage
}
}
inotifywait -m -e modify -e create --format=%w%f $1 | xargs -d '\n' -n 1 tail --verbose -n $NLINES