工程部解决学校故障和测试时,日志分析是一项基本技能。分析日志常用的linux文本处理小工具就必须要掌握。这里分享一些小工具的使用方法。
grep是行过滤具;用于根据关键字进行行过滤。
### 语法和选项
语法:
# grep [选项] '关键字' 文件名
常见选项:
OPTIONS: -i:不区分大小写 -v:查找不包含指定内容的行,反向选择 -w:按单词搜索 -o:打印匹配关键字 -c:统计匹配到的次数 -n:显示符号 -r:逐层遍历目录查找 -A:显示匹配行及后面多少行 -B:显示匹配行及前面多少行 -C:显示匹配行及前后多少行 -l:只列出匹配的文件名 -L:列出不匹配的文件名 -e:使用正则匹配 -E:使用扩展正则匹配 ^key:以关键字开头 key$:以关键字结尾 ^$:匹配空行 --color=auto:可以将找到的关键字部分加上颜色的显示
颜色显示:
临时设置: # alias grep='grep --color=auto' //只针对当前终端和当前用户生效 永久设置: vim /etc/bashrc alias grep='grep --color=auto' source /etc/bashrc 以上永久设置是指的全局设置,即对所有用户生效,如果要只对特定用户生效,则只在用户文件下的/home/xxx/.bashrc文件加上上述命令即可。
举例说明:
说明:以 /etc/passwd 文件为例来说明该工具的使用
# grep -i root passwd 忽略大小写匹配包含root的行 # grep -w ftp passwd 精确匹配ftp单词 # grep -wo ftp passwd 打印匹配到的关键字ftp # grep -n root passwd 打印匹配到的关键字的行号 # grep -ni root passwd 忽略大小写匹配统计包含关键字的行 # grep -nic root passwd 忽略大小写匹配统计包含关键字的行数 # grep -i ^root passwd 忽略大小写匹配以root开头的行 # grep bash$ passwd 匹配以bash结尾的行 # grep -n ^$ passwd 匹配空行并打印行号 # grep -v ^# passwd 匹配不以#开头的行 # grep -A 5 mail passwd 匹配包含mail关键字及其后5行 # grep -B 5 mail passwd 匹配包含mail关键字及其前5行 # grep -C 5 mail passwd 匹配包含mail关键字及其前后5行
cut是列截取工具;用于列的截取
### 语法与选项
语法:
# cut [选项] 文件名
常见选项:
-c: 以字符为单位进行分割,截取 -d: 自定义分隔符,默认为制表符\t -f: 与-d一起使用,指定截取哪个区域
举例说明:
# cut -d: -f1 1.txt 以“:”分割,截取第1列内容 # cut -d: -f1,6,7 1.txt 以“:”分割,截取第1,6,7列内容 # cut -c4 1.txt 截取文件每行第4个字符 # cut -c1-4 1.txt 截取文件每行第1-4个字符 # cut -c4-10 1.txt 截取文件中每行的4-10个字符 # cut -c5- 1.txt 从第5个字符开始截取后面所有字符
sort工具用于排序,它将文件的每一行作为一个单位,从首字符向后,依次按ASCII码值进行比较,最后将他们按升序输出。
语法与选项:
-u: 去除重复行 -r: 降序排列,默认是升序 -o: 将排序结果输出到文件中,类似重定向符号> -n: 以数字排序,默认是按字符排序 -t: 分隔符 -k: 第N列 -b: 忽略前导空格 -R: 随机排序,每次运行的结果均不同
举例说明:
# sort -n -t: -k3 1.txt 在1.txt文件中:分隔开以第三列以数字升序排列 # sort -nu 1.txt 按数字排序并去重 # sort -n 1.txt -o 2.txt 按数字排序并把结果重定向到文件2.txt # sort -R 1.txt 随机排序,每次运行的结果均不同
uniq工具用于去除连续的重复行
常见选项:
-i: 忽略大小写 -c: 统计重复行重重次数 -d: 只显示重复行
举例说明:
# grep 'xxx' xx.txt | sort | uniq -c 常见uniq与sort配合使用,先对文本内容进行排序,排序以后再进行重复统计,这个在测卡的时候非常实用。
teea工具是从标准输入读取并写入到标准输出和文件,即:双向覆盖重定向(屏幕输出|文本输入)
选项:
-a: 双向追加重定向
举例说明:
xiarong@Demo:~$ echo 999 |tee 1.txt //覆盖
999
xiarong@Demo:~$ cat 1.txt
999
xiarong@Demo:~$ echo 888 | tee -a 1.txt //追加
888
xiarong@Demo:~$ cat 1.txt
999
888
wc命令用于计算字数。利用wc指令我们可以计算文件的Byte数、字数、或是列数,我们经常用来统计行数以达到统计数量的目的。
常见用法:
# wc -l 1.txt 统计行数
# xiarong@Demo:~$ wc -l /etc/passwd
96 /etc/passwd
掌握了以上内容,对进行一些简单的日志分析可以带来方便,如果能掌握sed与awk两个命令,将会更加如虎添翼。