Linux Tail命令示例

时间:2020-03-05 15:28:41  来源:igfitidea点击:

我们可能知道,cat命令用于通过标准输入显示文件的全部内容。
但是在某些情况下,我们必须打印文件的最后一部分。
在Linux和Unix中,tail命令用于使用标准输出显示文件的最后10行(默认情况下)。

Tail命令通常用于监视和分析文件,因为它可以显示新添加的行。
此功能主要用于查看不时更新的日志或者其他文件。

在本教程中,我们将通过一些实际示例来学习如何在Linux中使用tail命令。
我们还将详细介绍tail选项。

tail命令的语法

下面的行显示了tail命令的语法:

tail [OPTION]... [FILE]...

如果没有任何“ OPTION”或者“ FILE”,tail命令将接受来自STDIN的输入。
因此,在STDIN中,如果输入的行数超过10行,则在head命令执行与tail命令完全相反的情况下,仅显示最后10行。

Tail命令可以接受一个或者多个输入文件名('FILE')。

1)使用tail命令查看文件的最后十行

如果没有任何选择,tail命令将显示输入文件的最后10行。

在以下示例中,tail命令显示“ file1.txt”文件的底部10行:

$tail file1.txt
memtest86+_multiboot.bin
System.map-2.6.38-12-generic
System.map-2.6.38-13-generic
System.map-2.6.38-8-generic
vmcoreinfo-2.6.38-12-generic
vmcoreinfo-2.6.38-13-generic
vmcoreinfo-2.6.38-8-generic
vmlinuz-2.6.38-12-generic
vmlinuz-2.6.38-13-generic
vmlinuz-2.6.38-8-generic

2)显示特定(有限)的行数

如果只想显示特定数量的行,则必须使用-n选项。

我们可以使用三个不同的选项来限制行数。

以下三个命令('-n100','-n 100','-100')显示'/var/log/apache2/error.log'文件中的最后100行:

$tail -n100 /var/log/apache2/error.log

或者

$tail -100 /var/log/apache2/error.log

或者

$tail -n 100 /var/log/apache2/error.log

3)如何显示多个文件

当作为参数给定时,tail命令可以从多个文件显示。
然后输出每个文件的最后10行,并显示文件名的标题。

$tail file1.txt file2.txt
==> file1.txt <== 
memtest86+_multiboot.bin 
System.map-2.6.38-12-generic 
System.map-2.6.38-13-generic
System.map-2.6.38-8-generic
vmcoreinfo-2.6.38-12-generic
vmcoreinfo-2.6.38-13-generic
vmcoreinfo-2.6.38-8-generic
vmlinuz-2.6.38-12-generic
vmlinuz-2.6.38-13-generic
vmlinuz-2.6.38-8-generic
==> file2.txt <==
smi.conf
snmp
sound
speech-dispatcher
ssh
ssl
sudoers
sudoers.d
sysctl.conf
tr command

如果不想打印标题('==> file1.txt <=='和'==> file2.txt <=='),则可以将安静模式与'-q','--quiet一起使用'或者'--silent'选项。
此选项可用于合并文件。

$tail -q file1.txt file2.txt

如果始终要打印标题,即使仅提供一个文件名作为参数,也可以使用“ -v”或者“ --verbose”选项

$tail -v file1.txt

4)显示文件的最后特定字节

要显示文件的最后一个特定字节,请使用“ -c”或者“ --bytes”选项。

以下tail命令打印file2.txt文件的最后30个字节:

$tail -c 30 file2.txt
sudoers.d
sysctl.conf
sysctl.d

另外,我们可以使用'-c + number'输出从字节'number'开始的所有内容。

$tail -c +300 file1.txt

5)查看文件更改

使用“ -f”或者“ --follow”选项监视文件更改。
此选项非常常用于监视日志文件和对日志文件进行故障排除。

以下命令将在终端上显示“ /var/log/Xorg.1.log”文件的最后10个更改。

$tail -f /var/log/Xorg.1.log
[ 86.774] (**) Option "xkb_layout" "us"
[ 86.774] (**) Option "xkb_options" "terminate:ctrl_alt_bksp"
[ 86.774] (II) Toshiba input device: (II) is tagged by udev as: Keyboard
[ 86.774] (II) Toshiba input device: (II) device is a keyboard
[ 88.453] (II) Display (Seiko/Epson (DFP-0)) does not support NVIDIA 3D
[ 88.453] (II) Vision stereo.
[ 102.094] (II) Display (Seiko/Epson (DFP-0)) does not support NVIDIA 3D
[ 102.094] (II) Vision stereo.
[ 540.435] (II) Axis 0x1 value 1158 is outside expected range
See https://wayland.freedesktop.org for details

“ -f”选项将始终等待添加的数据,并且不会自行退出。
我们必须按“ Ctrl + C”退出。

让我们尝试使用'-n'和'f'选项显示tail输出的最后3行。

$tail -n3 -f /var/log/Xorg.1.log
[ 102.094] (II) Vision stereo.
[ 540.435] (II) Axis 0x1 value 1158 is outside expected range
See https://wayland.freedesktop.org for details

使用“ -fq”选项,我们可以监视多个文件中的更改。

$tail -fq /var/log/Xorg.1.log file2.txt

使用“ -s”或者“ --sleep-interval”(默认值为1秒),我们可以调整迭代之间的睡眠间隔。

$tail -f -s 4 /var/log/Xorg.1.log

如上所述,如果使用'-f'选项,shell不会自行退出,但是我们可以通过'--pid'选项告诉命令在进程终止后终止。

PID 4309的进程结束后,该命令将立即退出。

$tail -f file2.txt --pid=4309

使用“ --retry”选项,即使文件不可访问或者变得不可访问,我们也可以继续尝试打开该文件。
一旦可以访问,将显示输出。

$tail -f file2.txt --retry

6)在管道上使用tail

可以将tail命令与其他命令进行管道传输,以产生优化的结果。

以下示例使用ls命令列出所有文件和目录,并在顶部列出所有目录。

$ls -l /etc | tail | sort
drwxr-xr-x.  2 root root   4096 Mar  3 08:15 yum.repos.d
drwxr-xr-x.  2 root root   4096 Mar  3 08:17 yum
drwxr-xr-x.  2 root root   4096 Sep 25 14:54 xinetd.d
drwxr-xr-x.  4 root root   4096 Sep 25 14:54 xdg
drwxr-xr-x.  6 root root   4096 Sep 25 14:54 X11
lrwxrwxrwx.  1 root root     12 Dec 19 15:43 yum.conf -> dnf/dnf.conf
-rw-r--r--.  1 root root   1204 Nov 11 19:08 virc
-rw-r--r--.  1 root root   1982 Nov 11 19:08 vimrc
-rw-r--r--.  1 root root     28 Sep 25 14:51 vconsole.conf
-rw-r--r--.  1 root root    642 Dec  9  2015 xattr.conf

如果要监视对特定文件类型的请求,请使用以下命令:

$tail -f /var/log/apache/myvirtualhost.log | grep .jpg

在以下示例中,通过管道输出了tail命令,并使用sort命令获取了按字母顺序排序的“ continent.txt”的内容。

$tail -n 5 continent.txt | sort
Africa
Antarctica
Asia
Australia
Europe