Как выследить несколько файлов с помощью хвоста-0f в Linux/AIX

Я предполагаю, что Вы используете xscreensaver, который делает то же для меня.

Если это касается Вас, можно хотеть попробовать другую экранную утилиту блокировки, xlock пружины в ум, например.

xscreensaver имеет эту функцию меня на Ubuntu 12.10, 12.04 и на Fedora 17, всем выполнении lxde и awesome менеджер окон.

39
07.08.2014, 18:25
8 ответов

А как насчет:

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' .
36
27.01.2020, 19:35

Я предоставлю фрагмент кода с помощью 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, чтобы вы могли настроить его так, как вы хотите, чтобы оба экрана работали на вашем -терминале .

.
1
27.01.2020, 19:35

хвост несколько файлов расширяется хвостовой версией GNU. В AIX у вас нет хвоста GNU, поэтому вы не можете этого сделать. Вместо этого вы можете использовать multitail .

Вы можете установить multitail как в Linux, так и в AIX.

  • Для AIX вы можете загрузить пакет здесь .

  • В Linux multitail часто находится в репозитории, поэтому вы можете легко установить его с помощью диспетчера пакетов дистрибутива:

    • В Debian / Ubuntu: apt-get install multitail
    • В Centos / Fedora: yum install multitail
8
27.01.2020, 19:35

Следующая вещь отлично работает для вывода на стандартный вывод

tail -f file1 & tail -f file2

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

, поэтому я использовал

tail -f file1 file2 | process

@ Stéphane, ваш ответ идеален , но просто упомянул мой вариант использования, в котором есть небольшая изюминка.

6
27.01.2020, 19:35

В 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:: Крошечный просто работает с хэшем и не требует такой большой настройки или чтения человеко-страниц, как более сложные, так что это хорошо для простой задачи, как это.

-121--150200-

Следующие работы для меня на SunOS 5.10.

$ tail -f file1.log &
$ tail -f file2.log &
$ 

Оба хвоста будут работать в фоновом режиме. Изменения в файлах будут переданы в stdout. Кроме того, вы можете выполнить любую команду между, просто нажав enter.

0
27.01.2020, 19:35

В 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

, чтобы помочь вам распознать, какой вывод из какого журнала.

22
27.01.2020, 19:35

Используйте следующую строчку:

while true; do cat /path/to/numerous/folders/and/files/*/*.txt | grep "some filter" | tail -n 10; sleep 1; done

Каждую 1 секунду скрипт будет печатать 10 последних строк отфильтрованного потока.

Чтобы разорвать цикл, нажмите CtrlC .

0
27.01.2020, 19:35

Это работает для меня

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 <==
2
13.09.2020, 13:55

Теги

Похожие вопросы