Linuxのheadコマンドは先頭行から、tailコマンドは最終行から指定した行を表示する
Linuxの head、tailコマンドの解説
head、tailはそれぞれ先頭行から、最終行から指定した表を表示する
Linuxのファイルのテキストを操作するコマンドの紹介として、今回は「head」コマンドと「tail」コマンドを紹介します。
head:ファイルの最初の 10行のテキストを表示する
tail:ファイルの最後の 10行のテキストを表示する
「head」コマンドはテキストファイルの最初の 10行、「tail」コマンドは最後の 10行を表示すると言う機能を持つコマンドです。
ログファイルなど容量が大きなテキストファイルの最初の 10行、最後の 10行などを表示して、ファイルの内容を確認するときなどに使用します。
また、「head」も「tail」も何かの略ではなく、そのままの単語ですので、理解しやすいコマンドでしょう。
ファイルの内容の先頭から指定された行数分を表示する「head」コマンド
「head」コマンドは、ファイルの先頭から指定した行数分の内容を表示します。
指定しない場合は 10行がデフォルトの設定となっています。
headコマンドの基本的な使用例
「head」コマンドの基本的な使用例としては以下のようになります。
デフォルトの設定は 10行表示する設定になっていますので、オプションを設定しない場合は、先頭から 10行を表示します。
1 |
$ head /var/www/html/logs/error.log |
また、表示する行数を指定する場合は、下記の様に「-n 行数」のオプションか、「-行数」のオプションを設定します。
以下は、デフォルトと同じ 10行を表示する指定です。
1 2 |
$ head -n 10 /var/www/html/logs/error.log $ head -10 /var/www/html/logs/error.log |
上記の 2つの記述は同じ表示結果になりますが、「head -n 10
」の記述方法をオススメします。
理由は、「head -10
」の記述方法は非推奨であるためです。
ファイルの内容の最後の行から指定された行数分を表示する「tail」コマンド
「tail」コマンドは、ファイルの末尾から指定した行数分の内容を表示します。
tailも headコマンドと同じく、指定しない場合は 10行がデフォルト設定となっています。
tailコマンドの基本的な使用例
「tail」コマンドの基本的な使用例としては以下のようになります
デフォルトの設定は 10行表示する設定になっていますので、オプションを設定しない場合は、最終行から 10行を表示します。
1 |
$ tail /var/www/html/logs/error.log |
また、表示する行数を指定する場合は、下記の様に「-n 行数」のオプションか、「-行数」のオプションを設定します。
以下は、デフォルトと同じ 10行を表示する指定です。
1 2 |
$ tail -n 10 /var/www/html/logs/error.log $ tail -10 /var/www/html/logs/error.log |
「head」コマンドと同じく、上記の 2つの記述は同じ表示結果になりますが、「tail -n 10
」の記述方法をオススメします。
head、tailコマンドの主なオプション
headコマンドの主なオプションは以下の通りとなっています。
オプション | 説明 |
---|---|
-c、–bytes 数値 | 先頭から指定したバイト数を表示する |
-n、–lines 数値 | 先頭行から指定した行数を表示する |
-q、–quiet、–silent | ファイルごとのヘッダ表示を行わない |
-v、–verbose | ファイルごとのヘッダ表示を常に行う |
tailコマンドの主なオプションは以下の通りとなっています。
オプション | 説明 |
---|---|
-c、–bytes 数値 | 末尾から指定したバイト数を表示する |
-n、–lines 数値 | 最終行から指定した行数を表示する |
-q、–quiet、–silent | ファイルごとのヘッダ表示を行わない |
-v、–verbose | ファイルごとのヘッダ表示を常に行う |
-f、–follow | ファイルを監視し、ファイルに内容が追加されると表示処理にもその内容を反映させる |
主なオプションとしては、headも tailもよく似ています。
-nオプションで表示する行数を指定する
先にも紹介しましたが、「-n」オプションは表示する行数を指定する際に使用します。
headコマンドでも tailコマンドでも使い方は同じで、下記のように「-n」オプションに続いて行数を数値で指定します。
1 2 |
$ head -n 100 /var/www/html/logs/error.log $ tail -n 100 /var/www/html/logs/error.log |
上記の例では、headでは最初の行から 100行分を、tailでは最後の行から 100行分を表示します。
head、tailともにデフォルトでは「-n 10」となる 10行が設定されています。
1 2 |
$ head -100 /var/www/html/logs/error.log $ tail -100 /var/www/html/logs/error.log |
また、上記のように「-n」オプションを使わずに「-」に続いて数値を指定することでも行数を指定することができます。
ただし、こちらの方法は非推奨とされていますので、「-n」オプションを使う方をオススメします。
また、「-」と数値の間にスペースが入らないようにしましょう。
なお、head、tailともに「行数」は「改行の数」ということになります。
そのため、改行が入らない長い行があり、画面の幅によって自動的に折り返しをして複数行になっていたとしても、改行があるところまでを 1行というカウントになります。
また、数値に単位を付与することもできます。
1 2 |
$ head -n 100b /var/www/html/logs/error.log $ head -n 100kB /var/www/html/logs/error.log |
単位はそれぞれの下記の通りとなります。
「b = 512」
「kB = 1000」
「K = 1024」
「MB = 1000 * 1000」
「M = 1024 * 1024」
「GB = 1000 * 1000 * 1000」
「G = 1024 * 1024 * 1024」
「TB = 1000 ^ 4」
「PB = 1000 ^ 5」
「EB = 1000 ^ 6」
「ZB = 1000 ^ 7」
「YB = 1000 ^ 8」
指定する際の注意点としては、「-n 100b」のように数値と単位の間にスペースが入らないようにしましょう。
-cオプションで表示する文字数を指定する
先の「-n」オプションは表示する行数を指定するものでしたが、「-c」オプションは表示する文字数を指定するものです。
1 |
$ head -c 100 /var/www/html/logs/error.log |
上記のように「-c」を指定すると、100文字分だけを表示します。
「-c」オプションでも、「-c 100b」のように単位を付与することができます。
tail -f error.log
でログをリアルタイム更新
tailコマンドで一番よく使うと言っても過言ではないオプションが「-f」だと思います。
「tailはファイルの末尾から指定の行数を表示する」というコマンドですが、「-f」オプションを付けると、「ファイルに情報が追記されるとその追記されたテキストをリアルタイムに画面に表示する」ようになります。
具体的には下記の用に指定します。
1 |
$ tail -f /var/www/html/logs/error.log |
このように記述すると、最初は「error.log」の最後の 10行が表示されます。
しかし、処理は継続しており、何かの処理を実行して「error.log」にエラー情報が追加されると、その追加されたログ内容をリアルタイムに表示していきます。
この「-f」オプションを使うことで、ログファイルを何度も開き直すことなく、追加されるログの情報を確認することができます。
また、「tail -f」で表示し続けている処理を止める場合は「Ctrl+C」を押します。
「tail -f」は、終了の手続きをしないと処理が終了しません。
headと tailを組み合わせて「101行目~110行目」を取得
「head」コマンドにも「tail」コマンドにも「n1行目~n2行目」を取り出す、と言う機能はありません。
そのため、上記の画面イメージのような「101行目~110行目」を取得する場合は「head」と「tail」コマンドを組み合わせて取得します。
1 |
$ head -n 110 file.txt | tail -n 10 |
左側の処理が、先に「head」コマンドで 110行目まで取得して、その後「tail」コマンドで 10行分取り出す方法です。
1 |
$ tail -n 100 file.txt | head -n 10 |
右側の処理が、先に「tail」コマンドを使って 101行目から取得して、その後「head」コマンドで 10行を取り出す方法です。
ただし、先に tailを実行する方法は、あらかじめファイル全体が何行あるのか、が分かっている必要があります。
ファイルの行数を調べる際は、下記の様に「wc」コマンドを使用します。
1 |
$ wc -l file.txt |
wcコマンドに関しては、下記に詳細記事を書いていますのであわせて参考にしてください。
Linuxの wcコマンドでファイルの行数、単語数、バイト数、文字数をカウントする
cat、less、head、tail、split、sedなどLinuxでファイル、文字列を操作するコマンド
ファイル自体を画面に収まるように表示させる場合は more、lessコマンドがある
長いファイルの一部を表示したい、という場合に head、tailコマンドを使用しますが、ファイルの内容をページ単位で表示して、キーボード操作によって画面をスクロールさせながら表示させたい、という場合には more、lessコマンドがあります。
1 2 |
$ more /var/www/html/logs/error.log $ less /var/www/html/logs/error.log |
more、lessはページャーコマンドとも言われ、長いファイルを画面単位で表示するためのコマンドです。
上記のように more、lessコマンドだけでもファイルを表示することができますが、下記のように「|(パイプ)」でつないで head、tailの表示結果をページャーで処理をすることもできます。
1 2 |
$ head -n 100k /var/www/html/logs/error.log | more $ head -n 100k /var/www/html/logs/error.log | less |
more、lessコマンドに関しては、下記に詳細記事を書いていますのであわせて参考にしてください。
less、moreはページャー、ファイルの中身を表示するLinuxのコマンド
Linuxでファイルの内容を表示するcatコマンドの解説。more、lessで代替も
ファイル自体を分割する場合は splitコマンドがある
ファイルの一部を取り出す方法として head、tailコマンドを紹介していますが、必要な情報がファイルのどの辺りにあるかがよく分からない、と言う場合もあるのではないでしょうか。
場合によっては、ファイルの容量が大きすぎて headや tailコマンドの処理に時間がかかるような場合などもあるでしょう。
そのような場合は、そもそものファイルを分割する「split」コマンドを利用する方法もあります。
例えば、error.logが GB単位のサイズになってしまっていて扱いにくい場合は、下記のように「split」コマンドを利用することで 10MB単位に分割することができます。
1 |
$ split -b 10M error.log error.log- |
コマンドを実行すると、「error.log」を 10MBごとに「error.log-aa」「error.log-ab」「error.log-ac」というファイルに分割してくれますので、viエディタで開いてもそれほど重たい処理にはなりません。
splitコマンドに関しては、下記に詳細記事を書いていますのであわせて参考にしてください。
Linuxのsplitコマンドは指定したサイズにファイルを分割する
今回の記事では、ファイルの先頭行、もしくは、最終行から指定した行数分を表示する「head」「tail」コマンドについて解説をしましたが、ファイルの内容、および、テキスト情報についての操作に関連するコマンドは下記の記事にまとめていますので、あわせて参考にしてください。
cat、less、head、tail、split、sedなどLinuxでファイル、文字列を操作するコマンド
GoogleAdwords
GoogleAdwords
この記事が参考になったと思いましたらソーシャルメディアで共有していただけると嬉しいです!
関連記事
-
Linuxのbashのコマンドの履歴をhistoryで確認し!、↓、↑で実行する
Linuxで実行したコマンドの履歴を確認するコマンド「history」。「history」の使い方、設定の変更、設定ファイルの設置場所について解説。「!番号」「!文字列」「!?文字列」など。
-
less、moreはページャー、ファイルの中身を表示するLinuxのコマンド
Linuxにはコマンドで実行した結果が長い場合、1画面ごとに区切って表示するコマンドが用意されている。それがページャーと呼ばれるmore、lessだ。この使い方を解説。
-
Linuxのbashで変数に値を追加する方法を多数紹介。+=や””を使う方法など
Linuxのbashで変数に値を代入する方法を解説。bashの変数の処理は柔軟で様々な方法を採れる。デリミタなしで値を追加する方法などを解説。
-
Linux findコマンドを使ってn日前のファイルを削除する 3つの記述方法
作成からn日経ったファイルを削除したい、そんなときにはfindコマンドを使う。コマンドの記述の方法は3種類あり、それぞれを解説。書き易さもあるがスピードに大きく差がある記述方法もある。
-
makewhatis、mandbコマンドでLinuxのオンラインマニュアル索引情報を更新
Linuxコマンドのオンラインマニュアルを検索するwhatis、aproposなどのコマンドはwhatisデータベースを対象に検索する。このデータベースを更新するmandb、makewhatisコマンドを解説。
-
Linuxのコマンドの情報を調べるwhich、whereis、whatis、apropos、man
Linuxのコマンドの実行ファイルやマニュアルの情報を確認するコマンドwhich、whereis、whatis、apropos、manの機能と使い方、似たところと違うところの紹介。
-
cat、less、head、tail、split、sedなどLinuxでファイル、文字列を操作するコマンド
Linuxでファイル、テキストを操作するコマンドのまとめ。cat、less、head、tail、split、tr、sedなど、ファイルを表示、置換、連結、分割などの各コマンドの使い方の紹介と詳細ページの紹介。
-
Linuxでファイルの内容を表示するcatコマンドの解説。more、lessで代替も
catはLinuxのコマンドで、本来の機能はファイルを連結だが、ファイルの内容を表示する機能のために使うことが多く使用頻度が高い。同種の機能のmore、less、tacコマンドについても解説。
-
Linuxのタイムスタンプはmtime、ctime、atimeの3種類。touchコマンドで更新する方法
Linuxのファイルのタイムスタンプにはmtime、ctime、atimeの3種類がある。その違いを詳細に解説しつつ、lsで表示するオプション、touchで更新するオプションを解説。
-
Linuxの環境変数でパスの設定をする方法とシェル変数の扱い方を解説
Linuxでコマンドを設置するパスの設定情報である環境変数「PATH」の確認方法と環境変数「PATH」に新しいパスを追加する方法の解説。Linuxのシェルでの変数の扱い方についての解説も。