Tail 在查看log的时候,调试和检查故障的时候比较有用







认识您的文本实用程式

Jacek Artymiak
自由顾问、研发人员和作家
2002 年 10 月 09 日

Column iconJacek 在本技巧文章中介绍了 head 和 tail 命令,他们对于以块方式处理静态和动态文档中的数据很有用。

假定您想只处理文档的一部分,譬如头几行或后几行,那您该怎么做呢?请使用 head (他将头 10 行发送至标准输出)或 tail (他将后 10 行发送至标准输出)。

您能够通过使用 -n 选项改变这些命令发送至其标准输出的行数(当然,输出结果将随 XF86Config 文档的内容而不同):

清单 1. 将 XF86Config 中选定行数的内容发送至标准输出

$ head -n 4 /etc/X11/XF86Config

# File generated by anaconda.

# **********************************************************************

# Refer to the XF86Config(4/5) man page for details about the format of

# this file.


$ tail -n 4 /etc/X11/XF86Config
Modes "1600x1200"

ViewPort 0 0

EndSubsection

EndSection

假如您想让 headtail 以字节而不是以行为单位,那该怎么办呢?您能够用 -c 选项代替 -n 选项。因此,要显示前 200 个字符,请使用 head -c 200 file ,或使用 tail -c 200 file 来显示后 200 个字符。假如数字后面跟有 b (表示块(block)),那么这个数字将被乘以 512。类似地,跟有 k (表示千字节(kilobyte))表示用 1024 去乘给定的数字,而跟有 m (表示兆字节(megabyte))表示用 1048576 字节去乘给定的数字。

请记住, head file1 file2 file3cat file1 file2 file3 | head 之间有重大差别。前者将打印每个文档指定行数的内容,不同文档的内容之间用头信息隔开,头信息以 ==> 后跟文档名开头。后者将打印由 cat 命令后所列文档组成的输入流中指定行数的内容,但将把输入流作为单个文档对待。能够使用 -q (表示静默(quiet))选项关闭文档名头信息。和 -q 相反的是 -v (表示详列(verbose))。

假如您要处理的文档在处理期间一直在发生变化(比如,当您让 headtail 读取来自正在被另一个命令写入的文档的数据时,就是这种情况),请使用 -f 选项让 tail 持续读取来自指定文档的数据并将这些数据发送至 tail 自己的标准输出中。通过管道发送数据时该选项会被忽略。因此, cat file | tail -f 将不会得到所期望的结果,但 tail -f file 则能够。

(假如 tail 正在读取的文档不止一个,那么各行内容之间将用标准头信息隔开,以指明他们来自哪个文档,标准头信息以 ==> 开头。)

这个选项用于监控系统日志再合适但是,譬如,在单独的终端窗口(或单独的控制台)中执行的 tail -f /var/log/access.log 将持续打印每次点击后新添加的 Apache 访问日志条目,一直到您用 Ctrl-C 停止他为止。

通过组合使用 headtail ,能够从文档的中间部分读取给定长度的一块数据!下面说明如何做到:假定您想从文档开头算起第 1000 字节处开始读取一块 789 字节的数据。能够使用 cat file | head -c 1788 | tail -c 789 来解决这一问题。

文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!