Я предполагаю, что Вы используете xscreensaver
, который делает то же для меня.
Если это касается Вас, можно хотеть попробовать другую экранную утилиту блокировки, xlock
пружины в ум, например.
xscreensaver
имеет эту функцию меня на Ubuntu 12.10, 12.04 и на Fedora 17, всем выполнении lxde
и awesome
менеджер окон.
А как насчет:
tail -f file1 & tail -f file2
или префиксации каждой строки с именем файла:
tail -f file1 | sed 's/^/file1: /' &
tail -f file2 | sed 's/^/file2: /'
Чтобы следовать за всеми файлами, имя которых совпадает с шаблоном, можно реализовать скрипт tail -f
(который читает из файла каждую секунду непрерывно) с помощью скрипта zsh
типа:
#! /bin/zsh -
zmodload zsh/stat
zmodload zsh/zselect
zmodload zsh/system
set -o extendedglob
typeset -A tracked
typeset -F SECONDS=0
pattern=${1?}; shift
drain() {
while sysread -s 65536 -i $1 -o 1; do
continue
done
}
for ((t = 1; ; t++)); do
typeset -A still_there
still_there=()
for file in $^@/$~pattern(#q-.NoN); do
stat -H stat -- $file || continue
inode=$stat[device]:$stat[inode]
if
(($+tracked[$inode])) ||
{ exec {fd}< $file && tracked[$inode]=$fd; }
then
still_there[$inode]=
fi
done
for inode fd in ${(kv)tracked}; do
drain $fd
if ! (($+still_there[$inode])); then
exec {fd}<&-
unset "tracked[$inode]"
fi
done
((t <= SECONDS)) || zselect -t $((((t - SECONDS) * 100) | 0))
done
Затем, например, рекурсивно следовать за всеми текстовыми файлами в текущей директории:
that-script '**/*.txt' .
Я предоставлю фрагмент кода с помощью tmux
, который может дать вам два разных окна, которые вы можете использовать для хвоста обоих файлов одновременно:
tmux new-window -a -n Tail
tmux new-session -d -s Tail -n SSH0 -d
tmux selectp -t Tail
#This is tmux interactions with the user (colors of the tabs used, hot keys, etc.)
tmux bind-key -n M-Left previous-window -t WinSplit
tmux bind-key -n M-Right next-window -t WinSplit
tmux set-window-option -g monitor-activity on
tmux set -g visual-activity on
tmux set-window-option -g window-status-current-bg blue
tmux set-window-option -g window-status-fg red
tmux set -g pane-border-fg yellow
tmux set -g pane-active-border-bg red
tmux set -g message-fg yellow
tmux set -g message-bg red
tmux set -g message-attr bright
tmux set -g status-left "#[fg=red]#S"
#Names two seperate windows
tmux new-window -n tail1 -t Tail
tmux new-window -n tail2 -t Tail
#Now this will allow you to automatically run tail when this tmux script is run
tmux send-keys -t Tail:0 'tail -f file1.log' C-m
tmux send-keys -t Tail:1 'tail -f file2.log' C-m
UPDATE: Использование screen
также может прикрепить/открепить несколько сеансов, так что вы можете запустить tail
также несколько раз. Могу предложить следующее:
экран -s Tail_Server1. log
Далее вы захотите удерживать CTRL+A+D
, чтобы отсоединить, не убивая сеансы, а затем:
screen -s Tail_Server2.log
Оба запускают два отдельных экрана -
, я бы обратился к экрану -help
, чтобы вы могли настроить его так, как вы хотите, чтобы оба экрана работали на вашем -терминале
.
хвост
несколько файлов расширяется хвостовой версией GNU. В AIX у вас нет хвоста GNU, поэтому вы не можете этого сделать. Вместо этого вы можете использовать multitail
.
Вы можете установить multitail как в Linux, так и в AIX.
Для AIX вы можете загрузить пакет здесь .
В Linux multitail
часто находится в репозитории, поэтому вы можете легко установить его с помощью диспетчера пакетов дистрибутива:
apt-get install multitail
yum install multitail
Следующая вещь отлично работает для вывода на стандартный вывод
tail -f file1 & tail -f file2
. Я хотел передать
вывод по конвейеру другому процессу. В приведенном выше случае и
создавали деталь до того, как она запускалась в фоновом режиме, и только вторая часть была передана по конвейеру
для обработки
, поэтому я использовал
tail -f file1 file2 | process
@ Stéphane, ваш ответ идеален , но просто упомянул мой вариант использования, в котором есть небольшая изюминка.
В bash
можно обойти псевдоним, добавив к команде \
, поэтому
rm filename
становится
\rm filename
-121--46312- Вот версия perl, в которой используется чрезвычайно простой модуль Config:: Tiny
.
#! /usr/bin/perl
use Config::Tiny;
use strict;
my $cfg = Config::Tiny->read( './backup.ini' );
# create a hash containing changes to [backup]
my %B = ('data_backup_parameter_file' => '/usr/sap/SI1/SYS/global/hdb/opt/hdbconfig/param',
'log_backup_parameter_file' => '/usr/sap/SI1/SYS/global/hdb/opt/hdbconfig/param',
'log_backup_using_backint' => 'true',
);
# loop through the hash and add them to the .ini stored in $cfg
foreach my $b (keys %B) {
$cfg->{'backup'}->{$b} = $B{$b};
};
# create a hash containing changes to [persistence]
my %P = ('basepath_logbackup' => '/usr/sap/SI2/HDB02/backup/log',
'basepath_databackup' => '/usr/sap/SI2/HDB02/backup/data',
'enable_auto_log_backup' => 'yes',
);
# loop through the hash and add them to the .ini stored in $cfg
foreach my $p (keys %P) {
$cfg->{'persistence'}->{$p} = $P{$p};
};
$cfg->write( 'new.ini' );
Config:: Tiny
упакован для Debian (и производных), Fedora, Centos, OpenSuSE и других distros, поэтому легко устанавливается с помощью соответствующих средств управления пакетами. В других системах установите с CPAN.
Существует множество других модулей perl для работы с файлами .ini, некоторые - с дополнительными функциями, другие - с более объектно-ориентированным подходом. Config:: Крошечный
просто работает с хэшем и не требует такой большой настройки или чтения человеко-страниц, как более сложные, так что это хорошо для простой задачи, как это.
Следующие работы для меня на SunOS 5.10.
$ tail -f file1.log &
$ tail -f file2.log &
$
Оба хвоста будут работать в фоновом режиме. Изменения в файлах будут переданы в stdout. Кроме того, вы можете выполнить любую команду между, просто нажав enter.
В OSX и Linux с помощью
tail -f <file1> <file2>
отлично работает для меня. Еще одна приятная вещь заключается в том, что он имеет следующий вывод:
==> /srv/www/my-app/shared/log/nginx.access.log <==
things from log 1
==> /srv/www/my-app/shared/log/nginx.error.log <==
things from log 2
==> /srv/www/my-app/shared/log/nginx.access.log <==
new things from log 1
, чтобы помочь вам распознать, какой вывод из какого журнала.
Используйте следующую строчку:
while true; do cat /path/to/numerous/folders/and/files/*/*.txt | grep "some filter" | tail -n 10; sleep 1; done
Каждую 1 секунду скрипт будет печатать 10 последних строк отфильтрованного потока.
Чтобы разорвать цикл, нажмите CtrlC .
Это работает для меня
tail -f *.log
Образец вывода:
==> update1.log <==
INFO:root:Percentage: 23.0769230769
INFO:root:Percentage: 30.7692307692
INFO:root:Percentage: 38.4615384615
INFO:root:Percentage: 46.1538461538
INFO:root:Percentage: 53.8461538462
INFO:root:Percentage: 61.5384615385
INFO:root:Percentage: 69.2307692308
INFO:root:Percentage: 76.9230769231
INFO:root:Percentage: 84.6153846154
INFO:root:Percentage: 92.3076923077
==> update2.log <==
INFO:root:Percentage: 9.67741935484
INFO:root:Percentage: 12.9032258065
INFO:root:Percentage: 16.1290322581
INFO:root:Percentage: 19.3548387097
INFO:root:Percentage: 22.5806451613
INFO:root:Percentage: 25.8064516129
INFO:root:Percentage: 29.0322580645
INFO:root:Percentage: 32.2580645161
INFO:root:Percentage: 35.4838709677
INFO:root:Percentage: 38.7096774194
==> update3.log <==