【背景】

排查线上环境问题,少不了去线上查日志。而使用什么命令,能快速准确地查到我们需要查找地日志信息,也是我们需要掌握的一项技能。

【命令】

Linux查看命令有多种:tail,head,cat,tac,more

(一) tail 命令

tail [ -f ] [ -c Number | -n Number | -m Number | -b Number | -k Number ] [ File ]

参数:
1)-f 循环读取
2)-q 不显示处理信息
3)-v 显示详细的处理信息
4)-c Number 从 Number 字节位置读取指定文件
5)-n Number 从 Number 行位置读取指定文件
6)-m Number 从 Number 多字节字符位置读取指定文件,比方你的文件假设包括中文字,假设指定-c参数,可能导致截断,但使用-m则会避免该问题
7)-b Number 从 Number 表示的512字节块位置读取指定文件。
8)-k Number 从 Number 表示的1KB块位置读取指定文件。

上述命令中,都涉及到number,假设不指定,默认显示10行。Number前面可使用正负号,表示该偏移从顶部还是从尾部開始计算。

应用:
命令 含义
tail -f test.log 查看实时日志
tail -100f test.log 查看最后100行日志记录
tail -n 10 test.log 查询日志尾部最后10行的日志
tail -n +10 test.log 查询10行之后的所有日志
tail -fn 100 test.log 循环实时查看最后100行记录

(二) head 命令

功能跟tail是相反的,tail是查看后多少行日志

命令 含义
head -n 10 test.log 查询日志文件中的前10行日志
head -n -10 test.log 查询日志文件除了最后10行的其他所有日志

(三) cat 命令

功能
1)一次显示整个文件。 cat filename
2)创建一个文件。 cat > filename
3)将几个文件合并为一个文件。 cat file1 file2 > file

参数:
1)-n 由1开始对所有输出的行数编号
2)-b 和-n相似,只不过对于空白行不编号
3)-s 当遇到有连续两行以上的空白行,就代换为一行的空白行
4)-c 显示的字节数
5)-n 显示行数

应用
1)cat test.log | tail -n 1000 #输出test.log 文件最后1000行

2)cat -n test.log |grep “debug” #得到关键日志的行号

3)cat filename | tail -n +3000 | head -n 1000 #从第3000行开始,显示1000行。即显示3000~3999行

4)cat filename| head -n 3000 | tail -n +1000 #显示1000行到3000行

5)cat -n textfile1 > textfile2 #把 textfile1 的档案内容加上行号后输入 textfile2 这个档案里

6)cat -b textfile1 textfile2 >> textfile3 #把 textfile1 和 textfile2 的档案内容加上行号(空白行不加)之后将内容附加到 textfile3 里

7)cat error.log | grep -C 5 'nick' 显示file文件里匹配foo字串那行以及上下5行
cat error.log | grep -B 5 'nick' 显示foo及前5行
cat error.log | grep -A 5 'nick' 显示foo及后5行

(四) tac 命令

功能
tac是将cat反写过来,它的功能跟cat相反,cat是由第一行到最后一行连续显示,而tac是由最后一行到第一行反向显示。

(五) more 命令

功能
类似cat,不过以一页一页形式显示。基本指令按空白键(space)往下一页显示,按返回键(back)往上一页显示,还有字符搜索功能(与vi相似)

参数
1)-num 一次显示的行数

2)-d 提示使用者,在画面下方显示 [Press space to continue, ‘q’ to quit.] ,如果使用者按错键,则会显示 [Press ‘h’ for instructions.] 而不是 ‘哔’ 声

3)-l 取消遇见特殊字元 ^L 时会暂停的功能

4)-f 计算行数时,以实际上的行数,而非自动换行过后的行数

5)-p 不以卷动的方式显示每一页,而是先清除萤幕后再显示内容

6)-c 跟 -p 相似,不同的是先显示内容再清除其他旧资料

7)-s 当遇到有连续两行以上的空白行,就代换为一行的空白行

8)-u 不显示下引号 (根据环境变数 TERM 指定的 terminal 而有所不同)

9)+/pattern 在每个文档显示前搜寻该字串(pattern),然后从该字串之后开始显示

10)+num 从第 num 行开始显示

应用
如果我们查找的日志很多,打印在屏幕上不方便查看, 使用more和less命令,
如: cat -n test.log |grep "条件" |more 这样就分页打印了,通过点击空格键翻页

命令 含义
more -s test.log 逐页显示日志,如有连续两行以上空白行则以一行空白行显示
more +20 test.log 从第 20 行开始显示日志内容

(六) grep 命令

功能:
上面几个命令都是用在查找文件方便,而在查找文件时,我们往往需要通过某些关键字查找,grep命令就可以帮助我们实现快速查找。

参数:
[options]主要参数:
-c:只输出匹配行的计数。
-I:不区分大 小写(只适用于单字符)。
-h:查询多文件时不显示文件名。
-l:查询多文件时只输出包含匹配字符的文件名。
-n:显示匹配行及 行号。
-s:不显示不存在或无匹配文本的错误信息。
-v:显示不包含匹配文本的所有行。
pattern正则表达式主要参数:
: 忽略正则表达式中特殊字符的原有含义。
^:匹配正则表达式的开始行。
$: 匹配正则表达式的结束行。
<:从匹配正则表达 式的行开始。

:到匹配正则表达式的行结束。
[ ]:单个字符,如[A]即A符合要求 。
[ - ]:范围,如[A-Z],即A、B、C一直到Z都符合要求 。
。:所有的单个字符。

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

操作:
1、或操作
grep -E '123|abc' filename // 找出文件(filename)中包含123或者包含abc的行
egrep '123|abc' filename // 用egrep同样可以实现
awk '/123|abc/' filename // awk 的实现方式

2、与操作
grep pattern1 files | grep pattern2 :显示既匹配 pattern1 又匹配 pattern2 的行。

3、其他操作
grep -i pattern files :不区分大小写地搜索。默认情况区分大小写,
grep -l pattern files :只列出匹配的文件名,
grep -L pattern files :列出不匹配的文件名,
grep -w pattern files :只匹配整个单词,而不是字符串的一部分(如匹配‘magic’,而不是‘magical’),
grep -C number pattern files :匹配的上下文分别显示[number]行,

应用
1)more joint.log | grep ‘60007746’ #根据某退货号查询日志

很多时候,我们都需要看到上下几行的日志,可以通过加相关参数实现。

2)more joint.log | grep -5 ‘60007746’ #打印匹配行的前后5行

3)more joint.log | grep -C 5 ‘60007746’ #打印匹配行的前后5行

4)more joint.log | grep -A 5 ‘60007746’ #打印匹配行的后5行

5)more joint.log | grep -B 5 ‘60007746’ #打印匹配行的前5行

6)cat -n umltech-scan |grep 'reqBody' #在日志文件中查找某个字符串:cat -n 日志文件 |grep '查找内容',如果内容太多可以通过后面加more,通过空格查看下一页

7)cat -n umltech-scan |grep 'reqBody'>/test #将按条件查询到的日志内容保存到文件中:cat -n 日志文件|grep '查找内容' >保存位置

(七)sed

应用
sed -n '5,10p' filename 这样你就可以只查看文件的第5行到第10行。

sed -n '/2018-02-06 15:05:38/,/2018-02-06 15:20:38/p' umltech-scan
按时间段查询日志:sed -n '/开始时间/,/结束时间/p' umltech-scan,时间格式为"yyyy-mm-dd hh:mm:ss"

(八)vi

应用
查找文件内容关键字方法:
先 执行命令>: vi filename
然后输入>: /查找字符串
按n查找下一个,按N(大写)查找上一个

【总结】

熟悉常用的Linux命令也是我们必须要掌握的一项技能,这样在查找问题过程中也能更加高效速度。

参考:
https://blog.csdn.net/hu_zhiting/article/details/88319528
https://jingyan.baidu.com/article/656db918fccd01e381249c2b.html
https://blog.csdn.net/lychbeyond/article/details/41042483
http://blog.sina.com.cn/s/blog_65e13da00100of1f.html
https://blog.csdn.net/u011641008/article/details/79527929

linux查询日志命令总结的更多相关文章

  1. Linux查询日志内容

    1.查询日志中含有某个关键字的信息 cat app.log |grep 'error' 2.查询日志尾部最后10行的日志 tail -n 10 app.log 3.查询10行之后的所有日志 tail ...

  2. linux查询日志常用命令,经常更新

    1.grep命令 grep -c "查询内容" filename    ------c,是小写,可以知道你要查询的内容在这个文件中是否存在 grep -C 10 "查询内 ...

  3. Linux查询系统信息命令

    Linux查看系统信息是比较基础的知识,所以这个应该都需要掌握,命令和解释如下: #uname -a           查看操作系统.内核.CPU信息 #head -n 1 /etc/issue   ...

  4. linux 查看日志命令

    linux中命令cat.more.less均可用来查看文件内容, 区别:cat是一次性显示整个文件的内容,还可以将多个文件连接起来显示,它常与重定向符号配合使用,适用于文件内容少的情况:more和le ...

  5. Linux 截取日志命令

    1.截取时间段 截取 2019-06-25 10:10 到 2019-06-25 10:20 之间的日志记录,apollo-service.log 为你要截取的文件名称, new2.log 截取之后保 ...

  6. linux 查询文件命令

    jps; 当前服务器中所有的java进程: jps |grep XXX; 查询当前服务器某个进程: locate xxx;查询某个文件的位置:

  7. Linux查看日志命令

    tail -f /var/log/apport.log more /var/log/xorg.0.log cat /var/log/mysql.err less /var/log/messages g ...

  8. Linux查看日志命令- more、less、tail、head命令的区别

    参考:https://blog.csdn.net/caib1109/article/details/52195942 1.more 2.tail 3.less 4.cat 5.head

  9. LINUX查询用户命令

    W 可显示开机多久,当前登录的所有用户,平均负载 Who 显示当前登录的所有用户 Last 显示每个用户最后的登录时间 Lastlog 显示每个用户最后的登录时间

随机推荐

  1. Git-------常用操作记录

    说明: 一般情况下,git要将内容提交到本地仓库,都是先将内容提交到暂存区,然后再从暂存区提交到本地仓库. 常用命令(一个简单的示例操作): git init:会默认创建一个分支,命名为master ...

  2. jenkins 批量修改svn 地址

    svn服务器的ip变了,jenkins里那么多任务一个个修改要疯了, 每个已经创建后的任务的svn 地址都配置在 jenkins 主目录下的jobs 里对应的任务下的config.xml 里 在job ...

  3. tornado框架自定义中间件过程中的一些基础技术(1)

    为了检查当前请求是否在用户的权限列表中,我们需要获取uri(也就是当前链接),下列代码说明了获取的过程,也证明了python魔术方法的重要性class testHandler(RequestHandl ...

  4. 题解 【POJ1934】 Trip

    题目意思: 有两个字符串(长度\(<=80\)),按字典序输出它们的最长公共子串的所有情况. 解析 最长公共子序列的长度应该都没问题了吧...有问题请自行百度 但关键是要求出每种情况,还要按字典 ...

  5. 题解 【POI2008】KUP-Plot purchase

    题面 先把题目意思讲一下吧: 给一个 \(n*n\) 的地图,每个格子有一个价格,找一个矩形区域,使其价格总和位于\([k,2k]\). 那么首先,可以想到,如果\(a[i][j]\)(格子的价格,下 ...

  6. 【Wince-ListView】Wince中的 ListView怎么显示网格?

    using System.Runtime.InteropServices; using System.Windows.Forms; namespace CETEST { public class Co ...

  7. 【原创】谈一个数学教育专业的IT职业生涯

    2003年,有许多值得记住,第一个是非典,第二个就是高考数学卷.直到今年2019年,时隔16年,有人说2019年高考数学卷难度堪比2003年,但还没难到2003年的程度. 我,2003年高考,进考场先 ...

  8. Spring——代理实现AOP

    一.静态代理实现 1.接口(抽象主题) 2.接口的实现类(真实主题) 3.代理类(代理主题) 4.测试类: ApplicationContext context=new ClassPathXmlApp ...

  9. Codeforces 385C Bear and Prime Numbers(素数预处理)

    Codeforces 385C Bear and Prime Numbers 其实不是多值得记录的一道题,通过快速打素数表,再做前缀和的预处理,使查询的复杂度变为O(1). 但是,我在统计数组中元素出 ...

  10. ESPCMS的CSRF添加管理员账号

    ESPCMS的CSRF添加管理员账号 前言 这里开始的思路是先注入进去 然后getshell 但是不关CSRF什么事 换思路 看了一下群消息  大哥发了一个视频  后台名称admin  admin12 ...