一.grep常用命令解析
1.grep常用命令
grep 是 Linux/Unix 系统中最核心、最强大的文本搜索工具,它就像你手里的"超级筛子"------能从海量数据中精准筛出你想要的每一行信息。
css
bash
grep [选项] "搜索模式" [目标文件]
| 选项 | 含义 | 示例 | ||
|---|---|---|---|---|
-i |
忽略大小写 | grep -i "error" logs.txt |
||
-v |
反向匹配(显示不包含该模式的行) | grep -v "debug" logs.txt |
||
-n |
显示匹配行的行号 | grep -n "404" access.log |
||
-c |
只输出匹配的行数(不显示内容) | grep -c "success" data.txt |
||
-l |
只输出包含匹配内容的文件名 | grep -l "TODO" *.py |
||
-r / -R |
递归搜索子目录 | grep -r "main" ./src/ |
||
-E |
启用扩展正则表达式(支持 ` | 、+、?、{}`) |
`grep -E "error | fatal" app.log` |
-A n |
显示匹配行及其后 n 行(After) | grep -A 5 "Exception" app.log |
||
-B n |
显示匹配行及其前 n 行(Before) | grep -B 5 "Exception" app.log |
||
-C n |
显示匹配行及其前后各 n 行(Context) | grep -C 3 "NullPointer" app.log |
logs.txt
vbnet
Error xxxxx
error mmmmmccccError dd
error123
abcdeoosoos
mmmmmmmmerror
cccccccaaaErrosError
dddddddddFFFFFF:aaaaaaaaaaaaaaaa
2026-06-25 00:00:00.545 [grpc-default-executor-92]
WARN c.z.a.e.a.grpc.service.impl.AutorsGrpcServiceImpl 243 - LOCALIZATION message, localize: true
2026-06-25 00:00:01.545 [grpc-default-executor-91]
WARN c.z.a.e.a.grpc.service.impl.AutorsGrpcServiceImpl 243 - LOCALIZATION message, localize: true
2026-06-25 00:00:02.309 [threadPoolTaskScheduler8]
WARN com.zhkj.allyrobot.util.network.HostWifiUtil 195 -
Host WiFi: [{"authMode":"WPA2","channel":"149","connectedStatus":1,"htExtcha":0,"index":0,
"intensity":69,"mac":"EC:B9:70:65:78:84","wifiName":"ZHKJ","wifiPassword":"ZHKJ20150801"},
error.txt
vbnet
ERROR
error
INFO
info
WARN
warn
- grep -i "error" logs.txt 忽略大小写

- grep "error" logs.txt 精确匹配(包含)

- grep -v 'error' logs.txt 反向匹配

-
grep -n 'WARN' logs.txt 显示匹配行的行号

-
grep -c 'WARN' logs.txt 显示匹配的行数

- grep -l 'error' *.txt

- grep -r 'rag' ./app/ 递归搜索子目录下含有rag的每条信息

- grep -E 'error|warn' error.txt 启用扩展正则表达式 (支持
|、+、?、{})

- grep - A 2 'ERROR' error.txt 显示匹配行以及前2行
- grep - B 2 'INFO' error.txt 显示匹配行以及后2行
- grep - C 2 'INFO' error.txt 显示匹配行以及前后2行

- 示例1
bash
grep "Parameters of creating a task\|Parameters of issuing a task\|Receive task action type" \
/tmp/info.log
- \ 是 Shell 中的续行符 ,而不是换行符本身,他的作用是告诉Shell:"命令还没结束,下一行是它的继续",可以去掉 \ 并写成一行
- 这条命令在
info.log文件中,搜索同时匹配以下三种模式之一的日志行:
| 匹配的关键词 | 含义 |
|---|---|
Parameters of creating a task |
后端创建任务时记录的参数(代表后端收到了创建请求)。 |
Parameters of issuing a task |
后端下发任务给机器人时记录的参数(代表指令已发出)。 |
Receive task action type |
机器人端收到任务动作时打印的日志(代表机器人收到了指令)。 |
-
| 在基础正则中,
|只是一个普通字符,必须用反斜杠\ 转义才能表示"逻辑或"的意思。 -
示例2:查看错误和心跳
markdown
grep -nE "ERROR|Heartbeat" /tmp/robot.log | tail -n 3
- `-n`:显示行号
- `-E`:启用 `|` 逻辑或
- `tail -n 3`:只取最后 3 条

- 示例2:查看某个时间段的日志
perl
grep "2026-06-24 14:3[0-5]" /tmp/info.log
`14:3[0-5]` 匹配 14:30 到 14:35
- 示例3:排除干扰行,只看关键信息
perl
grep -v "DEBUG" /tmp/app.log | grep "ERROR"
先剔除所有 DEBUG 行,再从剩余内容中找 ERROR。
- 示例4
bash
grep -B 2 -A 5 "NullPointerException" /tmp/app.log
显示 NullPointerException 出现的前 2 行和后 5 行上下文。
- 示例5: 管道符
|的黄金搭档
perl
# 查看正在运行的 Python 进程
ps aux | grep python
# 查看历史命令,快速定位 docker 操作
history | grep docker
# 查看日志尾部 100 行,再抓 ERROR
tail -n 100 app.log | grep ERROR



二.crul 常用命令
curl 命令学习指南
服务器地址:
http://192.168.242.128:8000所有测试接口前缀:/test/
速记表
| 参数 | 作用 | 示例 |
|---|---|---|
-X |
指定 HTTP 方法 | -X POST |
-d |
请求体数据 | -d '{"a":1}' |
-H |
添加请求头 | -H "Content-Type: application/json" |
-F |
表单/文件上传 | -F "file=@./a.txt" |
-b |
发送 Cookie | -b "key=value" |
-c |
保存 Cookie 到文件 | -c cookies.txt |
-v |
详细输出(调试必用) | -v |
-i |
显示响应头 | -i |
-L |
跟随重定向 | -L |
-I |
只看响应头(HEAD 请求) | -I |
-o |
保存响应体到文件 | -o output.png |
-w |
格式化输出变量 | -w "%{http_code}" |
-s |
静默模式 | -sS |
--max-time |
总超时秒数 | --max-time 5 |
--connect-timeout |
连接超时秒数 | --connect-timeout 3 |
1. 基础 HTTP 方法
bash
curl http://192.168.242.128:8000/test/method
最简单的 GET 请求 。
curl默认就是 GET 方法,所以不需要加-X。浏览器在地址栏输入 URL 本质上也是发 GET 请求。
bash
curl -X POST http://192.168.242.128:8000/test/method
-X指定 HTTP 方法。POST 通常用于"创建/提交"数据。这里演示的是同一个 URL 对不同方法返回不同结果。
bash
curl -X PUT http://192.168.242.128:8000/test/method
PUT 通常用于"全量替换"资源。比如更新用户全部信息,会把所有字段都覆盖掉。
bash
curl -X PATCH http://192.168.242.128:8000/test/method
PATCH 通常用于"局部更新"。比如只改用户手机号,其他字段不动。比 PUT 更轻量。
bash
curl -X DELETE http://192.168.242.128:8000/test/method
DELETE 删除资源。语义明确,一看就知道要删东西。
2. 详细输出控制
bash
curl -v http://192.168.242.128:8000/test/method
-v(verbose)显示完整的请求头和响应头 。>开头的行是 curl 发出去的,<开头的行是服务器返回的。调试必用。

bash
curl -i http://192.168.242.128:8000/test/method
-i(include)在响应体前面带上响应头 。和-v的区别:-i不显示请求头、不显示 TLS 握手信息,输出更干净。

bash
curl -sS http://192.168.242.128:8000/test/method
-s(silent)静默模式,不显示进度条;-S(show-error)配合-s时仍然显示错误信息。适合写在脚本里。

bash
curl -w '\n耗时: %{time_total}s\n' http://192.168.242.128:8000/test/echo
-w(write-out)输出格式化变量 。%{time_total}是总耗时,还有其他如%{http_code}(状态码)、%{size_download}(下载字节数)等。\n是换行。

3. 路径参数
bash
curl http://192.168.242.128:8000/test/path/42
URL 路径中的
42被服务端提取为参数。RESTful API 的典型风格 :/user/42表示 id 为 42 的用户。
bash
curl http://192.168.242.128:8000/test/path/books/99
多个路径参数 ,
books是分类,99是 id。层级关系一目了然。
bash
curl http://192.168.242.128:8000/test/path/optional/a/b/c/d
通配路径 ,
/a/b/c/d整段被捕获为一个字符串。常用于文件路径、嵌套资源等场景。
4. 查询参数(Query String)
bash
curl "http://192.168.242.128:8000/test/query?name=Tom&age=25&page=2&size=5"
?后面是查询参数,key=value格式,多个用&连接。必须加引号 ,否则&会被 shell 解释为后台运行。
bash
curl "http://192.168.242.128:8000/test/query?tags=a&tags=b&tags=c"
同名参数传多次 = 数组 。服务端收到
tags=["a","b","c"]。这是 HTTP 协议传数组的标准方式。

5. JSON 请求体
bash
curl -X POST http://192.168.242.128:8000/test/body/json -H "Content-Type: application/json" -d '{"name":"张三","age":30,"city":"北京"}'
拆解:
-X POST:指定 POST 方法-H "Content-Type: application/json":告诉服务端"我发的是 JSON",服务端据此解析-d '{"name":"张三"...}':-d是请求体数据。单引号保护 JSON 内部的双引号不被 shell 解释
bash
curl -X POST http://192.168.242.128:8000/test/body/typed -H "Content-Type: application/json" -d '{"name":"Tom","age":25,"tags":["dev","ops"]}'
和上一个类似,但数据中有嵌套数组
["dev","ops"],服务端会做强类型校验(name 必须是字符串、age 必须是数字)。
6. 表单提交
bash
curl -X POST http://192.168.242.128:8000/test/body/form -d 'username=admin&password=123456&remember=true'
注意没有
-H "Content-Type"。curl 不给-d加 Content-Type 时,它会把 Content-Type 自动设为application/x-www-form-urlencoded,这就是普通 HTML 表单的提交方式。key=value&key=value的格式。
7. 文件上传
bash
curl -X POST http://192.168.242.128:8000/test/upload -F "file=@./test.txt" -F "description=一段说明"
拆解:
-F(form)模拟 HTML 表单的文件上传 ,Content-Type 自动设为multipart/form-datafile=@./test.txt:@表示读取本地文件内容 发送,没有 @ 就是普通字符串- 一个
-F就是一个表单字段,可以有多个
bash
curl -X POST http://192.168.242.128:8000/test/upload/multi -F "files=@./a.txt" -F "files=@./b.txt"
同一字段名传多个文件,服务端收到一个文件数组。和查询参数的数组逻辑一样。
8. 请求头
bash
curl http://192.168.242.128:8000/test/headers
不加任何自定义头,看 curl 默认发了什么 。你会看到
User-Agent: curl/x.x.x、Accept: */*等 curl 自带的信息。
bash
curl http://192.168.242.128:8000/test/headers/user-agent -H "User-Agent: MyCurlApp/1.0"
-H(header)添加自定义请求头。这里伪装成自己的 App 名称。服务器可以据此识别客户端类型。
bash
curl http://192.168.242.128:8000/test/headers/custom -H "X-Custom-Token: secret123"
自定义头通常以
X-开头(历史惯例),用于传递 Token、追踪 ID 等自定义信息。
bash
curl http://192.168.242.128:8000/test/headers/auth -H "Authorization: Bearer eyJhbGciOi..."
Authorization 是 HTTP 标准的认证头 。
Bearer是令牌类型(最常见的是 JWT),eyJ...是 Base64 编码的令牌内容。几乎所有需要登录的 API 都用这个头传递身份信息。
9. Cookie
bash
curl http://192.168.242.128:8000/test/cookies -b "session=abc123; uid=42"
-b(cookie)发送 Cookie 给服务器 。格式是name=value; name=value。服务端收到后可以用来识别用户、维持会话。
bash
curl http://192.168.242.128:8000/test/cookies/set -c cookies.txt
-c(cookie-jar)把服务器返回的 Set-Cookie 保存到本地文件cookies.txt。下次请求用-b cookies.txt就能带上这些 Cookie,实现类似浏览器的"记住登录状态"。
10. 状态码
bash
curl -o NUL -w "%{http_code}\n" http://192.168.242.128:8000/test/status/200
拆解:
-o NUL:把响应体丢进垃圾桶(Windows 是NUL,Linux/Mac 是/dev/null),只关心状态码-w "%{http_code}\n":输出 HTTP 状态码 + 换行200= 成功
bash
curl -o NUL -w "%{http_code}\n" http://192.168.242.128:8000/test/status/301
301= 永久重定向(资源已永久迁移到新地址,浏览器会记住)
bash
curl -o NUL -w "%{http_code}\n" http://192.168.242.128:8000/test/status/404
404= 未找到(客户端输错了 URL 或资源不存在)
bash
curl -o NUL -w "%{http_code}\n" http://192.168.242.128:8000/test/status/500
500= 服务器内部错误 (代码崩了、数据库挂了等)。4xx 是客户端的错,5xx 是服务端的错。
11. 重定向
bash
curl -L http://192.168.242.128:8000/test/redirect?target=/test/method
-L(Location)自动跟随重定向 。服务端返回 302 +Location: /test/method,curl 会自动向新地址再发一次请求。不加-L只会看到 302 状态码,不会跳转。
bash
curl -L -v http://192.168.242.128:8000/test/redirect?target=/test/method
-L -v配合,可以看到两次请求的全过程:第一次返回 302,第二次拿到最终结果。
bash
curl -I http://192.168.242.128:8000/test/redirect
-I(head)只发 HEAD 请求,只拿响应头 。可以检查重定向目标而不下载响应体。等同于curl --head。
12. 超时测试
bash
curl --max-time 2 http://192.168.242.128:8000/test/slow/5
--max-time 2:整个请求最多等 2 秒 ,超时就断开。服务端要 5 秒才响应 → curl 报错退出。用于测试服务端响应速度、设置调用方超时保护。
bash
curl --connect-timeout 1 http://192.168.242.128:8000/test/slow/1
--connect-timeout 1:只限制 TCP 连接阶段的超时 (1 秒内连不上就放弃)。连接建立后的传输时间不受此限制。--max-time是总计时,--connect-timeout只管连接。

13. 不同响应格式
bash
curl http://192.168.242.128:8000/test/format/html
返回 HTML 页面 。Content-Type 是
text/html。浏览器渲染的就是这种。curl 虽然不渲染,但能看到完整 HTML 结构。
bash
curl http://192.168.242.128:8000/test/format/text
返回纯文本 ,Content-Type 是
text/plain。最简单的响应格式,不含任何标记。
bash
curl http://192.168.242.128:8000/test/format/binary -o out.png
-o out.png:把响应体保存为文件out.png,不做终端输出。二进制数据直接输出到终端会乱码,所以用-o保存。-O(大写)会用远程文件名自动保存。
14. CRUD 完整流程
bash
curl -X POST http://192.168.242.128:8000/test/crud/item -H "Content-Type: application/json" -d '{"name":"苹果","price":5.5}'
C = Create(创建):POST + JSON 请求体 → 服务端存入内存字典,返回带 id 的对象。
bash
curl "http://192.168.242.128:8000/test/crud/items?page=1&size=5"
R = Read(列表读取):GET + 分页参数 → 返回第 1 页,每页最多 5 条。
bash
curl http://192.168.242.128:8000/test/crud/item/1
R = Read(单个读取):用路径参数指定 id=1 → 返回该条详情,不存在则 404。
bash
curl -X PUT http://192.168.242.128:8000/test/crud/item/1 -H "Content-Type: application/json" -d '{"name":"香蕉","price":3.0}'
U = Update(全量替换) :PUT 必须传所有字段,服务端会完全覆盖。和 PATCH 的区别在这里体会最明显。
bash
curl -X PATCH http://192.168.242.128:8000/test/crud/item/1 -H "Content-Type: application/json" -d '{"price":9.9}'
U = Update(局部修改) :PATCH 只传要改的字段 。这里只改
price,name保持原值。RESTful 最佳实践。
bash
curl -X DELETE http://192.168.242.128:8000/test/crud/item/1
D = Delete(删除):删除 id=1 的资源。真正的删除操作需要鉴权,这里只是演示语义。
15. 万能 Echo(强烈推荐第一个试这个)
bash
curl -X POST "http://192.168.242.128:8000/test/echo?foo=bar" -H "X-Custom: hello" -b "session=test" -d '{"msg":"hello world"}'
学习 curl 最实用的接口。一条命令同时用到了:
-X POST(指定方法)?foo=bar(查询参数)-H "X-Custom: hello"(自定义头)-b "session=test"(Cookie)-d '{"msg":"hello world"}'(JSON 请求体)服务端把所有信息原样返回,你就能看到 curl 实际发了什么。
16. 请求体大小探测
bash
curl -X POST http://192.168.242.128:8000/test/body/size -H "Content-Type: application/json" -d '{"data":"hello"}'
服务端会告诉你请求体有多少字节。试着把
-d的数据改大改小,观察字节数变化。
17. 查看所有测试接口
bash
curl http://192.168.242.128:8000/test
测试接口的目录页 ,列出
/test下所有可用接口及其方法。忘记有哪些接口时先打这个。
常见 HTTP 状态码一览
| 状态码 | 含义 | 类型 |
|---|---|---|
| 200 | 成功 | 2xx 成功 |
| 201 | 已创建 | 2xx 成功 |
| 204 | 无内容(删除成功常用) | 2xx 成功 |
| 301 | 永久重定向 | 3xx 重定向 |
| 302 | 临时重定向 | 3xx 重定向 |
| 400 | 请求错误(参数不对) | 4xx 客户端错误 |
| 401 | 未认证(没登录) | 4xx 客户端错误 |
| 403 | 禁止访问(没权限) | 4xx 客户端错误 |
| 404 | 未找到 | 4xx 客户端错误 |
| 429 | 请求太频繁 | 4xx 客户端错误 |
| 500 | 服务器内部错误 | 5xx 服务端错误 |
| 502 | 网关错误 | 5xx 服务端错误 |
| 503 | 服务不可用 | 5xx 服务端错误 |










