Linux / AIX'te tail -0f kullanarak birden fazla dosya nasıl kullanılır


39

Bu seçeneği kullanarak iki dosya yollamayı denedim:

tail -0f file1.log -0f file2.log

Linux'ta bir hata görüyorum "tail: aynı anda sadece bir dosyayı işleyebilir".

AIX'te hatayı "Geçersiz seçenekler" olarak görüyorum.

Kullandığımda bu iyi çalışıyor:

tail -f file1 -f file 2

Linux'ta ama AIX'de değil.

AIX / Linux kullanarak -0fya da kullanarak birden fazla dosyayı -fsıraya koymak istiyorum

multitail bu işletim sistemlerinden hiçbirinde tanınmıyor.


screenİki farklı oturum oluşturmak için kullanmaya çalıştınız mı ? Her iki ekranda kuyruk kullanabilmeli misiniz? Ayrıca tmuxişi kurduğunuzda da yapabilirsiniz.
ryekayo

Yanıtlar:


36

Ne dersin:

tail -f file1 & tail -f file2

Veya her satırın önüne dosya adı yazıyor:

tail -f file1 | sed 's/^/file1: /' &
tail -f file2 | sed 's/^/file2: /'

Adı bir kalıpla eşleşen tüm dosyaları takip etmek için, tail -f(her saniyede bir dosyadan sürekli okuyan) aşağıdaki zshgibi bir betiği uygulayabilirsiniz :

#! /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

Ardından, örneğin geçerli dizindeki tüm metin dosyalarını tekrarlı bir şekilde takip etmek için:

that-script '**/*.txt' .

1
sedyolu tercih etmek için herhangi bir sebep var &mı?
gilad mayani

@giladmayani Sadece bununla deneyimliyorum, ancak bulduğum yoldaki sorun, onu bir komut dosyasına sarmanız durumunda bırakmayan hayalet işlemlere sahip olmanızdır.
Matthieu Cormier

8

tailBirden fazla dosya GNU kuyruk sürümüyle genişletilir. AIX ile GNU kuyruğunuz yok, bu yüzden yapamazsınız. Bunun multitailyerine kullanabilirsiniz .

Sen yükleyebilir multitail Linux ve AIX hem de.

  • AIX ile paketi buradan indirebilirsiniz .

  • Linux'ta multitailsık sık repo olduğundan, dağıtım paket yöneticisini kullanarak kolayca yükleyebilirsiniz:

    • Debian / Ubuntu'da: apt-get install multitail
    • Centos / Fedora'da: yum install multitail

1
Multitail güzel çalışır ve sözdizimi basittir:multitail -i path/to/file1 -i path/to/file2
Housemd

6

Aşağıdaki şey std çıkışında çıktı almak için iyi çalışır

tail -f file1 & tail -f file2

pipeÇıktının başka bir sürece geçmesini istedim . Yukarıdaki durumda &parçayı arka planda çalışmadan önce yapıyordu ve sadece ikinci kısmı işleniyordu piped.

bu yüzden kullandım

tail -f file1 file2 | process

@ Stéphane cevabınız mükemmel, ama sadece biraz büküm olan kullanım davamdan bahsediyorum.


Mesele şu ki tail -f file1 file2, kuyruğun sadece bir dosya adını kabul ettiği AIX'te çalışmaz. Her (tail -f file1 & tail -f file2) | processiki tails'nin stdout'unu boruya yönlendirmek için yapabilirsiniz process.
Stéphane Chazelas

5

OSX ve Linux'ta, kullanma

tail -f <file1> <file2>

benim için harika çalışıyor. Bir başka güzel şey, aşağıdaki çıktıya sahip olmasıdır:

==> /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

Hangi çıkışın hangi günlükten olduğunu tanımlamanıza yardımcı olmak için.


1
qbaşlıkları bastırmak için ekle
Karl Pokus

1

Her tmuxiki dosyayı aynı anda sıralamak için kullanabileceğiniz iki farklı pencere verebilecek bir kod pasajı kullanacağım:

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

GÜNCELLEME: screenBirden fazla oturumu çalıştırabilmeniz için tailbirden fazla oturumu ekleyebilir / çıkarabilirsiniz . Bunu yapmayı önerebilirim:

screen -s Tail_Server1.log

Daha CTRL+A+Dsonra oturumları öldürmeden saptamak için beklemeye devam edersiniz ve sonra sırayla:

screen -s Tail_Server2.log

Her ikisi de iki ayrı çalışacak screens, ben screen --helpde her iki ekranın da üzerinde çalışmasını istediğiniz şekilde ayarlayabilmeniz için başvuracağım terminal.


@WebNash :) tadını çıkarın
ryekayo

@WebNash cevabım sorduğun şey için işe yaradı mı?
ryekayo

0

SunOS 5.10'da benim için çalışmaları takip ediyor.

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

Her iki kuyruk da arka planda çalışır. Dosyalarda yapılan değişiklikler stdout'a atılacak. Dahası, sadece enter tuşuna basarak aralarındaki herhangi bir komutu çalıştırabilirsiniz.


... fakat bu, STDOUT'u öldürmeniz ve ön plan çıktısı ile karıştırmanız gereken iki işlem yaratır.
17'de

0

Aşağıdaki oneliner'ı kullanın:

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

Her 1 saniyede, komut dosyası, filtrelenen akışın son 10 satırını yazdırır.

Döngüyü kırmak için, tuşuna basın CtrlC.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.