C++:(6) 常用 linux 命令:进程管理、日志查看、网络端口与文件权限

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 被占用了,怎么找出是谁占的?"
    bash 复制代码
    netstat -tunlp | grep 8080
    # 拿到 PID 后,再用 ps -ef | grep PID 看是哪个服务

3.2 curl

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 *:查看当前目录下每个文件夹的大小,定位哪个目录占满了磁盘。
相关推荐
刚入门的大一新生7 分钟前
Linux-线程概念
linux·jvm
H.莓飛16 分钟前
【数据结构】排序总结与规模实测
linux·服务器·开发语言·数据结构·visual studio·1024程序员节
xianyuCcCcCCCcc18 分钟前
Kubernetes :健康检查、认证授权与可视化面板
运维·云原生·kubernetes·dashboard
Zenova EdgeOS43 分钟前
Linux 日志实战:用 journalctl 精准检索与治理工业边缘日志
linux·运维·chrome
Dory_Youth1 小时前
电脑的搜索功能不能用,一搜就黑屏闪退
运维·笔记
Dxy12393102161 小时前
Linux 压缩解压相关命令介绍
linux·运维·服务器
eleven_4u1 小时前
QPS如何计算,如何部署架构
java·linux·运维·jvm·中间件
云飞云共享云桌面1 小时前
非标自动化工厂研发部门怎么实现一台服务器带10个SolidWorks设计并发
运维·服务器·人工智能·3d·自动化·电脑·制造
分布式存储与RustFS1 小时前
你的网站备份只存一块盘?把 1Panel 的备份目标换成 RustFS
运维·开源·备份·对象存储·1panel·s3·rustfs
遇见小修修1 小时前
打印机无法连接故障:操作误区汇总与排查教程
运维·服务器