news 2026/10/27 1:17:57

【Linux基础回顾与总结】

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【Linux基础回顾与总结】

目录

  • Linux看进程里的线程信息
    • 查看/proc/直接读取内核信息
    • 使用ps查看线程内存
    • 使用top动态监控线程内存
    • 使用htop(更友好的交互式工具)
    • 使用pmap查看线程的详细内存映射
    • 使用valgrind(高级内存分析)
    • 结合 gdb 调试线程
  • Linux下查看二进制文件信息
    • nm
    • objdump
    • readelf
    • file
    • ldd
  • Linux查找
    • find
    • grep
    • which
    • whereis
    • locate
  • C api错误码
  • 标题
  • 标题
  • Linux目录结构
    • 根目录
    • 系统核心目录
    • 用户相关目录
    • 临时与挂载目录

Linux看进程里的线程信息

获取进程PID的一些方法:

psaux|grepprocess_name pidof process_name# 适用于精确匹配程序名pgrep-fprocess_name# 简洁

列出所有线程ID(TID)的一些方法:

ls/proc/<PID>/task/# 一般输出主线程 + 子线程ps-eLf|grep"<PID>"ps-T-p<PID># SPID是线程IDps-L<pid># LWP(轻量级进程ID,即线程 ID)pstree-p<pid># 以树形结构展示进程和线程的层级关系,清晰直观

查看/proc/直接读取内核信息

proc/<PID/cmdline是一个只读文件,包含进程的完整命令行信息。如果这个进程是zombie进程,则这个文件没有任何内容。
/proc/<PID>/comm包含进程的命令名。
/proc/<PID>/environ显示进程的环境变量。
/proc/<PID/fd是一个目录,包含进程打开文件的情况。
/proc/<PID/latency显示哪些代码造成的延时比较大。
/proc/<PID/maps显示进程的内存区域映射信息。

每个线程的内存信息存储在 /proc/<PID>/task/<TID>/status 中,关键字段包括:

  • VmRSS:实际使用的物理内存(Resident Set Size)。
  • VmSize:虚拟内存大小(包括共享库、堆、栈等)。
  • VmStk:栈内存大小。
  • VmData:数据段内存大小。
  • VmExe:可执行文件占用的内存。

查看每个线程的内存占用:

cat/proc/<PID>/task/<TID>/status|grep-E"VmRSS|VmSize"

批量查看所有线程的内存(脚本示例):

PID=12345forTIDin$(ls/proc/$PID/task/);doecho-n"Thread$TID: "grep-E"VmRSS|VmSize"/proc/$PID/task/$TID/statusdone

使用ps查看线程内存

ps 命令可以显示线程的 RSS(物理内存占用)和 VSZ(虚拟内存占用):

ps-eLf--sort=-rss|grep"process_name"

或更详细地显示所有线程的内存:

ps-opid,tid,rss,vsz,cmd-L-p<PID>

使用top动态监控线程内存

top -H 可以实时查看线程的内存占用:

top-H-p<PID>
  • 按Shift + E 切换内存单位(KB/MB/GB…),按Shift + M 按内存排序,按Shift + H 键在进程视图和线程视图之间切换
  • VIRT = VmSize:virtual memory usage 虚拟内存
    • 进程“需要的”虚拟内存大小,包括进程使用的库、代码、数据等
    • 假如进程申请100m的内存,但实际只使用了10m,那么它会增长100m,而不是实际的使用量
  • RES = VmRSS:resident memory usage 常驻内存/物理内存
    • 进程当前使用的内存大小,但不包括swap out
    • 包含其他进程的共享
    • 如果申请100m的内存,实际使用10m,它只增长10m,与VIRT相反
    • 关于库占用内存的情况,它只统计加载的库文件所占内存大小
  • SHR:shared memory 共享内存
    • 除了自身进程的共享内存,也包括其他进程的共享内存
    • 虽然进程只使用了几个共享库的函数,但它包含了整个共享库的大小
    • 计算某个进程所占的物理内存大小公式:RES – SHR
    • swap out后,它将会降下来

使用htop(更友好的交互式工具)

htop是top的增强版,可交互式查看线程内存:

  • 在命令终端直接输入htop
  • 按 F2 → Display Options → 勾选 “Show custom thread names” 和 “Highlight threads”
  • F5(树形视图)、F6(按内存排序)、F4(输入PID过滤目标进程)
htop-p<pid># 直接过滤指定进程,查看其线程

使用pmap查看线程的详细内存映射

pmap 可以显示每个线程的内存映射情况,但并不是所有系统都支持

pmap-x<TID># 查看 TID 的内存映射

使用valgrind(高级内存分析)

如果需要更详细的内存泄漏分析,可以使用 valgrind:

valgrind--tool=massif ./test_program

然后使用 ms_print 分析结果:

ms_print massif.out.<PID>#massif.out.<PID>文件可先在当前路径下找

结合 gdb 调试线程

如果需要调试线程,可以使用gdb:

gdb-p<PID>

然后在 gdb 中:

  • info threads:查看所有线程
  • thread N:切换到线程 N(N指前面的序号)
  • bt:查看线程调用栈

oom_score_adj 参考:https://www.jianshu.com/p/bbaeff371019


Linux下查看二进制文件信息

nm

查看二进制文件里的符号信息(函数名、变量名等符号及其类型和地址)

  • 用途:找函数是否存在、变量是否定义、排查未定义引用
  • 常用选项:
    • -C:对C++符号进行解码,使其更易读
    • -D:显示动态符号(用于动态库)

objdump

用于显示二进制文件的详细信息

  • 主要功能包括反汇编、查看文件头、节信息、符号表、重定位信息等
  • 常用选项:
    • -d:以汇编代码形式显示代码段(反汇编)
    • -S:显示源代码与汇编代码的混合模式
    • -f:显示文件头信息(文件类型、架构、入口点等)
    • -x:显示所有头信息

readelf

专门查看 ELF(Executable and Linkable Format)文件(Linux 标准二进制格式)详细信息,如文件头、节表、符号表等

  • 用途:分析 ELF 结构、查看依赖库、检查文件格式
  • 常用选项:
    • -h:显示ELF文件头信息(类型、架构、入口地址等)
    • -S:显示节信息(.text、.data、.rodata等)
    • -l:显示程序头表信息(内存布局和加载方式)
    • -s:显示符号表信息(函数、全局变量等)
    • -d:显示动态段(依赖库、RPATH、SONAME等)

file

根据文件的内容而非扩展名来判断文件的实际类型,例如判断一个未知文件是否可执行文件、脚本、动态/静态链接、是否stripped…

ldd

用于显示程序或共享库所依赖的动态链接库
等同于 objdump -x lib***.so | grep NEEDED


Linux查找

find

  • 实时遍历磁盘,按条件(名称、类型、大小、时间等)查找文件 / 目录
  • 例如:find /home -name “*.txt”(查找/home下所有.txt文件)

grep

  • 在文件中搜索指定字符串 / 正则,过滤文本
  • 例如:grep “error” /var/log/syslog(在日志文件中查找包含"error"的行)

which

  • 在系统的PATH环境变量中查找命令的完整路径
  • 仅搜索可执行文件
  • 例如:which ls(显示ls命令的完整路径)

whereis

  • 查找命令的二进制文件、源代码和帮助文件路径
  • 搜索范围比which更广
  • 例如:whereis gcc(显示gcc命令的可执行文件、源码和帮助文件路径)

locate

  • 基于数据库的快速文件搜索工具
  • 比find更快但非实时,因为它搜索的是预先构建的文件索引数据库
  • 需要先运行updatedb更新数据库
  • 例如:locate config(快速查找包含config的文件路径)

find功能最全面但速度较慢,locate最快但需要更新数据库,grep用于文本内容搜索,which和whereis主要用于查找命令路径。


C api错误码

调用linux C api函数发生异常时,一般会将errno变量(需include <errno.h>)赋一个整数值,不同的值表示不同的含义,可以通过查看该值推测出错的原因
例:

fd = open() if (fd < 0) { perror("Open"); }

错误码参考:https://blog.csdn.net/weixin_29345997/article/details/116728892


标题

  • 内容

标题

  • 内容

Linux目录结构

Linux采用树形层次目录体系,所有文件和目录从根目录(/)开始分支延伸。ls /得到Linux目录:

根目录

  • /:整个文件系统的起点,所有其他目录和文件都从这里开始

系统核心目录

  • /bin:存放所有用户都能使用的基本命令二进制文件(如ls、cp、mv、rm等)
  • /sbin:存放仅系统管理员(root)使用的系统管理命令(如reboot、shutdown等)
  • /boot:存放系统启动相关文件,Linux内核文件、引导加载程序等
  • /dev:存放设备文件,将硬件设备抽象为文件形式(如硬盘/dev/sda、键盘/dev/tty、U盘/dev/sdb)
  • /etc:存放系统全局配置文件,无二进制程序(如/etc/passwd、/etc/hosts等)
  • /lib:存放系统运行(如/bin和/sbin命令)所需的共享库文件(.so),类似 Windows 的 DLL。
  • /lib64:64 位系统专用库目录
  • /proc:虚拟文件系统,实时显示内核和进程信息(如/proc/cpuinfo、/proc/meminfo),不占实际磁盘
  • /sys:虚拟文件系统,提供内核和设备的详细信息(管理硬件设备的内核接口),不占实际磁盘
  • /usr:Unix Software Resource,存放用户应用程序、库文件及源码等
    • /usr/bin:更多用户命令
    • /usr/sbin:更多系统管理命令
    • /usr/lib:应用库
    • /usr/share:文档、图标、帮助等共享数据
    • /usr/local:手动编译安装软件的默认位置

用户相关目录

  • /home:普通用户主目录,每个用户有独立的子目录(如/home/zhangsan),存放用户文件、配置。
  • /root:系统管理员(超级权限用户)的主目录,为了安全,独立于普通用户,不放在/home下。

临时与挂载目录

  • /media:系统自动挂载可移动设备(如U盘、光盘、移动硬盘)的目录
  • /mnt:管理员临时手动挂载其他文件系统的目录(如挂载硬盘、网络共享)
  • /opt:存放可选的附加软件包,通常是第三方大型软件安装地(如Oracle、Chrome)
  • /tmp:存放临时文件,系统重启后会被清空
  • /run:系统运行时临时数据(进程 PID、锁文件、套接字),重启后重建
  • /var:存放经常变化的文件,如日志文件/var/log、缓存文件/var/cache等
  • /srv:存放本机服务提供的数据(如网站文件、FTP 共享数据)

本文内容参考公开技术文档,如有侵权请联系删除。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/27 1:17:00

数字IC前端学习笔记:脉动阵列的设计方法学(二)

相关阅读 数字IC前端https://blog.csdn.net/weixin_45791458/category_12173698.html?spm1001.2014.3001.5482 引言 脉动结构&#xff08;也称为脉动阵列&#xff09;表示一种有节奏地计算并通过系统传输数据的处理单元(PEs)网络。这些处理单元有规律地泵入泵出数据以保持规则…

作者头像 李华
网站建设 2026/10/27 1:15:01

Rope 换脸GUI:三步部署,10秒视频最快4.4秒出片

Rope 换脸GUI&#xff1a;三步部署&#xff0c;10秒视频最快4.4秒出片 【免费下载链接】Rope GUI-focused roop 项目地址: https://gitcode.com/GitHub_Trending/ro/Rope 想把视频里的人物换成另一张脸&#xff0c;不想折腾命令行&#xff1f;Rope 把 InsightFace 的 in…

作者头像 李华
网站建设 2026/10/27 1:15:01

YOLO-V8 通过英特尔 OpenVINO 提高 CPU 推理速度

一、OpenVINO 加速 YOLO-V8 CPU 推理 在本专栏的前面几篇文章我们使用 YOLO-V8 进行了各种任务的实验&#xff0c;但是针对与推理速度一直使用的 PyTorch 的格式&#xff0c;并且很多情况下也是在 CPU 上推理的&#xff0c;实际运行速度其实不是非常的理想。而OpenVINO 是一款…

作者头像 李华
网站建设 2026/10/27 1:14:38

Pytorch基础:Tensor的连续性

相关阅读 Pytorch基础https://blog.csdn.net/weixin_45791458/category_12457644.html?spm1001.2014.3001.5482 在Pytorch中&#xff0c;一个连续的张量指的是张量中各数据元素在底层的存储顺序与其在张量中的位置一致。这意味着每一个元素的地址可以通过下面的线性映射公式来…

作者头像 李华
网站建设 2026/10/27 1:14:38

基于 YOLO V10 Fine-Tuning 训练自定义的目标检测模型

一、YOLO V10 在本专栏的前面几篇文章中&#xff0c;我们使用 ultralytics 公司开源发布的 YOLO-V8 模型&#xff0c;分别 Fine-Tuning 实验了 目标检测、关键点检测、分类 任务&#xff0c;实验后发现效果都非常的不错&#xff0c;但它已经不是最强的了。最新的 YOLO-V10 已经…

作者头像 李华
网站建设 2026/10/27 1:14:19

Sentinel Dashboard 规则联动持久化方案

一、Sentinel Dashboard 规则联动持久化方案 Sentinel 是阿里开源的一个流量控制组件&#xff0c;它提供了一种流量控制、熔断降级、系统负载保护等功能的解决方案。并且我们通过 Sentinel Dashboard 可以非常便捷的添加或修改规则策略&#xff0c;但是如果细心的小伙伴应该可以…

作者头像 李华