2016年12月15日木曜日

Linux tailコマンド

tail コマンド 

テキストファイルまたはパイプでのテキスト入力の最後のn行を抜き出すコマンド。行単位ではなくバイト単位での指定も可能。デフォルトでは最後の10行を抜き出す。
ログファイルにログが追記されていく様子をリアルタイムに見るためにも使える。
行数は -n オプションで、バイト単位であれば -c オプションで指定
最後の10行を表示
$ tail -n10 hoge.txt
-n と 10 は分けて書いてもよい。
$ tail -n 10 hoge.txt
n は省略でき、ハイフンと数字だけでよい。
$ tail -10 hoge.txt
最後の10行というのは tail のデフォルト動作なので、オプション全部省略。
$ tail hoge.txt
パイプを使う例
cat hoge.txt | tail
最後の10バイトを表示 (行数ではなくバイト数で指定)
tail -c10 hoge.txt
複数のファイルを指定した場合は、ファイル名とともに表示する。
$ tail foo.txt bar.txt
==> foo.txt <==
...
==> bar.txt <==
...
ログファイルのリアルタイム監視
$ tail -f foo.log
-r オプションを使うと、行を逆順にして出力、つまり最後の行を最初に出力して、1行目を最後に出力させることができる。

ログファイルなどの追記出力をリアルタイムに画面に表示する

-f を付けると、ログをリアルタイムに監視できる。このコマンドを起動すると、ファイルの最後の部分を表示した後、ファイルの追記を監視して、追記されたらその部分を表示して監視を継続してくれる。監視を終了するには Ctrl+C を押すなどする。
$ tail -f access_log
ログファイルをgrepなどでパイプ処理して tail -f で監視する場合に、
$ tail -f access_log | grep 404
のようにすると、grepが出力をバッファリングしてしまい、リアルタイムな監視ができない。いくらかの出力がたまにまとめて一度に表示されるようになってしまう。そんな場合はバッファリングしないようにする必要があるが、その方法はコマンドによって異なる。
grep の場合は --line-buffered というオプションを付ければ行単位で出力してくれるので、ログの監視には問題ない。
tail -f access_log | grep --line-buffered 404
関連
  • headコマンド: 最後ではなく先頭のn行を抜き出す

0 件のコメント:

コメントを投稿

注: コメントを投稿できるのは、このブログのメンバーだけです。