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 *:查看当前目录下每个文件夹的大小,定位哪个目录占满了磁盘。
相关推荐
猪脚踏浪1 小时前
linux 拷贝文件或目录到指定的位置
linux
大树8817 小时前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠17 小时前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质17 小时前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
bush417 小时前
嵌入式linux学习记录十四、术语
linux·嵌入式
载数而行52018 小时前
Linux 11 动态监控指令top
linux
小宇宙Zz18 小时前
Maven依赖冲突
java·服务器·maven
Inhand陈工18 小时前
基于台达PLC与映翰通IG502的智慧水产养殖精准投喂与远程运维解决方案
运维·人工智能·物联网·阿里云·信息与通信
酣大智19 小时前
ARP代理--工作原理
运维·网络·arp·arp代理
不会C语言的男孩19 小时前
Linux 系统编程 · 第 8 章:进程基础
linux·c语言