【tail】Linuxコマンド_ファイルの末尾のデータを表示する。リアルタイムなデバッグ表示も可能

テキストファイルの末尾(最終行)を表示するには「tail」コマンドを使用します。

「tail」コマンドの使い方(Linux)

「tail」コマンドを使用し、ファイルの末尾部分を表示します。
以下のコマンドは「anaconda-ks.cfg」ファイルのデータの末尾部分を表示した例となります。

「tail」コマンドのデフォルト表示は末尾から10行を表示します。

$ tail anaconda-ks.cfg 
zerombr
# Partition clearing information
clearpart --all --initlabel

# System timezone
timezone UTC --isUtc --nontp

# Root password
rootpw --iscrypted --lock almalinux

$ 

ファイルの末尾データを行数指定で表示

以下、「-n」オプションを使用することで末尾データ表示を行数指定で実施することができます。
コマンド例では末尾3行のデータを表示しています。

$ tail -3 anaconda-ks.cfg 
# Root password
rootpw --iscrypted --lock almalinux

$ 

実行コマンドの末尾表示、行数指定

「tail」コマンドは実行コマンドでも末尾の結果を表示することができます。
実行コマンドもデフォルトで末尾10行を表示します。

実行コマンドで「tail」コマンドを表示する場合は「|」を使用します。

$ dmesg | tail
[34644.673544] systemd[1]: Reached target Swap.
[34644.674284] systemd[1]: Listening on Journal Socket.
[34644.675390] systemd[1]: Starting Load Kernel Modules...
[34644.862708] IPVS: ftp: loaded support on port[0] = 21
[34644.889864] IPVS: ftp: loaded support on port[0] = 21
[34645.198753] IPVS: ftp: loaded support on port[0] = 21
[42475.082648] IPVS: ftp: loaded support on port[0] = 21
[56664.178033] IPVS: ftp: loaded support on port[0] = 21
[63508.933008] IPVS: ftp: loaded support on port[0] = 21
[72788.518955] IPVS: ftp: loaded support on port[0] = 21
$ 

以下は行数指定で表示した例となります。
「tail」コマンド後に「-n」オプションを使用します。

以下では末尾3行を表示した例となります。

$ dmesg | tail -3
[56664.178033] IPVS: ftp: loaded support on port[0] = 21
[63508.933008] IPVS: ftp: loaded support on port[0] = 21
[72788.518955] IPVS: ftp: loaded support on port[0] = 21
$ 

デバッグ表示として利用ができる「-f」オプションが便利

「tail」コマンドでは「-f」オプションを利用することで、ファイルの更新をリアルタイムに表示することができます。

例えば以下のようなログメッセージをリアルタイムで監視したい時などに「-f」オプションを使用することができます。
動作確認などのデバッグ表示として利用することでエラーや障害などの切り分けにも利用することが多いです。

$ tail -f /var/log/messages
Sep 11 01:27:58 almalinux rtkit-daemon[98]: The canary thread is apparently starving. Taking action.
Sep 11 01:27:58 almalinux rtkit-daemon[98]: Demoting known real-time threads.
Sep 11 01:27:58 almalinux rtkit-daemon[98]: Demoted 0 threads.
Sep 11 02:01:39 almalinux systemd[1]: Starting dnf makecache...
Sep 11 02:01:41 almalinux dnf[832]: AlmaLinux 8 - BaseOS                            3.5 kB/s | 4.3 kB     00:01
Sep 11 02:01:42 almalinux dnf[832]: AlmaLinux 8 - AppStream                         5.5 kB/s | 4.7 kB     00:00
Sep 11 02:01:43 almalinux dnf[832]: AlmaLinux 8 - Extras                            4.4 kB/s | 3.8 kB     00:00
Sep 11 02:01:43 almalinux dnf[832]: Metadata cache created.
Sep 11 02:01:43 almalinux systemd[1]: dnf-makecache.service: Succeeded.
Sep 11 02:01:43 almalinux systemd[1]: Started dnf makecache.

------ このまま更新分がリアルタイムで表示される ------

「tail」コマンドオプション

「tail」コマンドのオプションは以下の通りとなります。

$  tail --help
使用法: tail [オプション]... [ファイル]...
Print the last 10 lines of each FILE to standard output.
With more than one FILE, precede each with a header giving the file name.

FILE の指定がなかったり, - であった場合, 標準入力から読み込みます.

Mandatory arguments to long options are mandatory for short options too.
  -c, --bytes=[+]NUM       output the last NUM bytes; or use -c +NUM to
                             output starting with byte NUM of each file
  -f, --follow[={name|descriptor}]
                           output appended data as the file grows;
                             an absent option argument means 'descriptor'
  -F                       same as --follow=name --retry
  -n, --lines=[+]NUM       output the last NUM lines, instead of the last 10;
                             or use -n +NUM to output starting with line NUM
      --max-unchanged-stats=N
                           with --follow=name, reopen a FILE which has not
                             changed size after N (default 5) iterations
                             to see if it has been unlinked or renamed
                             (this is the usual case of rotated log files);
                             with inotify, this option is rarely useful
      --pid=PID            with -f, terminate after process ID, PID dies
  -q, --quiet, --silent    never output headers giving file names
      --retry              keep trying to open a file if it is inaccessible
  -s, --sleep-interval=N   with -f, sleep for approximately N seconds
                             (default 1.0) between iterations;
                             with inotify and --pid=P, check process P at
                             least once every N seconds
  -v, --verbose            always output headers giving file names
  -z, --zero-terminated    line delimiter is NUL, not newline
      --help     この使い方を表示して終了する
      --version  バージョン情報を表示して終了する

NUM may have a multiplier suffix:
b 512, kB 1000, K 1024, MB 1000*1000, M 1024*1024,
GB 1000*1000*1000, G 1024*1024*1024, and so on for T, P, E, Z, Y.

--follow (-f) を使用すると、tail はデフォルトでファイル記述子を追跡します。
このため tail で追跡しているファイルの名前が変更されたとしても、 tail は
元のファイルの終端を追跡し続けます。このデフォルトの動作はファイル記述子
ではなく、実際にある名前を持つファイルを追跡する場合には望ましくありませ
ん (例: ログのローテーションなど)。そのような場合には --follow=name を使
用してください。これにより名前の変更、削除、作成などにあわせて名前のついた
ファイルの末尾を追跡するようになります。

GNU coreutils online help: <https://www.gnu.org/software/coreutils/>
Report tail translation bugs to <https://translationproject.org/team/>
Full documentation at: <https://www.gnu.org/software/coreutils/tail>
or available locally via: info '(coreutils) tail invocation'

「tail」コマンドの使い方は以上となります。

エンジニアのオンライン学習

エンジニアにおすすめのオンライン教材比較
ITエンジニアが自宅で学習ができるオンラインスクール比較

エンジニアのおすすめ学習「Progate」と「Udemy」比較

VPS_比較
最新情報をチェックしよう!