(一)查日志
split
1.根据行数切割
wc -l err_20190907.log(查看多少行)
split -l 300 -d --verbose err_20190907.log split-line
指定行数后会自动做切割,即达到300行之后自动切割,通过-d参数文件名会自动以数字的方式命名,切割后,每个文件大小为24K,此时再对文件进行分析将会方便很多,同时文件数量也会很多,可以增加行数的方式进行切割,方便分析。
2.根据大小切割
除了按照行数切割之外,split还支持通过文件大小进行切割,通过指定-b参数指定文件大小进行切割,文件大小单位支持K, M, G, T, P, E, Z,如下以切割为30K演示文件切割过程
split -b 30K -d --verbose err_20190907.log sp
3.split将大文件切割为多个小文件,如果需要将多个小文件合并为一个文件怎么处理呢?
可以使用文件重定向方式实现,如下演示两个小文件合并为一个文件
cat split-line00 split-line01 >two-file-merge
合并方式通过读取文件的方式+输出重定向,对于大文件一样会存在性能的问题,建议根据需要使用
tail
参数:
- -f 循环读取
- -q 不显示处理信息
- -v 显示详细的处理信息
- -c Number 从 Number 字节位置读取指定文件
- -n Number 从 Number 行位置读取指定文件
- -m Number 从 Number 多字节字符位置读取指定文件,比方你的文件假设包括中文字,假设指定-c参数,可能导致截断,但使用-m则会避免该问题
- -b Number 从 Number 表示的512字节块位置读取指定文件
- -k Number 从 Number 表示的1KB块位置读取指定文件。
tail [-f][-c N|-n N|-m N|-b N|-k N][File]
eg:
- 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是查看前多少行日志。用法相同
cat
功能:
- 一次显示整个文件。 cat filename
- 创建一个文件。 cat > filename
- 将几个文件合并为一个文件。 cat file1 file2 > file
eg:
- cat test.log | tail -n 1000 #输出test.log 文件最后1000行
- cat -n test.log |grep “debug” #得到关键日志的行号
- cat filename | tail -n 3000 | head -n 1000 #从第3000行开始,显示1000行。即显示3000~3999行
- cat filename| head -n 3000 | tail -n 1000 #显示1000行到3000行
- cat -n textfile1 > textfile2 #把 textfile1 的档案内容加上行号后输入 textfile2 这个档案里
- cat -b textfile1 textfile2 >> textfile3 #把 textfile1 和 textfile2 的档案内容加上行号(空白行不加)之后将内容附加到 textfile3 里
- 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
以一页一页形式显示。基本指令按空白键(space)往下一页显示,按返回键(back)往上一页显示,还有字符搜索功能
- -num 一次显示的行数
- -d 提示使用者,在画面下方显示 [Press space to continue, ‘q’ to quit.] ,如果使用者按错键,则会显示 [Press ‘h’ for instructions.] 而不是 ‘哔’ 声
- -l 取消遇见特殊字元 ^L 时会暂停的功能
- -f 计算行数时,以实际上的行数,而非自动换行过后的行数
- -p 不以卷动的方式显示每一页,而是先清除萤幕后再显示内容
- -c 跟 -p 相似,不同的是先显示内容再清除其他旧资料
- -s 当遇到有连续两行以上的空白行,就代换为一行的空白行
- -u 不显示下引号 (根据环境变数 TERM 指定的 terminal 而有所不同)
- /pattern 在每个文档显示前搜寻该字串(pattern),然后从该字串之后开始显示
- num 从第 num 行开始显示
eg:
- cat -n test.log |grep “条件” |more 这样就分页打印了,通过点击空格键翻页
- more -s test.log 逐页显示日志,如有连续两行以上空白行则以一行空白行显示 more 20 test.log 从第 20 行开始显示日志内容
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"