tailコマンドとは
tailはファイルの最終行から数行を表示するコマンドです。デフォルトでは10行表示します。
あるファイルをtailコマンドを使用して表示してみます。
[vagrant@local logs]$ ll
合計 148
-rwxrwxrwx 1 vagrant vagrant 2185 11月 4 02:16 cli-debug.log
-rwxrwxrwx 1 vagrant vagrant 72566 11月 4 02:15 cli-error.log
-rwxrwxrwx 1 vagrant vagrant 11205 11月 4 03:12 error.log
[vagrant@local logs]$
[vagrant@local logs]$ tail error.log
)
Request URL: /inquires/inquires/index
Referer URL: http://local.profile/inquires/history
Stack Trace:
# 0 /vagrant/sample.com/profile/vendor/cakephp/cakephp/src/Routing/Dispatcher.php(114): Cake\Controller\Controller->invokeAction()
# 1 /vagrant/sample.com/profile/vendor/cakephp/cakephp/src/Routing/Dispatcher.php(87): Cake\Routing\Dispatcher->_invoke(Object(App\Controller\InquiresController))
# 2 /vagrant/sample.com/profile/webroot/index.php(36): Cake\Routing\Dispatcher->dispatch(Object(Cake\Network\Request), Object(Cake\Network\Response))
# 3 {main}
[vagrant@local logs]$
このように最終行から10行表示されました。
また、tailコマンドの後ろにオプションを付ける事が出来ます。
オプション名 | 意味 |
---|---|
-c | 出力する文字数を指定 |
-n | 出力する行数を指定 |
-q | ファイル名を表示しない |
-v | ファイル名を常に表示する |
-f | 出力を監視する |
オプション説明
-cオプション
-cオプションは、tail -c 100 ファイル名
とする事で最終行から100文字を出力します。
[vagrant@local logs]$ tail -c 100 error.log
uting\Dispatcher->dispatch(Object(Cake\Network\Request), Object(Cake\Network\Response))
# 3 {main}
[vagrant@local logs]$
-nオプション
-nオプションは、tail -n 5 ファイル名
とする事で最終行から5行表示します。
[vagrant@local logs]$ tail -n 5 error.log
# 1 /vagrant/sample.com/profile/vendor/cakephp/cakephp/src/Routing/Dispatcher.php(87): Cake\Routing\Dispatcher->_invoke(Object(App\Controller\InquiresController))
# 2 /vagrant/sample.com/profile/webroot/index.php(36): Cake\Routing\Dispatcher->dispatch(Object(Cake\Network\Request), Object(Cake\Network\Response))
# 3 {main}
[vagrant@local logs]$
-qオプション
-qオプションは、ファイル指定によるコマンド実行以外で使用する際にファイル名を非表示にします。
例えばtail -q error.log
←これを叩いてもtail error.log
の動きと全く変わりません。
logsディレクトリ配下の.log拡張子のファイルを開きたい時tail *.log
とする事で、拡張子が.log
のファイルを開きます。
[vagrant@local logs]$ tail *.log
==> cli-debug.log <==
2018-11-04 02:09:41 Debug: command 'whitespace' in plugin 'DebugKit' was not aliased, conflicts with 'DebugKit'
2018-11-04 02:09:41 Debug: command 'migrations' in plugin 'Migrations' was not aliased, conflicts with 'Migrations'
==> cli-error.log <==
# 16 [internal function]: Migrations\Shell\MigrationsShell->main('migrations', 'rollback')
# 17 /vagrant/sample.com/profile/vendor/cakephp/cakephp/src/Console/Shell.php(455): call_user_func_array(Array, Array)
==> error.log <==
)
Request URL: /inquires/inquires/index
Referer URL: http://local.profile/inquires/history
[vagrant@local logs]$
この時どのファイルを開いているか示されていますよね。
これを非表示にするというのが-qオプション
です。
tail -q *.log
を叩きます。
[vagrant@local logs]$ tail -q *.log
2018-11-04 02:09:41 Debug: command 'whitespace' in plugin 'DebugKit' was not aliased, conflicts with 'DebugKit'
2018-11-04 02:09:41 Debug: command 'migrations' in plugin 'Migrations' was not aliased, conflicts with 'Migrations'
2018-11-04 02:12:43 Debug: command 'bake' in plugin 'Bake' was not aliased, conflicts with 'Bake'
2018-11-04 02:12:43 Debug: command 'benchmark' in plugin 'DebugKit' was not aliased, conflicts with 'DebugKit'
# 16 [internal function]: Migrations\Shell\MigrationsShell->main('migrations', 'rollback')
# 17 /vagrant/sample.com/profile/vendor/cakephp/cakephp/src/Console/Shell.php(455): call_user_func_array(Array, Array)
# 18 /vagrant/sample.com/profile/vendor/cakephp/migrations/src/Shell/MigrationsShell.php(156): Cake\Console\Shell->runCommand(Array, true, Array)
)
Request URL: /inquires/inquires/index
Referer URL: http://local.profile/inquires/history
Stack Trace:
[vagrant@local logs]$
-vオプション
-vオプションは、ファイル名を常に表示するコマンドなので、ファイル指定してもファイル名を表示させます。
tail -v ファイル名
を叩きます。
[vagrant@local logs]$ tail -v error.log
==> error.log <==
)
Request URL: /inquires/inquires/index
Referer URL: http://local.profile/inquires/history
Stack Trace:
# 0 /vagrant/sample.com/profile/vendor/cakephp/cakephp/src/Routing/Dispatcher.php(114): Cake\Controller\Controller->invokeAction()
# 1 /vagrant/sample.com/profile/vendor/cakephp/cakephp/src/Routing/Dispatcher.php(87): Cake\Routing\Dispatcher->_invoke(Object(App\Controller\InquiresController))
# 2 /vagrant/sample.com/profile/webroot/index.php(36): Cake\Routing\Dispatcher->dispatch(Object(Cake\Network\Request), Object(Cake\Network\Response))
# 3 {main}
[vagrant@local logs]$
-fオプション
-fオプションは、tail -f ファイル名
とする事で、そのファイルの最終行を監視します。
[vagrant@local logs]$ tail -f error.log
)
Request URL: /inquires/inquires/index
Referer URL: http://local.profile/inquires/history
Stack Trace:
# 0 /vagrant/sample.com/profile/vendor/cakephp/cakephp/src/Routing/Dispatcher.php(114): Cake\Controller\Controller->invokeAction()
# 1 /vagrant/sample.com/profile/vendor/cakephp/cakephp/src/Routing/Dispatcher.php(87): Cake\Routing\Dispatcher->_invoke(Object(App\Controller\InquiresController))
# 2 /vagrant/sample.com/profile/webroot/index.php(36): Cake\Routing\Dispatcher->dispatch(Object(Cake\Network\Request), Object(Cake\Network\Response))
# 3 {main}
最終行を表示したままにします。終了したいときはCtrl+C
で監視を終了します。
何が便利なのか
ログを監視したい時にtailコマンドの-fオプション
が非常に相性が良いです。
ログファイルを監視状態にしておく事でリアルタイムでログを確認できます。
これをデバックに使用する事もできる為、便利だと思ったのです。
まずtail -f debug.log
でdebugファイルを監視します。
[vagrant@local logs]$ tail -f debug.log
そしてどこかにdebugコードを仕込みます。
その後、debugコードを仕込んだ対象画面を更新します。
そうするとdebugした内容がリアルタイムで表示されます。
[vagrant@local logs]$ tail -f debug.log
2018-11-21 09:57:08 Debug: ほげ
いちいちファイルを開く必要がない、というメリットも便利だと思った理由です。
もし試したことの無い方がいましたら一度いかがでしょうか?
Linuxコマンドと友達になると幸せになります!