在开发中,我们经常在代码中添加日志,主要作用是程序在服务器上跑出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 就是统计字符串出现的次数