linux awk、grep应用

工作当中我们经常会用到一些linux命令来查询日志信息,并通过过滤出来的信息分析、定位问题。现在就把前一段时间用到的linux命令总结到这里,供参考。

grep --color '[pos.unefficient]' catalina.out.20140401|wc -l 


awk '/[a-z A-Z]*Exception/' catalina.out.20140401 |grep 'error' catalina.out.20140401 


服务器通过过滤命令定位问题的原因

grep -a300 '2014-04-15 05:30:00' catalina.out.20140415 --color


grep --color '[pos.unefficient]' catalina.out.20140401|wc -l

awk '/[a-z A-Z]*Exception/' catalina.out.20140401 |grep 'error' catalina.out.20140401

awk '/[a-z A-Z]*Exception/' catalina.out.20140401 |grep 'error ' catalina.out.20140401

nullException


服务器通过过滤命令定位问题的原因

grep -a300 '2014-04-15 05:30:00' catalina.out.20140415 --color


需求描述:分析日志中涉及到错误交易的错误信息。

某线程号一个时间一个POS机使用,不同时间被多个POS机使用。


不是引起交易失败原因的错误:

ERROR com.chinabank.pos.server.PosServer

java.net.SocketException: Connection reset


错误类型1

com.chinabank.pos.core.exception.PosUnefficientException: pos.unefficient[pos.unefficient]


[TP-Processor13] 2014-04-01 11:42:15,592 185751059 ERROR com.chinabank.pos.biz.trx.PosTrxManagerImpl - PosUnefficientException , pos is unefficient!

特点:错误行有ERROR,有Exception。

求解这种信息需要

方案: grep --color 'pos.unefficient' catalina.out.20140403 |wc -l

错误类型2

TP-Processor13] 2014-04-01 11:44:34,714 185890181 ERROR com.chinabank.pos.biz.trx.cod.JDCodPurchase - JDCodPurchase createPosTrx: Unknown Exception!

com.chinabank.pos.core.exception.CardInvalidException: 000003[000003]

 at 解决方案 grep --color 'CardInvalidException' catalina.out.20140403 |wc -l

错误类型3(交易处理完成后,往回写数据时发现连接已关闭)非业务错误

[TP-Processor13] 2014-04-01 11:49:55,743 186211210 ERROR com.chinabank.pos.server.PosServer -

java.net.SocketException: Connection reset


错误类型4

[TP-Processor13] 2014-04-01 12:45:30,721 189546188 INFO com.chinabank.pos.preposition.parse.Parser - POS mac error!

[TP-Processor13] 2014-04-01 12:45:30,721 189546188 INFO com.chinabank.pos.biz.trx.PosTrxManagerImpl - trxParam.posCATI: 30005610

[TP-Processor13] 2014-04-01 12:45:30,721 189546188 ERROR com.chinabank.pos.biz.trx.PosTrxManagerImpl - MacCheckInvalidException ,MAC check error!

解决方案: grep --color 'POS mac error!' catalina.out.20140403 |wc -l

错误类型5(无需统计)非业务错误

[org.springframework.scheduling.quartz.SchedulerFactoryBean#0_Worker-8] 2014-04-02 00:15:00,022 230915489 ERROR com.chinabank.pos.bank.timer.BankSettleAndSignInManage - BankSettleAndSignInManage first exception! frpinterfaceDetail_PosCATI[00000002] , frpCode [8002001]

java.lang.NullPointerException

posBatch='000023'


 posRequestId=003449

4月1日

grep --color 'posRequestId=003449' catalina.out.20140401|wc -l

java.net.SocketException: Connection reset

grep --color 'java.net.SocketException: Connection reset' catalina.out.20140401|wc -l

grep -a300 'posRequestId=003449' catalina.out.20140401 --color


目标:筛选关键字、将关键字出现的次数进行筛选,这样所以Exception、error关键字出现的次数。


linux命令:

第一步:去重,将重复的行合并为一行。

第二步:查每一行中包含Exception关键字且不为CardInvalidException、SocketException、NullPointerException、MacCheckInvalidException的行信息打印出来


sort -n catalina.out.20140406| uniq |egrep '[^CardInvalidException SocketException NullPointerException MacCheckInvalidException]Exception'|wc -l


sort -n catalina.out.20140401|uniq | egrep -i '[^ POS mac error! pos.unefficient pos.unefficient update mac and pin error ]error'

POS mac error!


grep -r "zhangjie" /usr/tmp

grep -r (recursively ) 能够在主文件夹下依次循环子文件夹下所有文件,查出所有的

文件里信息是否包含字符“zhangjie”。

grep -v "zj" /usr/tmp/zj.txt

zj.txt文件中不包含“zj”字符的行信息。

grep -v -e "a" -e "b" -e "c" test-file.txt

test-file.txt 每一行中不包含字符"a"、"b"、"c"的行信息。

grep -c "pattern" filename 符合pattern 的行数

-v -c结合是不符合pattern的行信息。

-o只是符合pattern的行数信息显示

grep -o "is.*line" demo_file

正则表达式可以用在pattern中进行复杂查询

$ cat temp-file.txt

1

12345

1

12345




$

$ grep -o -b "3" temp-file.txt

2

2:3


8:3

 -b 显示pattern在文件中的位置

 显示的格式是:在文件中的位置:该行信息


grep和egrep区别

 egrep,  fgrep  and  rgrep 等同于grep -E grep -F grep -r

grep和egrep两者之间最大的区别是对正则的支持上。egrep支持分组,grep不支持,grep对一些正则的支持性差,所以才有了后来的egrep、fgrep、rgrep

grep默认不支持正则表达式,egrep默认支持正则表达式。


如果想看系统的内存、cpu、进程的你该信息,请使用top命令。

=================

7月25日

top命令

top的参数可以随时调整数据的展示形式

 top 运行中可以通过 top 的内部命令对进程的显示方式进行控制。内部命令如下表:

  s

  - 改变画面更新频率

  l - 关闭或开启第一部分第一行 top 信息的表示

  t - 关闭或开启第一部分第二行 Tasks 和第三行 Cpus 信息的表示

  m - 关闭或开启第一部分第四行 Mem 和 第五行 Swap 信息的表示

  N - 以 PID 的大小的顺序排列表示进程列表(第三部分后述)

  P - 以 CPU 占用率大小的顺序排列进程列表 (第三部分后述)

  M - 以内存占用率大小的顺序排列进程列表 (第三部分后述)

  h - 显示帮助

  n - 设置在进程列表所显示进程的数量

  q - 退出 top

  s - 改变画面更新周期

total=used+free(无需加buffer)

查看内存信息的命令为:cat /proc/meminfo




查看内存镜像


free [-b -k -m] [-o] [-s delay] [-t] [-V]

c.主要参数

-b -k -m:分别以字节(KB、MB)为单位显示内存使用情况。

-s delay:显示每隔多少秒数来显示一次内存使用情况。

-t:显示内存总和列。

-o:不显示缓冲区调节列。

d.应用实例

free命令是用来查


==============

什么是僵尸进程

一个子进程在结束的时候发现自己的父进程没有等待(waitd/waitpid),那么这个进程就成为了僵尸简称。

一个进程在调用exit命令结束自己的生命的时候,其实它并没有真正的被

僵尸进程

销毁, 而是留下一个称为僵尸进程(Zombie)的数据结构(系统调用exit,它的作用是 使进程退出,但也仅仅限于将一个正常的进程变成一个僵尸进程,并不能将其完全销毁)



创建一个shell脚本


#!/bin/sh

chmod +x filename 

echo "this is the ${num}nd"  //打印信息

一些常见的shell命令

常用命令语法及功能


  echo "some text": 将文字内容打印在屏幕上


  ls: 文件列表


  wc –l filewc -w filewc -c file: 计算文件行数计算文件中的单词数计算文件中的字符数


  cp sourcefile destfile: 文件拷贝


  mv oldname newname : 重命名文件或移动文件


  rm file: 删除文件


  grep 'pattern' file: 在文件内搜索字符串比如:grep 'searchstring' file.txt


  cut -b colnum file: 指定欲显示的文件内容范围,并将它们输出到标准输出设备比如:输出每行第5个到第9个字符cut -b5-9 file.txt千万不要和cat命令混淆,这是两个完全不同的命令


  cat file.txt: 输出文件内容到标准输出设备(屏幕)上


  file somefile: 得到文件类型


  read var: 提示用户输入,并将输入赋值给变量


  sort file.txt: 对file.txt文件中的行进行排序


  uniq: 删除文本文件中出现的行列比如: sort file.txt | uniq


  expr: 进行数学运算Example: add 2 and 3expr 2 "+" 3


  find: 搜索文件比如:根据文件名搜索find . -name filename -print


  tee: 将数据输出到标准输出设备(屏幕) 和文件比如:somecommand | tee outfile


  basename file: 返回不包含路径的文件名比如: basename /bin/tux将返回 tux


  dirname file: 返回文件所在路径比如:dirname /bin/tux将返回 /bin


  head file: 打印文本文件开头几行


  tail file : 打印文本文件末尾几行


  sed: Sed是一个基本的查找替换程序。可以从标准输入(比如命令管道)读入文本,并将结果输出到标准输出(屏幕)。该命令采用正则表达式(见参考)进行搜索。 不要和shell中的通配符相混淆。比如:将linuxfocus 替换为 LinuxFocus :cat text.file | sed 's/linuxfocus/LinuxFocus/' > newtext.file


  awk: awk 用来从文本文件中提取字段。缺省地,字段分割符是空格,可以使用-F指定其他分割符。cat file.txt | awk -F, '{print $1 "," $3 }'这里我们使用,作为字段分割符,同时打印第一个和第三个字段。如果该文件内容如下: Adam Bor, 34, IndiaKerry Miller, 22, USA命令输出结果为:Adam Bor, IndiaKerry Miller, USA


2) 概念: 管道, 重定向和 backtick


  这些不是系统命令,但是他们真的很重要。


  管道 (|) 将一个命令的输出作为另外一个命令的输入。


grep "hello" file.txt | wc -l


  在file.txt中搜索包含有”hello”的行并计算其行数。


  在这里grep命令的输出作为wc命令的输入。当然您可以使用多个命令。


  重定向:将命令的结果输出到文件,而不是标准输出(屏幕)。


  > 写入文件并覆盖旧文件


  >> 加到文件的尾部,保留旧文件内容。


反短斜线


 使用反短斜线可以将一个命令的输出作为另外一个命令的一个命令行参数。


  命令:


find . -mtime -1 -type f -print 


  $ sed -n '/test/,/check/p' example-----所有在模板test和check所确定的范围内的行都被打印。

    $ sed '2d' example-----删除example文件的第二行。
       *    $ sed '2,$d' example-----删除example文件的第二行到末尾所有行。
       *    $ sed '$d' example-----删除example文件的最后一行。


awk 适合列,适合搜索信息 sed适合编辑文本,适合按照行查询信息 。

#!/bin/sh 
# The ticks are backticks (`) not normal quotes ('): 
tar -zcvf lastmod.tar.gz `find . -mtime -1 -type f -print`


shell语言不适合的场景:

  1.    资源密集型的任务,尤其在需要考虑效率时(比如,排序,hash等等)。

  2. 需要处理大任务的数学操作,尤其是浮点运算,精确运算,或者复杂的算术运算(这种情况一般使用C++或FORTRAN 来处理)。

  3. 有跨平台(操作系统)移植需求(一般使用C 或Java)。

  4. 复杂的应用,在必须使用结构化编程的时候(需要变量的类型检查,函数原型,等等)。

  5. 对于影响系统全局性的关键任务应用。

  6. 对于安全有很高要求的任务,比如你需要一个健壮的系统来防止入侵、破解、恶意破坏等等。

  7. 项目由连串的依赖的各个部分组成。

  8. 需要大规模的文件操作。

  9. 需要多维数组的支持。

  10. 需要数据结构的支持,比如链表或数等数据结构。

  11. 需要产生或操作图形化界面 GUI。

  12. 需要直接操作系统硬件。

  13. 需要 I/O 或socket 接口。

  14. 需要使用库或者遗留下来的老代码的接口。

  15. 私人的、闭源的应用(shell 脚本把代码就放在文本文件中,全世界都能看到)。

/bin/sh test.sh
shell使用变量的时候使用$ 定义变量的时候不适用$
http://see.xidian.edu.cn/cpp/view/7002.html


2014年08月17日
egrep自然支持正则表达式。【^ $】开始结束。^[[:upper:]]

shell脚本中单引号、双引号、倒引号
单引号里面的信息是什么就是什么
双引号里面的以$开头的信息会被解释成变量
倒引号里面的信息就是一个函数,被解析。
常见发的linux命令
.代表当前目录,..代表当前目录的父目录
touch newfile创建新文件。
mkdir创建目录
more 分页显示文件内容
head -20 20行之前的信息。
ln -s 【源文件】【目标文件】 -s软连接 后者为连接文件
chown nobody file1 改变文件所有者为nobody
chgrp admin file1 改变文件的所有组为admin
搜索命令   which ls
find 【搜索路径】【搜索关键字】
find / -name init搜索文件名称为init的文件
find很强大!!
man\info
gzip 压缩文件
gunzip 解压缩。
gunzip file1.gz
tar [cvf] [目录]
tar -zxvf dir1.gz
-x 解包.tar文件
-v显示详细信息
-f 指定解压文件
-z 解压缩




转载于:https://my.oschina.net/zjItLife/blog/353276

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值