日志打印

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

【命令】
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命令也是我们必须要掌握的一项技能,这样在查找问题过程中也能更加高效速度。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,098评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,213评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,960评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,519评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,512评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,533评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,914评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,574评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,804评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,563评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,644评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,350评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,933评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,908评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,146评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,847评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,361评论 2 342

推荐阅读更多精彩内容