J'ai essayé de tailler deux fichiers en utilisant l'option:
tail -0f file1.log -0f file2.log
Sous Linux, je vois une erreur "tail: ne peut traiter qu'un seul fichier à la fois".
Sous AIX, je vois l'erreur comme "Options non valides".
Cela fonctionne bien lorsque j'utilise:
tail -f file1 -f file 2
sous Linux mais pas sous AIX.
Je souhaite pouvoir découper plusieurs fichiers en utilisant -0f
ou -f
sous AIX/Linux
multitail
n'est reconnu dans aucun de ces systèmes d'exploitation.
Qu'en est-il de:
tail -f file1 & tail -f file2
Ou préfixez chaque ligne avec le nom du fichier:
tail -f file1 | sed 's/^/file1: /' &
tail -f file2 | sed 's/^/file2: /'
Pour suivre tous les fichiers dont le nom correspond à un modèle, vous pouvez implémenter le tail -f
(qui lit le fichier toutes les secondes en continu) avec un script zsh
comme:
#! /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
Ensuite, par exemple, pour suivre récursivement tous les fichiers texte du répertoire courant:
that-script '**/*.txt' .
tail
plusieurs fichiers sont étendus par GNU version tail. Avec AIX, vous n'avez pas GNU tail, donc vous ne pouvez pas faire Vous pouvez utiliser multitail
à la place.
Vous pouvez installer multitail sous Linux et AIX.
Avec AIX, vous pouvez télécharger le package ici .
Sous Linux, multitail
est souvent en dépôt, vous pouvez donc l'installer facilement en utilisant le gestionnaire de packages distro:
apt-get install multitail
yum install multitail
Sous OSX et Linux, utilisation
tail -f <file1> <file2>
fonctionne très bien pour moi. Une autre bonne chose est qu'il a la sortie suivante:
==> /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
pour vous aider à reconnaître quelle sortie provient de quel journal.
La chose suivante fonctionne bien pour sortir des choses sur std out
tail -f file1 & tail -f file2
Je voulais pipe
la sortie vers un autre processus. Dans le cas ci-dessus &
faisait la pièce avant de s'exécuter en arrière-plan et seule la deuxième partie était piped
à traiter
donc j'ai utilisé
tail -f file1 file2 | process
@ Stéphane ta réponse est parfaite, mais mentionne juste mon cas d'utilisation qui a un petit twist.
Je vais fournir un extrait de code en utilisant tmux
qui peut vous donner deux fenêtres différentes que vous pouvez utiliser pour suivre les deux fichiers simultanément:
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
MISE À JOUR: L'utilisation de screen
peut également attacher/détacher plusieurs sessions afin que vous puissiez également exécuter tail
plusieurs fois. Je peux suggérer de faire ceci:
screen -s Tail_Server1.log
Ensuite, vous souhaitez conserver CTRL+A+D
pour détacher sans tuer les sessions et ensuite:
screen -s Tail_Server2.log
Les deux exécuteront deux screens
séparés, je me réfère à screen --help
afin que vous puissiez l'ajuster selon la façon dont vous souhaitez que les deux écrans fonctionnent sur votre terminal
.
Utilisez la doublure suivante:
while true; do cat /path/to/numerous/folders/and/files/*/*.txt | grep "some filter" | tail -n 10; sleep 1; done
Toutes les 1 seconde, le script imprimera 10 dernières lignes du flux filtré.
Pour rompre la boucle, appuyez sur CtrlC.
Les travaux suivants pour moi sur SunOS 5.10.
$ tail -f file1.log &
$ tail -f file2.log &
$
Les deux queues s'exécuteront en arrière-plan. Les modifications apportées aux fichiers seront envoyées à stdout. De plus, vous pouvez exécuter n'importe quelle commande entre les deux simplement en appuyant sur Entrée.