/var/log/ の syslog と syslog.1 と syslog.2.gz を一気通貫でgrepする
背景
syslogを検索するとき、過去のログも含めて一気に表示したりgrepしたりしたいですよね。
cat /var/log/syslog* | grep KEYWORD
zcat /var/log/syslog* | grep KEYWORD
このやり方には、次の問題があります。
問題点
- 出力される結果が時系列順のログになっていない
-
cat
コマンドを使った場合は、syslog.2.gz を検索できていない -
zcat
コマンドを使った場合は、syslog や syslog.1 を検索できていない-
gzip: /var/log/syslog: not in gzip format
エラーが表示される% zcat /var/log/syslog* | grep KEYWORD gzip: /var/log/syslog: not in gzip format gzip: /var/log/syslog.1: not in gzip format
-
結論
次のコマンドで検索します。
ls -r /var/log/syslog* | xargs zcat -f -- | grep KEYWORD
解説
まず、syslogファイル名を逆順で出力します。
# コマンド
ls -r /var/log/syslog*
# 結果
/var/log/syslog.3.gz
/var/log/syslog.2.gz
/var/log/syslog.1
/var/log/syslog
次に、ls
で出力されたファイル名一覧をzcatの引数に与えます。
zcat
の -f
オプションによって、引数のファイルがgzipファイルでなかった場合には何もせずに標準出力に流すようにします。
zcat
の --
はオプションとファイル名の境界を指示する意味合いがあります。もしファイル名が-syslog
などとハイフンから始まる場合でも、確実にファイル名として認識させるようにします。
今回の場合はls
の結果として-syslog
というファイル名は与えられませんので、あまり意味はありませんが…。
# コマンド
xargs zcat -f --
# 実行されるコマンドのイメージ
zcat -f -- /var/log/syslog.3.gz /var/log/syslog.2.gz /var/log/syslog.1 /var/log/syslog
このやりかたで、syslogを検索するとき、過去のログも含めて一気に表示したりgrepすることができます。
別コマンド
同じ意味ですが、次のようなコマンドでもOKです。
xargsがよくわからんというひとには、こちらがわかりやすいかもしれませんね。
zcat -f -- `ls -r /var/log/syslog*` | grep KEYWORD
Author And Source
この問題について(/var/log/ の syslog と syslog.1 と syslog.2.gz を一気通貫でgrepする), 我々は、より多くの情報をここで見つけました https://qiita.com/fkshom/items/39416ae10eaf8117e7aa著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .