目录

查找工具

# 文件查找

# 文本查找

# grep

参数:

-A NUM, --after-context=NUM: 结果之后额外展示 N 行

-B NUM, --before-context=NUM: 结果之前额外展示 N 行

-c, --count: 统计符合规则的列数,例如统计一个文件中有多少个符合规则的字符串

-C: 在展示结果的前后额外显示的行数

-h, --no-filename: 在统计结果展示时不显示文件名

-H, --with-filename: 在统计结果展示时显示文件名

-i, --ignore-case: 忽略字符大小写

-l, --files-with-matches: 列出符合规则的文件名(加了这个参数就不显示具体内容了,只展示文件名)

-L, --files-without-match: 列出不符合规则的文件名

-n, --line-number: 在展示结果时标记字符串所在行号

-r, --recursive: 递归读取所有文件

-s, --no-messages: 不显示错误信息

-v, --invert-match: 显示未命中的结果

--exclude: 根据规则排除不需要查找的文件

--include: 根据规则只查找需要的文件

# 在后缀名为 log 的文件中查询 'error' 字符串,不区分大小写,并展示结果所在行号
grep -nri 'error' --include="*.log"

# 指定文件中查询 'error'
grep -hni 'error' /var/log/messages

# 查找 'error' 或者 'exception',忽略大小写
grep -hni -E 'error|exception' /var/log/messages

# 查找同时包含 'error' 和 'exited' 的文件
grep -nri 'error' | grep -i 'exited'

# 查询不包含 'error' 的内容
grep -niv 'error' /var/log/messages

# awk

-F: 指定分隔符

NR 表示当前是第几行

NF 表示当前行有多少个字段,也就是最后一个字段,$(NF-1) 代表倒数第二个字段

# 查询包含 'error' 的数据,以 'VM-16-3-centos' 作为分隔符,打印第二个参数
awk -F "VM-16-3-centos" '/error/ { print $2 }' /var/log/messages

# 查询包含 'error' 的数据,以 'VM-16-3-centos' 作为分隔符,打印行号 和 第二个参数
awk -F "VM-16-3-centos" '/error/ { printf "%3d, %s\n", NR, $2 }' /var/log/messages

# 使用正则查询既包含 'Stopped' 又包含 'Cleanup' 的内容
awk '/Stopped.*Cleanup/ {print $0}' /var/log/messages

# 统计 redis 指令,操作最多的前 10 个 key
grep -v "select" rp_monitor.log | awk  '{ printf "%s\n",$5}' | cut -c 2-15 | sort | uniq -c | sort -nr | head -n 10

# sed

# 替换字符串,'error' 替换为 'right', 只展示,不改变文件内容
 sed 's/error/right/g' a.txt

# 替换字符串,'error' 替换为 'right',改变文件内容
 sed -i 's/error/right/g' a.txt 
 
# 只替换第 10-20 行的内容,'hello' -> 'world' 
sed '10,20s/hello/world/' input.txt > output.txt
 

# uniq

-c: 显示数量

# sort

-n: 根据数字排序

-r: 从大到小排序

# 打印父进程 ID,按子进程数量排序
ps -ef | grep -v 'PID' | awk '{print $3}' | sort | uniq -c | sort -nr

# 跟本机建立连接的 IP 的数量排序
netstat -aultnp | grep 'ESTABLISHED' |awk '{print $5}' | awk -F ':' '{print $1}' | sort | uniq -c |
 sort -nr

# 常用分析命令


## --- redis ---
# 统计 redis 指令,操作最多的前 10 个 key
grep -v "select" /tmp/rp_monitor.log | awk  '{ printf "%s\n",$5}' | cut -c 2-15 | sort | uniq -c | sort -nr | head -n 10

# 统计 redis 指令,操作最多的前 10 个 指令
grep -v "select" /tmp/rp_monitor.log | awk  '{ printf "%s\n",$4}' | cut -c 2-10 | sort | uniq -c | sort -nr | head -n 10

## --- laravel ---
# 统计请求最多的前 10 个 uid
grep -r 'CheckUserAuth' 4.log | grep -v 'change app version' | awk -F 'user_id":' '{ print $2 }' | awk -F ',' '{print $1}' | sort | uniq -c | sort -nr  | head -n 10

# 统计某个 uid 访问最多的前 10 个 url
grep -r 'CheckUserAuth' 5*.log | grep '92825929' | grep -v 'change app version' | awk -F 'action":"' '{print $2}' | awk -F '"' '{print $1}' | sort | uniq -c | sort -nr | head -n 10

# 统计请求某个 url 最多的前 10 个 uid
grep -r 'CheckUserAuth' 4.log | grep -v 'change app version' | grep 'api/discover/pc_girl/get' | awk -F 'user_id":' '{ print $2 }' | awk -F ',' '{print $1}' | sort | uniq -c | sort -nr  | head -n 10

# 查询被设备 ban 记录




上次更新: 2024/11/05, 03:15:29