查找工具
# 文件查找
# 文本查找
# 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
网络工具→