在 Linux 中查看巨大日志文件 10 个很好用的示例

举报
Tiamo_T 发表于 2021/11/09 10:27:42 2021/11/09
【摘要】 查看巨大的日志文件以排除故障对于系统管理员和程序员来说是一项平凡的日常任务。 在本文中,让我们使用 10 个很好用的示例来回顾如何有效地查看和操作巨大的日志文件。

查看巨大的日志文件以排除故障对于系统管理员和程序员来说是一项平凡的日常任务。

在本文中,让我们使用 10 个很好用的示例来回顾如何有效地查看和操作巨大的日志文件。


示例 1:使用 sed 命令显示文件的特定行(基于行号)

仅查看行号提到的特定行。

Syntax: $ sed -n -e Xp -e Yp FILENAME
  • sed : sed 命令,默认打印所有行。
  • -n :抑制输出。
  • -e CMD : 要执行的命令
  • Xp:打印行号 X
  • Yp:打印行号 Y
  • FILENAME :要处理的文件的名称。

下面提到的示例将从系统日志中打印第 120、145、1050 行。

$ sed -n -e 120p -e 145p -e 1050p /var/log/syslog

在下面的示例中,您可以查看 var/log/cron 从第 101 行到 110 行的内容。

  • M - 起始行号
  • N – 结束行号
Syntax: head -n N FILENAME

$ head -n 15 /var/log/maillog

示例 2:使用 head 命令显示文件的前 N ​​行

此示例仅显示 /var/log/maillog 文件的前 15 行。将 15 更改为 10 以显示日志文件的前 10 行。


Syntax: head -n -N FILENAME

$ head -n -250 /var/log/secure

示例 3:使用 head 命令忽略文件的最后 N 行

此示例显示如何忽略最后 N 行,并仅显示文件顶部的剩余行。

以下示例将显示 /var/log/secure 中除最后 250 行之外的所有行。

语法:head -n -N 文件名

$ head -n -250 /var/log/secure

示例4:使用tail命令显示文件的最后N行

此示例仅显示 /var/log/messages 文件的最后 50 行。将 50 更改为 100 以显示日志文件的最后 100 行。

Syntax: tail -n N FILENAME

$ tail -n 50 /var/log/messages

示例 5:使用 tail 命令忽略文件的前 N-1 行

此示例显示如何忽略前 N-1 行并仅显示其余行。

以下示例忽略了 /etc/xinetd.conf 的前四行,其中仅包含注释。

Syntax: tail -n +N FILENAME

$ tail -n +5 /etc/xinetd.conf
defaults
{
        instances               = 60
        log_type                = SYSLOG authpriv
        log_on_success          = HOST PID
        log_on_failure          = HOST
        cps                     = 25 30
}
includedir /etc/xinetd.d

示例6:使用tail命令实时查看不断增长的日志文件

这可能是系统管理员最常用的命令之一。要查看不断增长的日志文件并仅查看较新的内容,请使用 tail -f ,如下所示。

以下示例实时显示 /var/log/syslog 命令的内容。

Syntax: tail -f FILENAME

$ tail -f /var/log/syslog

示例 7:使用 head 和 tail 命令显示文件的特定行(基于行号)

下面的示例将显示 /var/log/anaconda.log 文件的第 101 – 110 行

  • M - 起始行号
  • N – 结束行号
Syntax: cat file | tail -n +N | head -n (M-N+1)

$ cat /var/log/anaconda.log | tail -n +101 | head -n 10
  • cat :将整个文件打印到标准输出。
  • tail -n +101 :忽略给定行号之前的行,然后在给定行号之后开始打印行。
  • head -n 10 :打印前 10 行,即 101 到 110 并忽略其余行。

示例 8:显示匹配模式的行,以及匹配后的几行。

以下示例显示与 /var/log/dmesg 中的“Initializing CPU”匹配的行以及该匹配之后的 5 行。

# grep "Initializing CPU#1" /var/log/dmesg
Initializing CPU#1
[Note: The above shows only the line matching the pattern]

# grep -A 5 "Initializing CPU#1" dmesg
Initializing CPU#1
Calibrating delay using timer specific routine.. 3989.96 BogoMIPS (lpj=1994982)
CPU: After generic identify, caps: bfebfbff 20100000 00000000 00000000
CPU: After vendor identify, caps:  bfebfbff 20100000 00000000 00000000
monitor/mwait feature present.
CPU: L1 I cache: 32K, L1 D cache: 32K
[Note: The above shows the line and 5 lines after the pattern matching]

正如我们之前的 grep 命令文章中所解释的,可以进行以下操作。

  • 查看由模式标识的特定行,这是 grep 的默认功能。
  • 仅查看匹配的字符。
  • 使用 -A 选项在匹配后查看 N 行。
  • 使用 -B 选项查看匹配前的 N 行。
  • 使用 -C 选项查看比赛周围的 N 行。

示例 9:显示文件中的特定字节。

以下示例说明如何显示文件的前 40 个字节或最后 30 个字节。

显示系统日志的前 40 个字节。

$ head -c40 /var/log/syslog

显示来自 syslog 的最后 30 个字节。

$ tail -c30 /var/log/syslog

示例 10:查看压缩日志文件

在特定时间之后,所有系统日志文件都将被轮换和压缩。您可以即时解压缩它,并将输出通过管道传输到另一个 unix 命令以查看文件,如下所述。

  • 显示压缩文件的前 N ​​行。
    $ zcat file.gz | head -250
  • 显示压缩文件的最后 N 行。
    $ zcat file.gz | tail -250
  • 忽略压缩文件的最后 N 行。
    $ zcat file.gz | head -n -250
  • 忽略压缩文件的前 N ​​行。
    $ zcat file.gz | tail -n +250
  • 查看与模式匹配的行
    $ zcat file.gz | grep -A2 'error'
  • 查看由行号标识的特定范围的行。
    $ zcat file.gz | sed -n -e 45p -e 52p


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。