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 *:查看当前目录下每个文件夹的大小,定位哪个目录占满了磁盘。
相关推荐
道亦无名24 分钟前
Linux下是STM32的编译修改配置文件tensorflow
linux·运维
Azure DevOps26 分钟前
Azure DevOps Server:2026年3月份补丁
运维·microsoft·azure·devops
User_芊芊君子6 小时前
影音自由新玩法:Plex+cpolar 解锁异地访问,告别网盘限速烦恼
服务器·nginx·测评
wanhengidc7 小时前
云手机的运行环境如何
运维·服务器·游戏·智能手机·生活
炸膛坦客7 小时前
Linux - Ubuntu - PC端:(三)切换中英文,Fcitx5
linux·ubuntu
7yewh7 小时前
jetson_yolo_deployment 01_linux_dev_env
linux·嵌入式硬件·yolo·机器人·嵌入式
cyber_两只龙宝7 小时前
【Haproxy】Haproxy的算法详解及配置
linux·运维·服务器·云原生·负载均衡·haproxy·调度算法
阿常呓语7 小时前
Linux命令 jq详解
linux·运维·shell·jq
君生我老8 小时前
Linux 权限
linux
hy____1238 小时前
Linux_网络基础3
linux·服务器·网络