【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
Usage: tail [OPTION]... [FILE]...
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.

With no FILE, or when FILE is -, read standard input.

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     display this help and exit
      --version  output version information and exit

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.

With --follow (-f), tail defaults to following the file descriptor, which
means that even if a tail'ed file is renamed, tail will continue to track
its end.  This default behavior is not desirable when you really want to
track the actual name of the file, not the file descriptor (e.g., log
rotation).  Use --follow=name in that case.  That causes tail to track the
named file in a way that accommodates renaming, removal and creation.

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」コマンドの使い方は以上となります。

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