≡菜单

在Unix中查看巨大日志文件的10个很棒的示例

在Linux中查看日志文件查看大量日志文件以进行故障排除是系统管理员和程序员的日常工作。

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

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

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

Syntax: $ sed -n -e Xp -e Yp FILENAME
  • sed : sed command, which 将print all the lines 通过 default.
  • -n:抑制输出。
  • -e CMD:要执行的命令
  • Xp:打印行号X
  • Yp:打印行号Y
  • FILENAME:要处理的文件的名称。

的example mentioned below 将print the lines 120, 145, 1050 from the syslog.

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

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

  • M –起始行号
  • N – Ending line number
Syntax: sed -n M,Np FILENAME

$ sed -n 101,110p / var / log / cron

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

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

Syntax: head -n N FILENAME

$ head -n 15 /var/log/maillog

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

本示例说明如何忽略最后N行,并仅显示文件顶部的其余行。

的following example 将display all the lines of the /var/log/secure except the last 250 lines.

Syntax: head -n -N FILENAME

$ 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行,仅显示其余行。

的following example ignores the 1st four lines of the /etc/xinetd.conf, which contains 上ly the 评论.

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命令实时查看增长的日志文件

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

的following example shows the content of the /var/log/syslog command in real-time.

Syntax: 尾-f FILENAME

$ 尾-f /var/log/syslog

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

的example below 将display line numbers 101 –/var/log/anaconda.log文件中的110

  • M –起始行号
  • N – Ending line number
Syntax: cat 科幻le | 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:显示与模式匹配的行,以及匹配后的几行。

的following example displays the line that matches “Initializing CPU”从/ var / log / dmesg和此匹配后的5行开始。

# grep"初始化CPU#1" /var/log/dmesg
Initializing CPU#1
[Note: 的above shows 上ly the line matching the pattern]

# grep-A 5 "初始化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: 的above shows the line and 5 lines after the pattern matching]

请参阅我们之前的文章 掌握Grep! – 15个实用的Grep命令示例 that explains how to use grepcommand.

如我们先前的grep命令文章所述,以下操作是可行的。

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

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

的following example explains how to display either the top 40 or the last 30 通过tes of a 科幻le.

显示syslog中的前40个字节。

$ head -c40 /var/log/syslog

显示syslog中的最后30个字节。

$ tail -c30 /var/log/syslog

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

在特定时间后,所有系统日志文件都将旋转并压缩。您可以动态解压缩它,然后将输出通过管道传递到另一个unix命令以查看文件,如下所述。

请参阅我们之前的文章 的Power of Z Commands – Zcat, Zless, Zgrep, Zdiff Examples

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

如果您需要返回, 将此页面收藏在del.icio.us 方便参考。

如果您喜欢这篇文章,您可能还会喜欢..

  1. 50个Linux Sysadmin教程
  2. 50个最常用的Linux命令(包括示例)
  3. 排名前25位的最佳Linux性能监视和调试工具
  4. 妈妈,我找到了! – 15个实用的Linux Find命令示例
  5. Linux 101 Hacks第二版电子书 Linux 101黑客手册

Bash 101 Hacks书 Sed和Awk 101黑客手册 Nagios Core 3书 Vim 101黑客手册

{ 24 评论… 加一 }

  • 罗伯特·费希尔 2009年8月12日,3d捕鱼达人1:22

    我多次使用示例8寻找对特定错误的响应。我也曾经使用过tail和head命令,从来没有真正参与过sed,但是那个例子是一个很好的例子。感谢您发布此信息。

  • 尼科 2009年8月12日,3d捕鱼达人2:23

    仅供参考:less(1)的更高版本还显示.gz文件。

  • 尼科 2009年8月12日,3d捕鱼达人2:26

    O – and before I forget…您可以组合一些解决方案,例如组合#6和#8:$ 尾-f / some / 科幻le | grep关键字

    当您记录关键字时,这只会给您包含关键字的行。

  • 尼古拉斯·斯特林 2009年8月12日,3d捕鱼达人2:40

    怎么样

    sed -n 300,350p foo.log

    编辑:哎呀—多么尴尬。您覆盖了它,而我却以某种方式错过了它。

  • 阿什什 2009年8月12日,3d捕鱼达人5:12

    很棒的帖子
    非常有用的文章。

  • 罗纳德 2009年8月12日,3d捕鱼达人8:45

    的“sed -n 101,110p / var / log / cron”方法真的很有用。虽然我不得不说我不会’在查看sed-manual时没有想到该命令…. 🙁

    塞德:
    -n,–quiet, –silent
    禁止自动打印图案空间

    p打印当前图案空间。

  • 科恩·德·杰格(Koen De Jaeger) 2009年8月13日,3d捕鱼达人9:27

    非常好!

  • 拉梅什·纳塔拉詹(Ramesh Natarajan) 2009年8月14日,3d捕鱼达人8:56

    @罗伯特

    Sed可以做很多令人惊奇的事情。但是很难记住那些在你头上的东西。我有接近100 sed命令,可以解决笔记本中的一些常见问题,只要有需要,我就可以复制/粘贴该笔记本。

    该列表中的示例1。 --

    @Nico,

    感谢您指出了这一点。我们大多数人都忘记了grep可以与“tail -f”。这确实非常方便。

    @尼古拉斯

    唐’t worry. I’我已经犯了几次类似的错误。因此,我可以与此相关。 --

    @ 阿什什,@ Koen

    I’我很高兴您发现本文很有帮助。

    @罗纳德,

    是的那就是Unix的美。我们可以使用手册中没有明确提到的linux命令来完成令人惊奇的事情。这也是Windows管理员不这样做的原因’喜欢Linux,因为他们讨厌阅读手册。即使他们阅读了手册,也并不能很好地解释它。

  • 舍卡 2009年8月24日,3d捕鱼达人5:13

    很好的文章很好地介绍了头,尾和sed的用法。谢谢你。

  • 特德 2009年9月13日,3d捕鱼达人12:06

    的sed tip I 将use for sure and I also like the 尾-f |grep. Thank you Ramesh.

    您是否有机会在某个时候从笔记本中发布最有用的sed命令?

  • 比平 2010年5月6日,3d捕鱼达人5:49

    好东西。感谢分享。

  • 布拉德 2010年7月14日,3d捕鱼达人8:49

    您显示了zcat,但也有bzcat和lzcat,可能还有其他几个。因此,如果您的文件是bzip2’d or lzma’d,然后可以分别使用bzcat和lzcat来显示它们。而且,它可以通过管道传递给less命令,以便可以在终端上滚动。

  • 安东 2010年8月6日,3d捕鱼达人3:24

    以下内容是否比zcat logfile.gz更好(即更有效)|尾巴 ???

    #模拟ztail ???

    zless + F logfile.gz

  • 洛根 2011年2月21日,3d捕鱼达人12:11

    或者你可以随时使用

    猫日志文件|减

    让您滚动浏览

    要么

    猫日志文件|减 | grep“PATTERN”

    让您滚动匹配的条目
    我在sshd中搜索我的auth.log文件,并且可以看到所有并且只有ssh服务器条目

  • ks 2011年3月2日,下午5:45

    一个很好用的教程。关于@logan的上述评论的一些评论:

    $ cat日志文件|减
    与...具有相同的效果
    日志文件减少$
    因此使用管道是多余的(‘$’代表命令提示符)。两者都允许您滚动日志文件并使用以下命令搜索模式‘/’ and ‘?’ (similar to vim).

    但是,第二
    $ cat日志文件|减 | grep“PATTERN”
    不允许您滚动,但以下内容
    $ grep“PATTERN” logfile | less
    将—仅通过具有匹配模式的行“PATTERN”.

  • 埃尔南 2012年7月2日,3d捕鱼达人9:34

    示例7:字母M,N颠倒。它应该是

    语法:cat文件|尾-n + M |头-n(N-M + 1)

  • hai 2013年3月7日,下午4:18

    你好,

    如何获取日志文件中字符串的第一次出现和最后一次出现之间的所有行。

    示例:test.log包含以下内容
    葡萄
    苹果
    香蕉
    番茄
    土豆
    苹果
    番木瓜
    草莓

    要获取苹果的第一次出现和最后一次出现之间的所有分界线,因此输出如下:
    苹果
    香蕉
    番茄
    土豆
    苹果

  • 安奇 2013年9月16日,3d捕鱼达人10:31

    你好

    真的很有帮助。但是,我们如何在大文件中进行更改,或者如何在编辑模式下打开大文件呢?

  • 巴布 2013年11月18日,3d捕鱼达人5:40

    我有一个要求,例如获取日志文件的所有行,这些行是在5分钟前添加的?

  • 阿比 2014年1月3日,3d捕鱼达人2:47

    @Babu,
    您可以通过grep命令使用正则表达式,
    grep“Jan 3 00:5[1-6]” /var/log/messages.
    This 将print log messages from Hrs 00:51 to 00:56 for January 3rd.

  • Anwsering_Shai 2014年11月23日,3d捕鱼达人6:05

    MYFILE = test.log
    ARR =(`grep -n 苹果“$MYFILE”`)
    如果[$ {#ARR [*]} -lt 2];则
    回声“错误至少需要发生2次‘apple'”
    exit 1
    科幻
    FIRST =`echo $ {ARR [0]} |切-d:-f1`
    LAST =`echo $ {ARR [-1]} |切-d:-f1`
    回声sed -n ${FIRST},${LAST}p “$MYFILE”

  • 普拉文 2016年3月7日,3d捕鱼达人12:08

    谢谢。这有帮助

  • 乔蒂 2016年12月27日,3d捕鱼达人3:22

    您能帮我写一下shell脚本吗,它将不断轮询日志文件中是否有错误。如果出现任何错误,则将通过电子邮件发送该错误。

  • 舒菲尔 2017年2月20日,3d捕鱼达人1:29

    我正在查找grep的bash脚本,表示从日志文件中提取了最后5个minimini条目,我已经尝试了许多脚本,但是ots却无法运行,我认为那里有一些约会的问题,你可以帮助我吗?

发表评论