Linux Tail命令示例
我们可能知道,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