文件管理 · 2023年11月27日

使用grep搜索日志文件|Linux中使用grep命令搜索文件名及文件内容的方法

『壹』 linux服务器中怎么查看日志内容

登录

kbkiss

Linux查看日志常用命令

1.查看日志常用命令

tail:

-n 是显示行号;相当于nl命令;例子如下:

tail -100f test.log 实时监控100行日志

tail -n 10 test.log 查询日志尾部最后10行的日志;

tail -n +10 test.log 查询10行之后的所有日志;

head:

跟tail是相反的,tail是看后多少行日志;例子如下:

head -n 10 test.log 查询日志文件中的头10行日志;

head -n -10 test.log 查询日志文件除了最后10行的其他所有日志;

cat:

tac是倒序查看,是cat单词反写;例子如下:

cat -n test.log |grep "debug" 查询关键字的日志

2. 应用场景一:按行号查看—过滤出关键字附近的日志

1)cat -n test.log |grep "debug" 得到关键日志的行号

2)cat -n test.log |tail -n +92|head -n 20 选择关键字所在的中间一行. 然后查看这个关键字前10行和后10行的日志:

tail -n +92表示查询92行之后的日志

head -n 20 则表示在前面的查询结果里再查前20条记录

3. 应用场景二:根据日期查询日志

sed -n '/2014-12-17 16:17:20/,/2014-12-17 16:17:36/p' test.log

特别说明:上面的两个日期必须是日志中打印出来的日志,否则无效;

先 grep '2014-12-17 16:17:20' test.log 来确定日志中是否有该 时间点

4.应用场景三:日志内容特别多,打印在屏幕上不方便查看

(1)使用more和less命令,

如: cat -n test.log |grep "debug" |more 这样就分页打印了,通过点击空格键翻页

(2)使用 >xxx.txt 将其保存到文件中,到时可以拉下这个文件分析

如:cat -n test.log |grep "debug" >debug.txt

『贰』 Linux系统日志怎么查看

1. 前言

在Linux日常管理中,我们肯定有查看某些服务的日志需求,或者是系统本身的日志。本文主要介绍如何查看Linux的系统日志,包括文件的路径、工具的使用等等。会看Linux日志是非常重要的,不仅在日常操作中可以迅速排错,也可以快速的定位。

2. 如何查看Linux日志

Linux日志文件的路径一般位于,/var/log/,比如ngix的日志路径为/var/log/nginx/,如果要查看某服务的日志,还可以使用systemctl status xxx,比如查看ssh服务的壮态,systemctl status sshd

查看Linux某服务的日志

Liunx的配置文件在/etc/rsyslog.d里,可以看到如下信息

在linux系统当中,有三个主要的日志子系统:

1、连接时间日志:由多个程序执行,把记录写入到/var/log/wtmp和/var/run/utmp,

login等程序会更新wtmp和utmp文件,使系统管理员能够跟踪谁在何时登录到系统。

2、进程统计:由系统内核执行,当一个进程终止时,为每个进程往进程统计文件中写一个记录。进程统计的目的是为系统中的基本服务提供命令使用统计

3、错误日志:由rsyslogd守护程序执行,各种系统守护进程、用户程序和内核通过rsyslogd守护程序向文件/var/log/messages报告值得注意的时间。另外有许多linux程序创建日志,像HTTP和FTP这样提供的服务器也保持详细的日志。

4、其他日志……

查看Linux日志默认路径

可以看到在/var/log目录下存在很多的日志文件,接下来就对里面的一些常用日志文件进行分析

主要日志文件介绍:

内核及公共消息日志:/var/log/messages

计划任务日志:/var/log/cron

系统引导日志:/var/log/dmesg

邮件系统日志:/var/log/maillog

用户登录日志:/var/log/lastlog

/var/log/boot.log(记录系统在引导过程中发生的时间)

/var/log/secure (用户验证相关的安全性事件)

/var/log/wtmp(当前登录用户详细信息)

/var/log/btmp(记录失败的的记录)

/var/run/utmp(用户登录、注销及系统开、关等事件)

日志文件详细介绍:

/var/log/secure

Linux系统安全日志,记录用户和工作组的情况、用户登陆认证情况

例子:我创建了一个zcwyou的用户,然后改变了该用户的密码,于是该信息就被记录到该日志下

Linux系统安全日志默认路径

该日志就详细的记录了我操作的过程。

内核及公共信息日志,是许多进程日志文件的汇总,从该文件中可以看出系统任何变化

查看Linux内核及公共信息日志

系统引导日志

该日志使用dmesg命令快速查看最后一次系统引导的引导日志

查看Linux系统系统引导日志

最近的用户登录事件,一般记录最后一次的登录事件

该日志不能用诸如cat、tail等查看,因为该日志里面是二进制文件,可以用lastlog命令查看,它根据UID排序显示登录名、端口号(tty)和上次登录时间。如果一个用户从未登录过,lastlog显示 Never logged。

该日志文件永久记录每个用户登录、注销及系统的启动、停机的事件。该日志为二进制文件,不能用诸如tail/cat/等命令,使用last命令查看。

记录邮件的收发

此文件是记录错误登录的日志,可以记录有人使用暴力破解ssh服务的日志。该文件用lastb打开

该日志记录当前用户登录的情况,不会永久保存记录。可以用who/w命令来查看

3. 常用的日志分析工具与使用方法

3.1 统计一个文本中包含字符个数

3.2 查看当天访问排行前10的url

3.3 查看apache的进程数

3.4 访问量前10的IP

cut部分表示取第1列即IP列,取第4列则为URL的访问量

3.5 查看最耗时的页面

按第2列响应时间逆序排序

3.6 使用grep查找文件中指定字符出现的次数

-o 指示grep显示所有匹配的地方,并且每一个匹配单独一行输出。这样只要统计输出的行数就可以知道这个字符出现的次数了。

4. 总结

查看Linux日志需求了解和熟悉使用一些常用的工具方能提升我们的查找和定位效率。比如使用 Grep 搜索,使用Tail命令,使用Cut,使用AWK 和 Grok 解析日志和使用 Rsyslog 和 AWK 过滤等等,只要能掌握这些工具。我们才能高效地处理和定位故障点。

https://www.linuxrumen.com/rmxx/647.html

『叁』 linux中grep命令的详细解释

linxu下的grep命令其实是一个搜索文件文本的工具。下面由我为大家整理了linux的grep命令的详细解释的相关知识,希望对大家有帮助!

一、linux中的grep命令的详细解释

1.作用

Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来。grep全称是Global Regular Expression Print,表示全局正则表达式版本,它的使用权限是所有用户。

2.格式

grep [options]

3.主要参数

[options]主要参数:

-c:只输出匹配行的计数。

-I:不区分大 小写(只适用于单字符)。

-h:查询多文件时不显示文件名。

-l:查询多文件时只输出包含匹配字符的文件名。

-n:显示匹配行及 行号。

-s:不显示不存在或无匹配文本的错误信息。

-v:显示不包含匹配文本的所有行。

pattern正则表达式主要参数:

: 忽略正则表达式中特殊字符的原有含义。

^:匹配正则表达式的开始行。

$: 匹配正则表达式的结束行。

<:从匹配正则表达 式的行开始。

>:到匹配正则表达式的行结束。

[ ]:单个字符,如[A]即A符合要求 。

[ – ]:范围,如[A-Z],即A、B、C一直到Z都符合要求 。

。:所有的单个字符。

* :有字符,长度可以为0。

二、linux中的grep命令的详解实例

1.grep命令使用简单实例

$ grep ‘test’ d*

显示所有以d开头的文件中包含 test的行。

$ grep ‘test’ aa bb cc

显示在aa,bb,cc文件中匹配test的行。

$ grep ‘[a-z]{5}’ aa

显示所有包含每个字符串至少有5个连续小写字符的字符串的行。

$ grep ‘w(es)t.*1′ aa

如果west被匹配,则es就被存储到内存中,并标记为1,然后搜索任意个字符(.*),这些字符后面紧跟着 另外一个es(1),找到就显示该行。如果用egrep或grep -E,就不用””号进行转义,直接写成’w(es)t.*1′就可以了。

2.grep命令使用复杂实例

假设您正在’/usr/src/Linux/Doc’目录下搜索带字符 串’magic’的文件:

$ grep magic /usr/src/Linux/Doc/*

sysrq.txt:* How do I enable the magic SysRQ key?

sysrq.txt:* How do I use the magic SysRQ key?

其中文件’sysrp.txt’包含该字符串,讨论的是 SysRQ 的功能。

默认情况下,’grep’只搜索当前目录。如果 此目录下有许多子目录,’grep’会以如下形式列出:

grep: sound: Is a directory

这可能会使’grep’ 的输出难于阅读。这里有两种解决的办法:

明确要求搜索子目录:grep -r

或忽略子目录:grep -d skip

如果有很多 输出时,您可以通过管道将其转到’less’上阅读:

$ grep magic /usr/src/Linux/Documentation/* | less

这样,您就可以更方便地阅读。

有一点要注意,您必需提供一个文件过滤方式(搜索全部文件的话用 *)。如果您忘了,’grep’会一直等着,直到该程序被中断。如果您遇到了这样的情况,按 <CTRL c> ,然后再试。

下面还有一些有意思的命令行参数:

grep -i pattern files :不区分大小写地搜索。默认情况区分大小写,

grep -l pattern files :只列出匹配的文件名,

grep -L pattern files :列出不匹配的文件名,

grep -w pattern files :只匹配整个单词,而不是字符串的一部分(如匹配’magic’,而不是’magical’),

grep -C number pattern files :匹配的上下文分别显示[number]行,

grep pattern1 | pattern2 files :显示匹配 pattern1 或 pattern2 的行,

grep pattern1 files | grep pattern2 :显示既匹配 pattern1 又匹配 pattern2 的行。

grep -n pattern files 即可显示行号信息

grep -c pattern files 即可查找总行数

这里还有些用于搜索的特殊符号:

< 和 > 分别标注单词的开始与结尾。

例如:

grep man * 会匹配 ‘Batman’、’manic’、’man’等,

grep ‘<man’ * 匹配’manic’和’man’,但不是’Batman’,

grep ‘<man>’ 只匹配’man’,而不是’Batman’或’manic’等其他的字符串。

‘^’:指匹配的字符串在行首,

‘$’:指匹配的字符串在行 尾,

『肆』 grep 用法

我们可以使用grep命令在文本中查找指定的字符串,可以把grep理解成字符查找工具。 默认情况下,grep是区分大小写的,使用 -i 选项搜索时忽略大小写。 如果我们想确定zabbix用户在passwd文件的第一行,使用-n选项,显示文本所在行号。 如果想知道文件中有多少行包含了指定字符串,使用-c选项可只统计符号条件的行,而不打印出来。 如果我们只想看到被匹配的关键字,而不是把关键字所在的整行都打印出来,使用-o选项,但是需要注意,-o选项会把每个匹配到的关键字都单独显示在一行中进行输出。 显示关键字附件的信息 -A after -B before -C content 如果我们需求精确匹配,就是搜索的关键字作为一个独立的单词存在,而不是包含在某个字符串中,使用-w选项,这时候nologin就没有被匹配到。 如果想取反,就是查找不包含指定字符串的行,使用-v选项。 如果想同时匹配多个目标,使用-e选项,他们之间是“或”的关系。 如果只是想利用grep判断文本中是否包含某个字符串,你只关心有没有匹配到,而不想输出,可以使用-q选项,开启静默模式。 掌握以上用法,基础的就够了,等学习了“正则表达式”,再回来结合一起发挥威力。 -i:在搜索的时候忽略大小写 -n:显示结果所在行号 -c:统计匹配到的行数,注意,是匹配到的总行数,不是匹配到的次数 -o:只显示符合条件的字符串,但是不整行显示,每个符合条件的字符串单独显示一行 -v:输出不带关键字的行(反向查询,反向匹配) -w:匹配整个单词,如果是字符串中包含这个单词,则不作匹配 -Ax:在输出的时候包含结果所在行之后的指定行数,这里指之后的x行,A:after -Bx:在输出的时候包含结果所在行之前的指定行数,这里指之前的x行,B:before -Cx:在输出的时候包含结果所在行之前和之后的指定行数,这里指之前和之后的x行,C:context -e:实现多个选项的匹配,逻辑or关系 -q:静默模式,不输出任何信息,当我们只关心有没有匹配到,却不关心匹配到什么内容时,我们可以使用此命令,然后,使用”echo $?”查看是否匹配到,0表示匹配到,1表示没有匹配到。 -P:表示使用兼容perl的正则引擎。 -E:使用扩展正则表达式,而不是基本正则表达式,在使用”-E”选项时,相当于使用egrep。 字符类 [ ] 括号内的仅匹配其中一个字符 如果我想要搜寻 test 或 taste 这两个单字时,可以发现到,其实她们有共通的 't?st' 字符类的反向选择 [^] 连续字符 [a-zA-Z0-9] 匹配行首 ^ 结合[]时要注意^的位置 匹配行尾 $ 我们来看 . 和 * 在正则中的含义 . 表示任意一个字符 星号*表示重复他前面的字符0次到无穷多次 限定范围的字符{} ,但因为 { 与 } 的符号在 shell 是有特殊意义的,因此, 我们必须要使用字符 \ 来让他失去特殊意义才行。 使用扩展grep -E fgrep 查询速度比grep命令快,但是不够灵活:它只能找固定的文本,而不是规则表达式。 在文本中找出包含#的行

『伍』 Linux中使用grep命令搜索文件名及文件内容的方法

从文件中搜索并显示文件名当你从不止一个的文件中搜索时,默认它将显示文件名:代码如下:grepword文件名greproot/etc/*示例输出:代码如下:/etc/bash.bashrc:Seemansudo_rootfordetails./etc/crontab:17****rootcd/run-parts–report/etc/cron.hourly/etc/crontab:256***roottest-x/usr/sbin/anacron||(cd/run-parts–report/etc/cron.daily)/etc/crontab:476**7roottest-x/usr/sbin/anacron||(cd/run-parts–report/etc/cron.weekly)/etc/group:root:x:0:grep:/etc/gshadow:Permissiondenied/etc/logrotate.conf:create0664rootutmp/etc/logrotate.conf:create0660rootutmp每行开始的第一个部分是文件名(如:/etc/crontab、/etc/group)。使用-l选项可以只显示文件名:代码如下:grep-lstringfilenamegrep-lroot/etc/*示例输出:代码如下:/etc/aliases/etc/arpwatch.confgrep:/etc/at.deny:Permissiondenied/etc/bash.bashrc/etc/bash_completion/etc/ca-certificates.conf/etc/crontab/etc/group你也可以逆转输出;使用-L选项来输出那些不匹配的文件的文件名:代码如下:grep-Lwordfilenamegrep-Lroot/etc/*示例输出:代码如下:/etc/apm/etc/apparmor/etc/apparmor.d/etc/apport/etc/apt/etc/avahi/etc/bash_completion.d/etc/bindresvport.blacklist/etc/blkid.conf/etc/bluetooth/etc/bogofilter.cf/etc/bonobo-activation/etc/brlapi.key根据文件内容查找文件输入以下命令:代码如下:grep'string'*.txtgrep'main('*.cgrep'#include'*.cgrep'getChar*'*.cgrep-i'ultra'*.confgrep-iR'ultra'*.conf其中-i:忽略模式(匹配字符串valid、VALID、ValID)和输入文件(匹配file.cFILE.cFILE.C)的大小写。-R:递归读取每个目录下的所有文件。高亮匹配到的模式在搜索大量文件的时候你可以轻松地高亮模式:代码如下:$grep–color=auto-iR'getChar();'*.c为查找到的模式显示文件名和行号你也许需要显示文件名和行号:代码如下:$grep–color=auto-iRnH'getChar();'*.c其中,-n:在输出的每行前面添加以1开始的行号。-H:为每个匹配打印文件名。要搜索多个文件时这是默认选项。(LCTT译注:-h选项强制隐藏文件名;另外-l和-L选项用于仅显示匹配/不匹配的文件名,而-H和-h用于控制在显示匹配行前显示/不显示文件名,注意区分。)代码如下:$grep–color=auto-nH'DIR'*输出样例:你也可以使用find命令:代码如下:$find.-name*.c-print|xargsgrepmain(

『陆』 grep命令

grep命令是一个强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。

正则表达式是描述一组字符串的一个模式,正则表达式可以是一些纯文本文字,也可以是用来产生模式的一些特殊字符。

grep命令在每一个文件或特定输出中搜索特定的模式,当使用grep时,会输出跟指定模式匹配的每一行,但是使用grep命令并不改变文件中的内容。

如果发现某文件的内容符合所指定的范本样式,预设grep指令会把含有范本样式的那一列显示出来。若不指定任何文件名称,或是所给予的文件名为-,则grep指令会从标准输入设备读取数据。

语法:grep [-abcEFGhHilLnqrsvVwxy][-A<显示行数>][-B<显示列数>][-C<显示列数>][-d<进行动作>][-e<范本样式>][-f<范本文件>][–help][范本样式][文件或目录…]。

参数:

-a或--text :不要忽略二进制的数据。

-A<显示行数>或--after-context=<显示行数>:除了显示符合范本样式的那一列之外,并显示该行之后的内容。

-b或--byte-offset :在显示符合样式的那一行之前,标示出该行第一个字符的编号。

-B<显示行数>或--before-context=<显示行数>:除了显示符合样式的那一行之外,并显示该行之前的内容。

-c或--count :计算符合样式的列数。

-C<显示行数>或--context=<显示行数>或-<显示行数>:除了显示符合样式的那一行之外,并显示该行之前后的内容。

-d <动作>或--directories=<动作>:当指定要查找的是目录而非文件时,必须使用这项参数,否则grep指令将回报信息并停止动作。

-e<范本样式>或--regexp=<范本样式>:指定字符串做为查找文件内容的样式。

-E或--extended-regexp :将样式为延伸的正则表达式来使用。

-f<规则文件>或--file=<规则文件>:指定规则文件,其内容含有一个或多个规则样式,让grep查找符合规则条件的文件内容,格式为每行一个规则样式。

-F或--fixed-regexp :将样式视为固定字符串的列表。

-G或--basic-regexp :将样式视为普通的表示法来使用。

-h或--no-filename :在显示符合样式的那一行之前,不标示该行所属的文件名称。

-H或--with-filename :在显示符合样式的那一行之前,表示该行所属的文件名称。

-i或--ignore-case :忽略字符大小写的差别。

-l或--file-with-matches :列出文件内容符合指定的样式的文件名称。

-L或--files-without-match :列出文件内容不符合指定的样式的文件名称。

-n或--line-number :在显示符合样式的那一行之前,标示出该行的列数编号。

-o或--only-matching :只显示匹配PATTERN部分。

-q或--quiet或--silent :不显示任何信息。

-r或--recursive :此参数的效果和指定"-d recurse"参数相同。

-s或--no-messages :不显示错误信息。

-v或--invert-match :显示不包含匹配文本的所有行。

-V或--version :显示版本信息。

-w或--word-regexp :只显示全字符合的列。

-x –line-regexp :只显示全列符合的列。

-y :此参数的效果和指定"-i"参数相同。

『柒』 grep搜索日志时,对字符串进行正则过滤

grep'executedin[0-9]*msec'a.log|whileread-rlinedonum=$(expr"$line":'.*executedin([0-9]*)')if["$num"-gt125]thenecho$linefidone

该shell脚本读取日志文件 a.log中所有executed in 后msec大于125的行

『捌』 如何查看日志

系统日志会记录系统出现的一些问题,那么我们可以根据这些日志来解决某些系统问题,如何查看系统日志呢?下面就给大家介绍两种查看电脑系统日志的操作方法。方法一:1、点击开始菜单,点击“控制面板”2、在控制面板中,点击“管理工具”。3、点击“事件查看器”。4、就可以看到系统日志内容信息了,每一条都很详细。方法二:1、在开始菜单中点击“运行”,输入eventvwr。2、点击确定即可瞬间打开系统日志。如果是Linux的话就比较简单了,你只要知道日志的位置,然后通过查看命令进行查看就可以了linux查看日志的常用命令有:1、“tail -100f test.log”命令;2、“head -n 10 test.log ”命令;3、“tail -n +92”命令;4、“head -n 20”;5、“sed”命令等等。1.linux 查看日志常用命令tail:-n 是显示行号;相当于nl命令;例子如下:tail -100f test.log 实时监控100行日志tail -n 10 test.log 查询日志尾部最后10行的日志;tail -n +10 test.log 查询10行之后的所有日志;head:跟tail是相反的,tail是看后多少行日志;例子如下:head -n 10 test.log 查询日志文件中的头10行日志;head -n -10 test.log 查询日志文件除了最后10行的其他所有日志;cat:tac是倒序查看,是cat单词反写;例子如下:cat -n test.log |grep "debug" 查询关键字的日志2. 应用场景一:按行号查看—过滤出关键字附近的日志1)cat -n test.log |grep "debug" 得到关键日志的行号2)cat -n test.log |tail -n +92|head -n 20 选择关键字所在的中间一行. 然后查看这个关键字前10行和后10行的日志:tail -n +92表示查询92行之后的日志head -n 20 则表示在前面的查询结果里再查前20条记录3. 应用场景二:根据日期查询日志sed -n '/2014-12-17 16:17:20/,/2014-12-17 16:17:36/p' test.log特别说明:上面的两个日期必须是日志中打印出来的日志,否则无效;先 grep '2014-12-17 16:17:20' test.log 来确定日志中是否有该 时间点4.应用场景三:日志内容特别多,打印在屏幕上不方便查看(1)使用more和less命令,如: cat -n test.log |grep "debug" |more 这样就分页打印了,通过点击空格键翻页(2)使用 >xxx.txt 将其保存到文件中,到时可以拉下这个文件分析如:cat -n test.log |grep "debug" >debug.txt

『玖』 linux查看日志命令

linux查看日志命令:

tail:

-n是显示行号;相当于nl命令;例子如下:

tail -100f test.log实时监控100行日志。

tail -n 10 test.log查询日志尾部最后10行的日志。

tail -n +10 test.log查询10行之后的所有日志。

head:

跟tail是相反的,tail是看后多少行日志;例子如下:

head -n 10 test.log查询日志文件中的头10行日志。

head -n -10 test.log查询日志文件除了最后10行的其他所有日志。

cat:

tac是倒序查看,是cat单词反写;例子如下:

cat -n test.log |grep "debug"查询关键字的日志。

命令功能:

tail用于显示指定文件末尾内容,不指定文件时,作为输入信息进行处理。常用于查看日志文件后多少行日志信息。

使用tail -f可以查看动态日志文件,tail -f filename可以把filename里最尾部的内容显示在屏幕上,并且不断刷新,使你看到最新的文件内容。

tail -n行数可以显示指定行数信息。