重要なポイント
- Linux の tail コマンドはファイルの末尾からデータを表示するため、ログ ファイルを監視したり、最近追加されたものを表示したりするのに役立ちます。
- 一部の Linux ディストリビューションでの systemd の導入により、システム ログ ファイルの形式がバイナリ形式に変更されましたが、アプリケーションで生成されたログ ファイルの多くは依然としてプレーン テキスト形式を使用しています。
- リアルタイムで更新を表示することに加えて、tail を使用して、特定の行数を表示したり、複数のファイルを操作したり、ファイルの先頭から行を表示したり、バイト オフセットを使用したり、パイプを通じて他のコマンドと組み合わせたりすることもできます。
Linux の
tail
コマンドは、ファイルの末尾からデータを表示します。ファイルに追加された更新をリアルタイムで表示することもできます。使い方をご紹介します。
systemd は尾をキルしましたか?
tail
コマンドは、ファイルの末尾からのデータを表示します。通常、新しいデータはファイルの末尾に追加されるため、
tail
コマンドを使用すると、ファイルへの最新の追加内容をすばやく簡単に確認できます。また、ファイルを監視し、そのファイルに新しいテキスト エントリが発生するたびに表示することもできます。これにより、ログ ファイルを監視するための優れたツールになります。
最新の Linux ディストリビューションの多くは
、
systemd
システムとサービス マネージャー
を採用しています。これは最初に実行されるプロセスであり、
プロセス ID は 1
であり、他のすべてのプロセスの親です。この役割は
、古い init システムによって処理され
ていました。
この変更に伴い、システム ログ ファイルの新しい形式が追加されました。プレーンテキストでは作成されなくなり、
systemd
ではバイナリ形式で記録されます。
これらのログ ファイルを読み取るには、journactl ユーティリティを使用する必要があります
。
tail
コマンドはプレーン テキスト形式で動作します。バイナリファイルは読みません。つまり、
tail
コマンドは問題を探すための解決策であるということでしょうか?まだ何か提供できるものはありますか?
tail
コマンドには、リアルタイムで更新を表示するだけではありません。さらに言えば、システムによって生成されず、プレーン テキスト ファイルとして作成されたログ ファイルがまだたくさんあります。たとえば、アプリケーションによって生成されたログ ファイルの形式は変更されていません。
Linux でのテールの使用
ファイルの名前を
tail
に渡すと、そのファイルの最後の 10 行が表示されます。私たちが使用しているサンプル ファイルには、並べ替えられた単語のリストが含まれています。各行には番号が付けられているため、例に従ってさまざまなオプションがどのような影響を与えるかを簡単に確認できます。
末尾の単語リスト.txt
別の行数を表示するには、
-n
(行数) オプションを使用します。
tail -n 15 単語リスト.txt
実際には、「-n」を省略して、ハイフン「-」と数字だけを使用することもできます。それらの間にスペースがないことを確認してください。技術的には、 これは廃止されたコマンド形式です が、まだ man ページ に記載されており、まだ機能します。
tail -12 単語リスト.txt
複数のファイルでの tail の使用
複数のファイルを同時に
tail
することができます。コマンドラインでファイル名を渡すだけです。
tail -n 4 リスト-1.txt リスト-2.txt リスト-3.txt
ファイルごとに小さなヘッダーが表示されるので、その行がどのファイルに属しているかがわかります。
ファイルの先頭から行を表示する
+
(先頭からカウント) 修飾子を使用すると、ファイルの先頭から特定の行番号から始まる
tail
行が表示されます。ファイルが非常に長く、ファイルの先頭に近い行を選択すると、大量の出力が端末ウィンドウに送信されることになります。その場合は、
tail
からの出力を
less
にパイプするのが合理的です。
テール +440 リスト-1.txt
制御された方法でテキストのページをめくる ことができます。
このファイルにはたまたま 20,445 行があるため、このコマンドは「-6」オプションを使用するのと同じです。
尾部 +20440 リスト-1.txt
末尾のあるバイトの使用
-c
(バイト) オプションを使用すると、行ではなくバイト単位のオフセットを使用するように
tail
に指示できます。これは、通常のサイズのレコードにフォーマットされたテキスト ファイルがある場合に便利です。改行文字は 1 バイトとしてカウントされることに注意してください。このコマンドは、ファイルの最後の 93 バイトを表示します。
テール -c 93 リスト-2.txt
-c
(バイト) オプションと
+
(ファイルの先頭からのカウント) 修飾子を組み合わせて、ファイルの先頭からカウントされたオフセットをバイト単位で指定できます。
tail -c +351053 list-e.txt
テールへのパイピング
先ほど、
tail
からの出力を
less
にパイプしました。他のコマンドからの出力を
tail
にパイプすることもできます。
変更時間が最も古い 5 つのファイルまたはフォルダーを特定するには、
ls
で
-t
(変更時間による並べ替え) オプションを使用し、出力を
tail
にパイプします。
ls -tl |尻尾-5
head
コマンドは
、ファイルの先頭からのテキスト行をリストします
。これを
tail
と組み合わせて、ファイルのセクションを抽出できます。ここでは、
head
コマンドを使用してファイルから最初の 200 行を抽出しています。これは
tail
にパイプ処理され、最後の 10 行が抽出されます。これにより、191 行目から 200 行目までが表示されます。つまり、最初の 200 行のうち最後の 10 行は次のようになります。
head -n 200 list-1.txt |尻尾-10
このコマンドは、メモリを最も多く消費する 5 つのプロセスをリストします。
ps 補助 |ソート -nk +4 |尻尾-5
それを詳しく見てみましょう。
ps
コマンドは
、実行中のプロセスに関する情報を表示します
。使用されるオプションは次のとおりです。
- a : 現在のユーザーだけでなく、すべてのプロセスをリストします。
- u : ユーザー指向の出力を表示します。
- x : TTY 内で実行されていないプロセス を含む、すべてのプロセスをリストします。
sort
コマンドは、
ps
からの
出力を並べ替えます
。
sort
で使用するオプションは次のとおりです。
- n : 数値順に並べ替えます。
- k +4 : 4 列目でソートします。
tail -5
コマンドは、ソートされた出力から最後の 5 つのプロセスを表示します。これらは、最もメモリを消費する 5 つのプロセスです。
tail を使用してファイルをリアルタイムで追跡する
ファイル (通常はログ ファイル) に到着する新しいテキスト エントリを追跡するのは、
tail
使用すると簡単です。コマンドラインでファイル名を渡し、
-f
(フォロー) オプションを使用します。
tail -f geek-1.log
新しいログ エントリがログ ファイルに追加されるたびに、tail はターミナル ウィンドウ内の表示を更新します。
出力を調整して、特定の関連性または関心のある行のみを含めることができます。ここでは
grep
使用して、「average」
という単語を含む行のみを表示しています
。
tail -f geek-1.log | grep 平均
2 つ以上のファイルへの変更を追跡するには、コマンド ラインでファイル名を渡します。
tail -f -n 5 geek-1.log geek-2.log
各エントリには、テキストがどのファイルから来たのかを示すヘッダーがタグ付けされています。
表示は、後続のファイルに新しいエントリが到着するたびに更新されます。更新期間を指定するには、
-s
(スリープ期間) オプションを使用します。これにより、ファイルのチェックの間に、
tail
に秒数 (この例では 5 秒) 待機するよう指示されます。
tail -f -s 5 geek-1.log
確かに、スクリーンショットを見ただけではわかりませんが、ファイルの更新は 2 秒に 1 回行われています。新しいファイル エントリは、5 秒ごとにターミナル ウィンドウに表示されます。
複数のファイルに追加されたテキストを追跡する場合、テキストがどのログ ファイルからのものであるかを示すヘッダーを非表示にすることができます。これを行うには、
-q
(静か) オプションを使用します。
tail -f -q geek-1.log geek-2.log
ファイルからの出力は、テキストがシームレスにブレンドされて表示されます。各エントリがどのログ ファイルから来たのかは示されていません。
尾部にはまだ価値がある
現在、システム ログ ファイルへのアクセスは
journalctl
によって提供されていますが、
tail
はまだ多くの機能があります。これは、 tail にパイプしたり、
tail
からパイプ出したりして、他のコマンドと組み合わせて使用する場合に特に当てはまります。
systemd
状況を変えたかもしれませんが、1 つのことを実行し、それをうまく実行するという Unix の哲学に準拠した従来のユーティリティの余地はまだあります。





