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 小时前
便携式小型1588主时钟源用途及解决方案,1588时钟服务器,1588v2时钟
运维·服务器
MMME~2 小时前
HAProxy:高性能负载均衡实战指南
linux·运维·数据库
sryyd_022 小时前
云原生-高可用集群keepalived
服务器·网络·云原生
野指针YZZ2 小时前
Gstreamer插入第三方plugins流程:rgaconvert
linux·音视频·rk3588
快快起来写代码2 小时前
Arrays.asList方法踩坑
linux
JZC_xiaozhong2 小时前
DCS分散控制系统与MES集成:实现制造过程数据贯通的关键路径
大数据·运维·制造·etl工程师·bpm·数据集成与应用集成·业务流程管理
忙碌5442 小时前
云原生时代的智能路由:Istio服务网格实战深度解析
运维
济6172 小时前
ARM Linux 驱动开发篇--- pinctrl 子系统详解-- Ubuntu20.04
linux·嵌入式·嵌入式linux驱动开发
云飞云共享云桌面2 小时前
10人SolidWorks设计团队如何提升SolidWorks软件利用率
大数据·linux·运维·服务器·网络·人工智能