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 *:查看当前目录下每个文件夹的大小,定位哪个目录占满了磁盘。
相关推荐
SPC的存折6 小时前
1、Redis数据库基础
linux·运维·服务器·数据库·redis·缓存
爱学习的小囧7 小时前
VMware ESXi 6.7U3v 新版特性、驱动集成教程和资源包、部署教程及高频问答详情
运维·服务器·虚拟化·esxi6.7·esxi蟹卡驱动
小疙瘩7 小时前
只是记录自己发布若依分离系统到linux过程中遇到的问题
linux·运维·服务器
dldw7778 小时前
IE无法正常登录windows2000server的FTP服务器
运维·服务器·网络
运维有小邓@8 小时前
什么是重放攻击?如何避免成为受害者?
运维·网络·安全
我是伪码农9 小时前
外卖餐具智能推荐
linux·服务器·前端
汤愈韬9 小时前
下一代防火墙通用原理
运维·服务器·网络·security
皮皮林5519 小时前
强烈建议大家使用 Linux 做开发?
linux
IMPYLH9 小时前
Linux 的 od 命令
linux·运维·服务器·bash
Kk.080210 小时前
Linux(十一)fork实例练习、文件操作示例及相关面试题目分享
linux·运维·算法