Ansatzの備忘録

勉強したことあるいはふと思い立ったこと

シェルワンライナー160本ノック問題107

問題107 何回rootになった?

ログファイルを検索し何回sudoが使われたか調べる問題だった。wsl2だと本に書いてあるようなログファイルが見当たらずできなかったので後で大学のlinuxで確かめようと思う。

解答例は

$ zgrep -a '(sudo:session): session opened for user root' /var/log/auth.log* | sed -r 's/^[^:]+://' | awk '{print $1}' | sort | uniq -c

となる。圧縮、非圧縮ファイルをまとめて検索するためにzgrepを使う。長いこと使われている環境では過去のログファイルが圧縮されて保存されている場合があるのでこうしている。-a はバイナリを検索するためのオプションだ。sedではログファイルにある /var/log/auth.log: といった先頭のファイル名を削除している。これで月名が先頭に来る。awkで月名のみを抜き出してソートして重複を数えれば完了だ。