運用・保守の業務をおこなっている人にとっては、とても馴染みがあるコマンドのtailコマンドについてまとめてみます。
筆者が一番使うタイミングは、やっぱりログ監視です。
tailは「尻尾」「末尾」の略ですが、tailコマンドを使えばファイルの終端を常に表示するので、稼働中システムのログを監視する際にとても便利です。
基本動作
tail ※ファイル名 で、ファイルの末尾を表示することができます。
$ tail file1.txt テスト8 テスト9 テスト10
追記を監視(ラージFとスモールf)
基本動作の tail ※ファイル名 だけでは、ファイルが追記されいったとしてもコマンド上に追記内容が表示されません。
しかしこれだと、例えばアプリケーションのログ監視をおこなう場合に不便です。
アプリケーションがログに追記するたびに表示内容を更新する(常に末尾表示)ためには、-f オプションを使用します。
$ tail -f file1.txt テスト8 テスト9 テスト10
$ tail -f file1.txt テスト9 テスト10 テスト11 ← 追記されている。
上記は-f(スモールf)を使っていますが、ログ監視のことを考えると不便な事があります。
それはログのローテーションです。
指定しているファイルがリネームされて新しいファイル名となり、指定しているファイルが新規ファイルとなった場合、-f(スモールf)では末尾監視がおこなわれません。
ログローテーションのように、監視対象のファイルが新しく作成された場合も監視した場合は、-f(スモールf)ではなく-F(ラージF)を使います。
-F(ラージF)を使う事で、ファイル名が変わって監視対象ファイルが新規作成されたとしても、対象ファイルは監視が継続されます。
$ tail -F file1.txt tail: `file1.txt' has become inaccessible: No such file or directory tail: `file1.txt' has appeared; following end of new file tail: file1.txt: file truncated ファイル1 ファイル2 ファイル3
行数を指定する(-n)
末尾の表示する行数を指定示することも可能です。
$ tail -n3 file1.txt ファイル9 ファイル10 ファイル11
-fオプションを指定して、末尾N行を監視する、といったことも可能です。
$ tail -3f file1.txt ファイル9 ファイル10 ファイル11
パイプで繋げてgrepで抽出
特にtailコマンドのオプションではないのですが、大量にログを出力するアプリケーションであれば、-fオプションを指定していてログを監視していてもログが流れるのが早くて目で追えないです。
その場合は、監視しておきたいキーワードを事前に決めておき、パイプ(|)で繋いでgrepコマンドで抽出するようにしておきます。
$ tail -f file1.txt | grep ※キーワード ファイル12
上記のようにパイプで繋いでgrepを指定することで、grepで指定したキーワードが出現した時だけ表示してくれます。
とても効率的なログ監視をおこなうことができます。
まとめ
現場のエンジニアにとって、tailコマンドは必須のコマンドかと思います。
上手に使いこなして、日々の作業に役立ててください。