さまざまなログを見ています。
tail -q -f /var/log/syslog -f /var/log/fail2ban.log -f /var/log/nginx/error.log
各ログの出力を異なる色にするにはどうすればよいですか?
答え1
GNUを使用したgrep
シェーディング:
color() { GREP_COLOR=$1 grep --color '.*'; }
(tail -qf /var/log/syslog | color 31 &
tail -qf /var/log/fail2ban.log | color 32 &
tail -qf /var/log/nginx/error.log | color 33)
最初の2つはバックグラウンドで実行されます。つまり、SIGINT を押すとCtrl-C(シェルは非同期ジョブの SIGINT を明示的に無視します)、そのジョブは終了しません。
これを防ぐには、次のようにします。
color() { GREP_COLOR=$1 grep --line-buffered --color=always '.*'; }
(tail -qf /var/log/syslog | color 31 &
tail -qf /var/log/fail2ban.log | color 32 &
tail -qf /var/log/nginx/error.log | color 33) | cat
このように、SIGINTのCtrl-C最後の1つとtail+grep
diecat
と他の2つのgrep + tailは、次に何かを書くとSIGPIPEで死にます。
または、SIGINTハンドラを復元します(一部のシェルでは使用できません)。
color() { GREP_COLOR=$1 grep --color '.*'; }
((trap - INT; tail -qf /var/log/syslog | color 31) &
(trap - INT; tail -qf /var/log/fail2ban.log | color 32) &
tail -qf /var/log/nginx/error.log | color 33)
color
関数でもこれを行うことができます。これは機能しませんが、tail
次にtail
ifが作成されるとSIGPIPEで終了しますgrep
。
color() (trap - INT; GREP_COLOR=$1 exec grep --color '.*')
(tail -qf /var/log/syslog | color 31 &
tail -qf /var/log/fail2ban.log | color 32 &
tail -qf /var/log/nginx/error.log | color 33)
あるいは、tail + grep全体を関数にします。
tailc() (trap - INT; export GREP_COLOR="$1"; shift; tail -qf -- "$@" |
grep --color '.*')
tailc 31 /var/log/syslog &
tailc 32 /var/log/syslog &
tailc 33 /var/log/nginx/error.log
またはすべて:
tailc() (
while [ "$#" -ge 2 ]; do
(trap - INT; tail -f -- "$2" | GREP_COLOR=$1 grep --color '.*') &
shift 2
done
wait
)
tailc 31 /var/log/syslog 32 /var/log/syslog 33 /var/log/nginx/error.log
答え2
次のようなものが私にとって効果的です。
(tail -f /var/log/syslog | awk -W interactive '{printf "\033[1;31m%s\033[0m\n", $0}' & \
tail -f /var/log/auth.log | awk -W interactive '{printf "\033[1;32m%s\033[0m\n", $0}' & \
tail -f /var/log/Xorg.0.log | awk -W interactive '{printf "\033[1;34m%s\033[0m\n", $0}')
説明する:
tail -f file
:ファイルが大きくなったらデータを追加します。awk -W interactive
:awk
インタラクティブモードに設定'{printf "\033[1;31m%s\033[0m\n", $0}'
カラー出力を端末に印刷します。\033[1;31m
赤を表します\033[1;32m
緑を意味する\033[1;34m
青を意味