なんとなくコマンド 第85回 テキストの末尾を抜き出す

2025年2月25日(火)10時37分 マイナビニュース


今回はtailコマンドでテキストの末尾を抜き出します。テキストの先頭を抜き出すheadコマンドと対になるコマンドと言えます。シンプルとは言えtailコマンドはサーバーでリアルタイムにアクセスログなどを確認する場合に役立ちます。また、grepと組み合わせれば特定のファイルやディレクトリにアクセスしてきたユーザーだけをチェックすることもできます。
今回もこれまでのようにサンプルで利用するファイル・ディレクトリはデスクトップのsampleディレクトリとしています。デスクトップにsampleディレクトリがない場合は作成しておいてください。(コマンド入力ならmkdir ~/Desktop/sampleとして作成することができます)
また、カレントディレクトリも上記の場所になります。cd ~/Desktop/sampleのようにコマンドを入力してカレントディレクトリを変更しておけばよいでしょう。
・1.txt
・2.txt
・3.txt
○末尾を抜き出す
 まず、テキストの末尾からいくつかの行を抜き出してみましょう。カレントディレクトリにあるテキストファイル1.txtの末尾を抜き出すには以下のようにします。行数が指定されていない場合はデフォルトの値(10)の行数が表示されます。
tail 1.txt
行数を指定することもできます。この場合-nの後に表示する行数を指定します。
tail -n 3 1.txt
複数のファイルの末尾をまとめて表示することもできます。この場合は半角空白などで区切って表示したいファイル名(ファイルパス)を指定します。
tail -n 3 1.txt 2.txt
ワイルドカードを使えばテキストファイルなど該当する拡張子を持つファイルの末尾だけを表示することができます。
tail -n 3 *.txt
○ログをリアルタイムに監視する
 一見すると何の役に立つか分かりにくいtailコマンドですが、実は大変に役立つ有益なコマンドなのです。というのもサーバーにアクセスしてきた場合、リアルタイムにログを表示できるからです。これにより、どこから何に対してアクセスがあったかを監視できます。
 Webサーバーであれば不正なパラメーターを指定してデータベースから情報を抜き出そうとしていないかなどをチェックできます。ただ、単純にtailコマンドだけではうまくいきません。特にアクセスが多くなれば必要としたいデータをピックアップできなければ意味がありません。そうでなければ重要なポイントとなるデータを見逃してしまうかもしれません。
 このような場合は、やはりgrepの出番です。特定の文字列パターンを抜き出す場合に大変便利なコマンドです。grepについては、別の機会に説明するとして、ここでは特定の文字列をアクセスログから抜き出してみましょう。なお、実際のWebサーバーのログデータなので、一部モザイクになっています。
まず、macOSのシステムログをリアルタイムに監視してみましょう。この場合、tailでfまたはFオプションを指定します。ログが自動ローテートする場合はFオプションを、そうでない場合はfオプションを指定すればよいでしょう。
macOSのシステムログは/var/log/system.logなので以下のように指定します。何か追加されると自動的に行が表示されていきます。なお、以下のコマンドを実行するとcontrolキーを押したままCキーを押すまでは止まりません。
tail -f /var/log/system.log
次にRaspberry Piのシステムログを表示してみましょう。古いRaspberry Piの場合は/var/log/syslogなので以下のように指定します。
tail -f /var/log/syslog
ここでログを見るとc.shというシェルスクリプトが定期的に動作していることがわかります。c.shだけをリストアップするにはgrepと組み合わせます。以下のようにするとc.shが実行されたログだけがリアルタイムに表示されます。
tail -f /var/log/syslog | grep "c.sh"
逆にc.sh以外のログを表示したい場合はgrepで-vを指定します。
tail -f /var/log/syslog | grep -v "c.sh"
.

関連記事(外部サイト)

マイナビニュース

「キス」をもっと詳しく

「キス」のニュース

「キス」のニュース

トピックス

x
BIGLOBE
トップへ