1. 进程管理

1.1 ps (Process Status) - 静态查看

  • 常用组合:ps -ef 或 ps aux
    • ps -ef:显示所有进程的完整格式(UID, PID, PPID, CMD 等)。
    • ps aux:显示更详细的资源占用(CPU%, MEM%)。
  • 查找名为 c++ 的进程:
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)
    • # 附加到进程(会暂停进程,生产环境谨慎)
      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 被占用了,怎么找出是谁占的?”
    • netstat -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 *:查看当前目录下每个文件夹的大小,定位哪个目录占满了磁盘。
Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐