先回顾一下head和tail的基本用法
Linux
head
和tail
命令非常相似。它们默认安装在所有Linux 发行版中。让我们首先了解它们是什么以及它们的用途。简而言之,顾名思义,该
head
命令从文件开头打印行,而该tail
命令从文件末尾打印行。这两个命令都将结果写入标准输出。
head
命令的语法 非常简单:
head [OPTIONS] FILES
> head /etc/passwd
root:x:0:0::/root:/bin/bash
bin:x:1:1::/:/usr/bin/nologin
daemon:x:2:2::/:/usr/bin/nologin
mail:x:8:12::/var/spool/mail:/usr/bin/nologin
ftp:x:14:11::/srv/ftp:/usr/bin/nologin
http:x:33:33::/srv/http:/usr/bin/nologin
nobody:x:65534:65534:Nobody:/:/usr/bin/nologin
dbus:x:81:81:System Message Bus:/:/usr/bin/nologin
systemd-journal-remote:x:982:982:systemd Journal Remote:/:/usr/bin/nologin
systemd-network:x:981:981:systemd Network Management:/:/usr/bin/nologin
当然,我们可以在执行命令时定义一些选项以获取自定义输出。
如果你希望检索与默认 10 行不同的行数,则
-n
option 与一个整数一起使用,告诉要检索的行数。例如,以下命令将显示
/etc/passwd
文件的前 3 行。
> head -n 3 /etc/passwd
root:x:0:0::/root:/bin/bash
bin:x:1:1::/:/usr/bin/nologin
daemon:x:2:2::/:/usr/bin/nologin
此外,该
head
命令还可以按字节打印文件内容。只需通过-c
命令的选项。请记住,换行符计为单个字符,因此如果head
打印出换行符,它会将其计为一个字节。例如,以下命令将显示
/etc/passwd
文件的前 8 个字节。
> head -c 8 /etc/passwd
root:x:0
当然,该
head
命令也可以处理多个文件。例如,以下命令将显示/etc/passwd
和/etc/group
文件的前 3 行。
> head -n 3 /etc/passwd /etc/group
==> /etc/passwd <==
root:x:0:0::/root:/bin/bash
bin:x:1:1::/:/usr/bin/nologin
daemon:x:2:2::/:/usr/bin/nologin
==> /etc/group <==
root:x:0:brltty,root
sys:x:3:bin
mem:x:8:
添加
-q
隐藏文件名
> head -q -n 3 /etc/passwd /etc/group
root:x:0:0::/root:/bin/bash
bin:x:1:1::/:/usr/bin/nologin
daemon:x:2:2::/:/usr/bin/nologin
root:x:0:brltty,root
sys:x:3:bin
mem:x:8:
该
head
命令可以通过管道传输到其他命令。在以下示例中,ls
命令的输出通过 管道传输到目录中,head
以显示五个最近修改的文件或文件夹/etc
。
> ls -t /etc | head -n 5
ld.so.cache
resolv.conf
systemd
libreoffice
profile.d
到现在为止,你应该对如何使用 Linux
head
命令有了很好的了解 。现在,让我们来看看tail
命令。
Linux 中的 tail 命令与该
head
命令相同. tail 命令的基本语法是:
tail [OPTIONS] FILES
例如,以下命令将打印
/etc/locale.gen
文件的最后 10 行。
> tail /etc/locale.gen
#zh_HK.UTF-8 UTF-8
#zh_HK BIG5-HKSCS
#zh_SG.UTF-8 UTF-8
#zh_SG.GBK GBK
#zh_SG GB2312
#zh_TW.EUC-TW EUC-TW
#zh_TW.UTF-8 UTF-8
#zh_TW BIG5
#zu_ZA.UTF-8 UTF-8
#zu_ZA ISO-8859-1
与该
head
命令类似,你还可以使用以下命令打印最后几行-n
选项如下图。
> tail -n 3 /etc/locale.gen
#zh_TW BIG5
#zu_ZA.UTF-8 UTF-8
#zu_ZA ISO-8859-1
此前,我们从管道输出
head
到ls
。我们还可以将其他命令的输出通过管道传输到tail
.例如,要识别
/etc
目录中修改时间最早的五个文件或文件夹,并将输出通过管道传输到tail
:
> ls -t /etc/ | tail -n 5
wpa_supplicant
libpaper.d
papersize
mdadm.conf
gssapi_mech.conf
tail
命令中有一个更强大的功能。有时我们要检查的输入文件正在发生变化。例如,正在运行的应用程序可能会将其输出附加到日志文件中。如果我们执行tail
命令-f
更改文件上的选项,所有新添加的行都将附加到标准输出。例如,你可以看到添加到 Nginx 日志文件末尾的新行,因为它们被添加,如下所示:
> tail -f /var/log/nginx/access.log
当每个新的日志条目添加到日志文件时,
tail
将更新其在终端窗口中的显示。
由于
tail
和head
命令打印文件的不同部分,我们可以将这两者结合起来打印一些文件内容的高级过滤。例如,如果要从任何文件的中间读取内容,则必须同时使用这两个命令。假设我们想要从文件的第 5 行到第 10 行
/etc/passwd
。首先,head
command 将检索前 10 行,tail
command 将从 command 的输出中检索最后 5 行head
。
> head -n 10 /etc/passwd | tail -n 5
http:x:33:33::/srv/http:/usr/bin/nologin
nobody:x:65534:65534:Nobody:/:/usr/bin/nologin
dbus:x:81:81:System Message Bus:/:/usr/bin/nologin
systemd-journal-remote:x:982:982:systemd Journal Remote:/:/usr/bin/nologin
systemd-network:x:981:981:systemd Network Management:/:/usr/bin/nologin