IntelliJ IDEA 分布式 enums casting combobox transactions sas 后台模板下载 bootstrap后台模板 bootstrap时间轴 java 数据分析 js对象添加元素 oracle连接字符串 汇编语言clr python高级 python的安装 java教程 javascanner java基础入门 java的继承 java字符串反转 java开发环境搭建 java编译环境 java函数式接口 java如何配置环境变量 java原始数据类型 java命令 java格式化日期 linux安装系统 java小程序 java疯狂讲义 图片生成网址 选项卡 ppt格式刷怎么用 udp测试工具 操作系统安装 oemdiy 珊瑚版 剑灵龙骨卷轴 掘地鼠炖肉
当前位置: 首页 > 学习教程  > 编程语言

日志查找常用命令-超实用

2020/9/19 16:03:50 文章标签:

0 前言

(1)命令的尾部添加 --color 或者 --color=auto 可以使关键字带颜色,很清晰。

1 Linux日志查找常用命令

1.1 cat、zcat

  • cat -n app.log | grep "error":查询日志中含有某个关键字error的信息,显示行号。

  • cat -n app.log | grep "error" --color:查询日志中含有某个关键字error的信息,显示行号,带颜色的。

  • cat -n test.log | tail -n +92 | head -n 20 :表示查询92行之后的日志;表示在前面的查询结果里再查前20条记录。

  • cat -n app.log |grep "error" | more:使用more和less命令分页查看日志,空格键翻页。

  • cat -n app.log |grep "error" > temp.txt:把日志保存到文件。

  • zcat shopdiy-job01.jd__shopdiy-job.warn.log-2019-03-25-1.log.gz | gerp "hotelFriendCircle poi":直接查找压缩包里的日志内容

  • gzip -dc app.log.2018-01-11.gz |grep "此次共实际刷数据" | more:不解压直接查看压缩包中的“关键词”信息

1.2 grep

  • grep -E "123|abc" app.log(grep -E "123|abc" app.log --color):查询日志文件app.log中包含 关键字 123 或 包含 关键字 abc 的行。(带颜色)

  • tail -f app.log | grep -E -C20 "123|abcd" --color:实时查看日志,且包含关键字 123 或者 abcd 的行。

  • grep -nE "123|abc" app.log:查询日志文件app.log中包含 关键字 123 或 包含 关键字 abc 的行,显示行号。

  • grep "此次共实际刷数据" app.log:查看日志中的关键字。

  • grep "此次共实际刷数据" app.log | more:查询关键字,并且按空格键翻页。

  • grep -i "magic" app.log :不分大小写的搜索匹配magic。默认情况下是区分大小写的。

  • grep -w "magic" app.log :匹配整个单词而不是字符串的一部分(如匹配“magic”,而不是“magical”)。

  • grep -E "123" app.log:显示app.log中含有关键字"123"的行内容。

  • grep -E -A5 "123" app.log:显示app.log中含有关键字"123"的行内容,以及之后的5行内容。

  • grep -E -B5 "123" app.log:显示app.log中含有关键字"123"的行内容,以及之前的5行内容。

  • grep -E -C5 "123" app.log:显示app.log中含有关键字"123"的行内容,以及之前之后的各5行内容。

1.3 head【头正尾负】

  • head -n 10 app.log(head -n +10 app.log、head 10 app.log):查看日志中的头10行日志。

  • head -n -10 app.log:查看日志中除了尾10行之外的所有日志。

1.4 tail【头正尾负】

  • tail -n 10 app.log(tail -n -10 app.log、tail -10 app.log):查看日志中的尾10行日志。

  • tail -n +10 app.log:查看日志中除了头10行之外的所有日志。

  • tail -f app.log:实时查看日志信息。

  • tail -f app.log |grep "关键词":实时查看日志中含有某个关键词的信息。

  • tail -f app.log |grep -A3 "关键词":实时查看日志中含有某个关键词的信息,该行的前面和后面各多显示3行。比如:tail -f app.log |grep -A3 "此次共实际刷数据"。

  • tail -f app.log |grep "mtUserScore" --color:实时查看app.log日志中的含有关键词“mtUserScore”的日志信息,并且彩色打印

  • tail -n 20 app.log |grep --color "此次共实际刷数据":查看日志的最后20行并且搜索关键字。

  • tail -fn 100 app.log:循环实时查看最后100行的记录。

  • tail -fn 100 app.log |grep --color "此次共实际刷数据":循环查看最后100行的记录,并且查找关键字。

  • tail -500 /data/applogs/tomcat/catalina.out:查看Tomcat错误日志。

  • tail -f app.log | grep -A50 "randomFlow=" --color:查看后面50行的日志。tail -f app.log | grep -A50 "接口查询结果=" --color

  • tail -f app.log | egrep "repast launchId=|whtOuterCreativeService.generateCreative" --color:命中多个关键字中其中一个即可,注意:| 的前后不能有空格。

  • tail -f app.log | egrep "ERROR|WARN" --color:命中多个关键字中其中一个即可,注意:| 的前后不能有空格。

  • tail -f app.log | egrep "ERROR|WARN" -wc:统计数量,命中多个关键字中其中一个即可,注意:| 的前后不能有空格。

  • grep "modifyBudget" midas-shopdiy-web.access.log | grep "realAccountId=58754220" --color:同时满足两个条件。

  • tail -f nginx.access.log | grep -E "getPaginateList|queryAccounts" --color :匹配多个关键字之一即可

1.5 ps

  • ps -ef |grep java:查看Java进程。

  • ps -ef |grep tomcat:查看Tomcat进程。

  • curl www.baidu.com:查看url能不能使用。

  • ps -ef | grep 8080:查看端口号8080被哪个进程占用。

  • ps -ef | grep redis:查看已经启动所有进程中与字符“redis”相关的进程。

  • ps -ef | grep java:查看已经启动所有进程中与字符“java”相关的进程。

  • ping 192.168.1.122:查看本机能否和IP=192.168.1.122的主机连通。

  • scp -r redis-3.0.0/ 192.168.1.122:/usr/local:如果可以连通,则可以远程传输文件。

  • cp redis.conf /usr/local/redis-cluster/7001:复制文件到指定文件夹。

1.6 Nginx日志查询

  • 应用日志记录的位置:/data/applogs/shopdiy-web/logs

  • tail -f app.log:动态查看应用日志。

  • 应用Nginx日志记录的位置,HTTP请求时长结果查看:/data/applogs/nginx

  • tail -f shopdiy-web.access.log:通过访问页面来动态查看Nginx日志。

1.7 压缩包的解压-压缩

  • gz压缩:app.log-2018-09-22-1.log 文件,执行:gzip app.log-2018-09-22-1.log,被压缩成 app.log-2018-09-22-1.log.gz

  • gz接压缩:app.log-2018-09-22-1.log.gz 文件,执行:gzip -d app.log-2018-09-22-1.log.gz,被解压成 app.log-2018-09-22-1.log

  • gzip -dc app.log.2018-01-11.gz |grep "此次共实际刷数据" | more:不解压直接查看压缩包中的“关键词”信息

1.8 sed

  • 这个命令可以查找日志文件特定的一段 , 也可以根据时间的一个范围查询。

  • sed -n "5,10p" app.log:按照行数——查看日志第5到第10行。

  • sed -n "/2018-04-08 09:40:53.374/,/2018-04-08 10:21:04.812/p" express.log | grep "此次共实际刷数据" :按照时间段——查看两个时间之间的日志,并且显示关键字。其中,时间点一定要在日志中存在,可用:grep -E "2018-04-08 09:40:53.374" app.log --color:来查看时间点是不是存在日志中,带颜色。

1.9 lsof (list open files)

  • lsof -i tcp:查看TCP连接的端口号使用情况

  • lsof -i udp:查看UDP连接的端口号使用情况

  • lsof -i tcp:58528 :(port替换成端口号,比如6379)可以查看该端口被什么程序占用,并显示PID,方便kill

  • lsof -i udp:58529 :(port替换成端口号,比如6379)可以查看该端口被什么程序占用,并显示PID,方便kill

  • kill -9 518:结束进程PID号为518的进程。

1.10 netstat

  • netstat -a:列出所有端口

  • netstat -at :列出所有tcp端口

  • netstat -au:列出所有udp端口

  • netstat -l :只显示监听端口

  • netstat -lt :只列出所有监听tcp端口

  • netstat -lu :只列出所有监听udp端口

  • netstat -st:显示 TCP 端口的统计信息

  • netstat -su:显示 UDP 端口的统计信息

1.11 ifconfig

  • ifconfig:Mac查看本机IP地址。其中的ether是硬件mac地址,inet是IP地址。另,可以参考这个知道:https://jingyan.baidu.com/article/b0b63dbf3fefd14a48307013.html

 

1.12 查看日志文件大小和查看指定关键词

(1)wc -c app.log:参数 -c 表示统计字符,因为一个字符是一个字节,所以这样得到字节数。

(2)du -sb app.log:参数 -b 表示以B计数。

(3)du -sm app.log:参数 -m 表示以M计数。

(4)du -sh app.log:参数 -h 表示以K/M/G计数,容易识别出文件大小 。

cd /data/applogs/nginx
ls -al
du -sh dp-nginx.access.log
查看这个文件中这个关键词被调用地方:
cat dp-nginx.access.log | grep "queryAccountBalance"
查看这个文件中这个关键词被调用的数量:
cat dp-nginx.access.log | grep "queryAccountBalance" | wc -l
查看这些文件中这个关键词被调用的数量:
cat dp-nginx.access* | grep "queryAccountBalance" | wc -l

 

另:less app.log使用:

(1) cd /data/applogs/shopdiy-cpc-job/logs
(2) ls -al
(3) 分页加载日志数据:less app.log
(4) 此时,shift+GG 命令进入文件尾部,然后输入 shfit+?,并且后面跟随你想要搜索的关键词,比如 ?NewCheckEntityStatusJob,回车,此时你想要看到的关键词都会加亮显示,供你查阅。
此时,N 是逐个向上翻阅;shift+N 是逐个向下翻阅。Q 是退出日志界面。

 

1.99 杂家笔记

  • less log.log:shift + GG 命令到文件尾部,然后输入 ?加上你要搜索的关键字例如 ?1213 shift+n 关键字之间进行切换。

  • tac:则是由最后一行到第一行反向在萤幕上显示出来,与cat反过来。

  • history:所有的历史记录

  • history | grep XXX:历史记录中包含某些指令的记录

  • history | more:分页查看记录

  • history -c:清空所有的历史记录

  • uname -a:查看内核/操作系统/CPU信息

  • cat /proc/cpuinfo:查看CPU详细信息

  • hostname:查看计算机名称

  • env:查看系统环境变量

  • free -m:查看内存使用量、查看交换区使用量

  • df -h:查看各分区使用量

  • du -sh 目录名:查看指定目录的大小

  • du -sh 文件名:查看指定文件的大小

  • grep MemTotal /proc/meminfo:查看计算机是多大内存,常用的是8G=8388608kB

  • grep MemFree /proc/meminfo:查看计算机还剩余多少内存

  • uptime:查看系统运行时间、用户数量、负载

  • ifconfig:查看所有网络接口的属性

  • netstat -lntp:查看所有监听的端口号

  • ps -ef:查看所有进程

  • top:实时显示进程状态

  • last:查看用户登录这台机器的日志

  • rpm -qa:查看系统上安装的所有的软件包

  • wc app.log:app.log文件的统计信息 3、92、598 app.log。app.log 文件的行数为3、单词数92、字节数598。

 

2 正则表达式

2.1 grep:grep详解

# grep默认是区分大小写的,这里将匹配所有的小写字母: $ echo '1234\nabcd' | grep '[a-z]' 
# 将匹配所有的数字: $ echo '1234\nabcd' | grep '[0-9]' 
# 将匹配所有的数字 :$ echo '1234\nabcd' | grep '[[:digit:]]' 
# 将匹配所有的小写字母 :$ echo '1234\nabcd' | grep '[[:lower:]]' 
# 将匹配所有的大写字母 :$ echo '1234\nabcd' | grep '[[:upper:]]' 
# 将匹配所有的字母和数字,包括0-9,a-z,A-Z :$ echo '1234\nabcd' | grep '[[:alnum:]]' 
# 将匹配所有的字母 :$ echo '1234\nabcd' | grep '[[:alpha:]]'
  •  

cat 1.txt | grep "[0-9]"
cat 1.txt | grep "[[:digit:]]"
cat 1.txt | grep "[[:alpha:]]"
cat 1.txt | grep "[[:upper:]]"
cat 1.txt | grep "[[:lower:]]"
cat 1.txt | grep "[[:alnum:]]"

 

1.grep简介

grep:Gloabal Search Regular Expression and Print out the line,意为全局搜索正则表达式并打印文本行。所以

  • grep是一个强大的文本搜索工具。

  • grep与正则表达式联系紧密。

之后也会从这两个大的方面来详细介绍。grep命令的基本语法如下:grep [options] pattern [file...]

  • options表示选项,具体的命令选项见下表。

  • pattern表示要匹配的模式(包括目标字符串、变量或者正则表达式)。

  • file表示要查询的文件名,可以是一个或者多个。pattern后面所有的字符串参数都会被理解为文件名。

选项

说明

-c      

只打印匹配的文本行的行数,不显示匹配的内容

-i

匹配时忽略字母的大小写

-h

当搜索多个文件时,不显示匹配文件名前缀

-n

列出所有的匹配的文本行,并显示行号

-l

只列出含有匹配的文本行的文件的文件名,而不显示具体的匹配内容

-s

不显示关于不存在或者无法读取文件的错误信息

-v

只显示不匹配的文本行

-w

匹配整个单词

-x

匹配整个文本行

-r

递归搜索,搜索当前目录和子目录

-q

禁止输出任何匹配结果,而是以退出码的形式表示搜索是否成功,其中0表示找到了匹配的文本行

-b

打印匹配的文本行到文件头的偏移量,以字节为单位

-E

支持扩展正则表达式

-P

支持Perl正则表达式

-F

不支持正则表达式,将模式按照字面意思匹配

二、grep简单应用场景

首先介绍一下我的实验环境,在/Users/cmm/test4MingLing下建立3个简单的txt文件:

#----------------------/Users/cmm/test4MingLing/text1.txt--------------------- 
  hello world 
  mailx 
  uuen 
  letitia 
  #----------------------/Users/cmm/test4MingLing/text2.txt--------------------- 
  hello world,this is for grep test  
  #----------------------/Users/cmm/test4MingLing/text3.txt--------------------- 
  hello world 
  tyrone 

(1)多文件查询,file之间用空格隔开。

grep -i "hello world" text1.txt text2.txt
#输出结果
text1.txt:hello world
text2.txt:hello world,this is for grep test

(2)多模式匹配,模式之间为“逻辑或”的关系,匹配任意一个即可返回。

#方法1:使用-e选项 
grep -e "hello world" -e "mailx" -r /Users/cmm/test4MingLing
#方法2:使用正则表达式,-E
grep -E "hello world|mailx" -r /Users/cmm/test4MingLing
#方法3:使用正则表达式,egrep,同grep -E等效 
egrep "hello world|mailx" -r /Users/cmm/test4MingLing --color
#输出结果均相同: 
/Users/cmm/test4MingLing/text1.txt:hello world
/Users/cmm/test4MingLing/text1.txt:mailx
/Users/cmm/test4MingLing/text2.txt:hello world,this is for grep test
/Users/cmm/test4MingLing/text3.txt:hello world

(3)多模式匹配,模式之间为“逻辑与”的关系,匹配所有模式。

基本思想大致相同:先匹配一个模式,然后grep下面一个模式,将前一次grep的结果作为要查询文件路径依次向后传递。

PS:注意:前一次grep的结果必须加上 -l 选项,否则会把匹配成功的文件内容作为要查询的文件名向后传递

我希望做到的是能够显示出同时包含模式的文件,并且跟随显示匹配每个模式的内容。可惜我现在找到的方法都仅仅能够显示匹配最后一个模式的内容。

#方法1:将其按一次的结果重定向到一个文件,然后 xargs grep 来依次读取。 
grep -i "hello world" -rl /Users/cmm/test4MingLing >> temp.txt
cat temp.txt |xargs grep -i "mailx"
#输出结果 
/Users/cmm/test4MingLing/text1.txt:mailx

#方法2:直接利用管道 
grep -i "hello world" -rl /Users/cmm/test4MingLing | xargs grep -i "mailx"
#输出结果 
/Users/cmm/test4MingLing/text1.txt:mailx

最后不得不感慨一下linux命令的组合方式,能像积木一样堆积出无穷的组合,是时候展现真正的想象力了。。。

(4)查找指定用户的进程

ps 是查看当前进程的指令,e 表示所有进程,f 表示全格式。

ps -ef |grep "cmm"
ps -ef |grep "cmm"
#输出结果 
  502   700     1   0  9:08上午 ??         0:00.03 /Applications/Google Chrome.app/Contents/Versions/70.0.3538.110/Google Chrome Framework.framework/Helpers/crashpad_handler --monitor-self-annotation=ptype=crashpad-handler --database=/Users/cmm/Library/Application Support/Google/Chrome/Crashpad --metrics-dir=/Users/cmm/Library/Application Support/Google/Chrome --url=https://clients2.google.com/cr/report --annotation=channel= --annotation=plat=OS X --annotation=prod=Chrome_Mac --annotation=ver=70.0.3538.110 --handshake-fd=9
    0   838   837   0  9:19上午 ttys001    0:00.02 login -pf cmm
    0  6133   837   0  2:28下午 ttys003    0:00.03 login -pf cmm
  502  7467  6134   0  3:54下午 ttys003    0:00.00 grep --color=auto --exclude-dir=.bzr --exclude-dir=CVS --exclude-dir=.git --exclude-dir=.hg --exclude-dir=.svn cmm

 

 

 

 


本文链接: http://www.dtmao.cc/news_show_200352.shtml

附件下载

相关教程

    暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?