1. 进程管理
1.1 ps (Process Status) - 静态查看
- 常用组合 :ps -ef 或 ps aux
- ps -ef:显示所有进程的完整格式(UID, PID, PPID, CMD 等)。
- ps aux:显示更详细的资源占用(CPU%, MEM%)。
- 查找名为 c++ 的进程:
bash
ps -ef | grep c++
# 或者排除 grep 自身进程
ps -ef | grep c++ | grep -v grep
- 追问:PID 和 PPID
- 答:PID 是进程 ID,PPID 是父进程 ID。如果父进程挂了,子进程通常会变成孤儿进程被 init/systemd 接管。
1.2 top / htop - 动态监控
-
作用:实时查看系统负载、CPU、内存使用情况。
-
关键操作 :
- 进入后按
P:按 CPU 使用率排序。 - 进入后按
M:按内存使用率排序。 - 按
k:输入 PID 可以杀死进程。
- 进入后按
-
追问 :
- "CPU 飙高到 100% 怎么排查?"
- 思路:
- top -> 找到高 CPU 的 PID
- ->top -H -p <PID> 查看该进程下的线程(-H:显示线程(H代表 Threads),否则默认只显示进程。-p <PID>:指定要监控的进程 ID,可跟多个 PID,用逗号分隔),找到高 CPU 的线程 ID (TID)
bash# 附加到进程(会暂停进程,生产环境谨慎) gdb -p <PID> # 在 gdb 中执行: (gdb) info threads # 查看所有线程及状态 (gdb) thread <线程编号> # 切换到高CPU线程 (gdb) bt # 查看调用堆栈 (gdb) bt full # 查看详细堆栈(含局部变量) (gdb) frame <帧编号> # 切换到具体栈帧 (gdb) print <变量名> # 查看变量值 (gdb) detach # 解除附加(恢复进程运行) (gdb) quit
1.3 kill - 杀死进程
- 常用命令 :
- kill <PID>:默认发送 SIGTERM (15),优雅停止。
- kill -9 <PID>:发送 SIGKILL (9),强制杀死(慎用,可能导致数据丢失)。
- 追问 :
- "kill -9 和 kill 有什么区别?"
- 答:kill 给进程信号让它自己清理资源后退出;kill -9 是内核直接杀掉进程,进程来不及做任何清理工作。
2. 日志查看
后端开发面试必问:"线上报错了,你怎么看日志?"
2.1 tail - 看末尾
- 核心命令 :tail -f filename.log
- -f:实时滚动查看最新日志。
- -n 100:查看最后 100 行。
- 例:tail -f -n 200 error.log(实时查看最后 200 行)。
2.2 grep - 搜索过滤
- 核心命令 :
- grep "Exception" app.log:查找包含 Exception 的行。
- grep -C 5 "Error" app.log:查看匹配行及其上下各 5 行(Context)。
- grep -v "INFO" app.log:排除包含 INFO 的行。
- 追问 :
- "统计日志中 'ERROR' 出现的次数?"
- grep -c "ERROR" app.log
2.3 less / more - 分页查看大文件
- 区别:less 比 more 强大,支持上下翻页、搜索。
- 操作 :
- /keyword:向下搜索关键字。
- ?keyword:向上搜索关键字。
- G:跳到底部,g:跳到顶部。
- 场景:日志文件几个 G 大时,严禁用 vim 打开,必须用 less。
3. 网络与端口
3.1 netstat / ss
-
常用命令 :
- netstat -tunlp | grep <端口号>:查看哪个进程占用了指定端口。
- ss -tunlp:netstat 的现代替代品,速度更快。
-
参数解释 :
- -t: TCP, -u: UDP, -n: 显示数字 IP, -l: 监听状态, -p: 显示进程 PID。
-
追问 :
- "端口 8080 被占用了,怎么找出是谁占的?"
bashnetstat -tunlp | grep 8080 # 拿到 PID 后,再用 ps -ef | grep PID 看是哪个服务
3.2 curl
- 作用 :测试接口连通性。
- curl -I http://localhost:8080/health:只查看响应头(判断服务活没活)。
- curl -X POST -d "param=1" http://...:模拟 POST 请求。
3.3 ping / telnet / nc
- ping ip:测试网络通不通。
- telnet ip port 或 nc -zv ip port:测试特定端口通不通(比如数据库端口)。
4. 文件与权限
4.1 chmod / chown
- chmod 755 file.sh:赋予执行权限(rwx r-x r-x)拥有者、组、其他。
- chown user:group file:修改文件所有者。
4.2 find
- 场景 :查找最近修改过的文件或大文件。
- find . -name "*.log":找当前目录下所有 log 文件。
- find . -size +100M:找大于 100M 的文件(清理磁盘空间必备)。
- find . -mtime -1:找最近 1 天内修改过的文件。
4.3 df / du
- df -h:查看磁盘整体使用率(Human-readable)。
- du -sh *:查看当前目录下每个文件夹的大小,定位哪个目录占满了磁盘。