在开发中,我们经常在代码中添加日志,主要作用是程序在服务器上跑出bug时方便进行问题排查,因为在服务器上不可能像在本地运行程序那样debug,所以日志对于我们非常重要,几乎就是解决问题唯一能依赖的东东。
在查看服务器日志时,经常使用以下几条命令:
tail -300f xxx.log | grep "userId"
tail -300f xxx.log | grep "userId" -B 20 -C 20
tail -300f xxx.log | grep "userId" | grep "hello"
cat xxx.log | grep "userId"
tail是查看文件尾部的内容,由于程序中添加日志是添加在文件尾部的,因此文件尾部的内容一直是最新的 。这个命令适用于动态查看日志内容。
grep 是用来过滤内容的,按行过滤,只要一行日志中的内容包含 “userId” 字符串 ,那么就会打印出来。
| 是linux的管道,用来重定向输出到下一个命令的输入。
grep的 -B 和 -C 参数 意思为找到含有xx字符串的行,然后打印出此行以及此行向前20行和向后20行。 -300f 意思是看文件尾部的300行。
两次grep就是从第一个grep的输出中再进行一次过滤。
注意:grep 的字符串内容是按照正则表达式进行处理的,因此比如像 .
*
这种特殊字符(在正则中),如果想按文本匹配,需要用 \
进行转义 。看如下例子:
首先我创建了一个文件,名为file ,文件内容为:
hello world . i
am a programmer yes
ok byby
然后执行如下命令:
cat file | grep "."
原意为过滤出包含 .
的那行,但结果如下:
hello world . i
am a programmer yes
ok byby
grep按照正则表达书处理, .
代表任意内容,因此一行中包含任何内容都会被打印出。
为了达到原目的,需要对 .
进行转义:
cat file | grep "\."
结果如下:
hello world . i
达到目的。
2017-03-30添加
grep -E "column1|column2" a.txt// 每一行出现column1或者column2
du -h - -max-depth=1 从当前目录开始显示两层深度的文件及文件夹大小
df -h 显示磁盘使用情况
cp /dev/null a.txt 清空文件,即删除
sz filename 下载服务器文件到本地
rz -be 上传文件到服务器
ls -ald l 表示输出一个长清单,d表示列出目录,a表示列出以 . 开头的文件。
在java程序里写文件时,要保证文件所在的各级文件夹已经存在,但是文件可以不存在;另外,启动该java程序的user需要有该文件和文件夹rw权限。一般可以写到user的 home目录中去,这里肯定有权限。
split -l 100000 user.sql 按行数每十万行拆分成一个小文件
统计日志中某个字符串出现的行数 grep str a.log | wc -l
若grep加了 -o 就是统计字符串出现的次数