news 2026/9/10 9:04:51

常用的底层调试用的不容易记住的命令整理(持续更新)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
常用的底层调试用的不容易记住的命令整理(持续更新)

一、背景

底层调试过程中,有不少好用但是由于也不是那么常用或者用得不少次数但是参数过多不方便形成长期记忆,而要每次用每次都要从弹药库里翻找,造成了时间上的浪费。这里做一些不同场景下调试性能稳定性问题会用到的一些常用的不容易记住的命令,方便后面查找。

二、objdump出某个内核函数对应的elf

在不开内核地址随机化的系统上,可以先到编译生成目录里去找符号对应的映射的文件System.map,比如如下图,从System.map里找到我们要看的下图里的do_exit的offset是0xec的内核代码的位置是在做什么:

从System.map里找到do_exit函数,如下图的地址:

如上图,do_exit函数的起始地址是ffff80000809af80,结束地址是ffff80000809b920。

然后,再通过下面的命令objdump去解析出对应函数的elf文件:

aarch64-linux-gnu-objdump -S vmlinux --start-address=0xffff80000809af80 --stop-address=0xffff80000809b920 > vmlinux_do_exit.txt

三、ps命令,查看指定进程的各个线程的运行情况

如下命令可以抓取指定进程的里面所有线程的线程id、线程名、实时优先级、nice值、上一次运行所在的cpu、线程的cpu平均使用率、如果是陷入内核的系统调用的函数名,这些基础的信息:

ps -L -o pid,tid,comm,rtprio,nice,psr,%cpu,state,stat,wchan -p 75437

自行替换上面命令里的-p后面的进程id的数字。

3.1 如果是搜索所有进程

如果是搜索全局范围的线程,则上面的命名的后面-p <pid>的筛选就不需要了,另外,需要带上-e,即:

ps -L -eo pid,tid,comm,rtprio,nice,psr,%cpu,state,stat,wchan

四、grep命令、sort命令的使用、watch命令

4.1 grep带-E,结合正则表达式如.+及-B,-A参数及-v参数

grep命令我用得非常多,常用的参数是-E表示使用正则表达式,正则表达式里.*表示任意个字符包括0个字符,这个可能很多人都知道,而.+这个可能用的人不多,但是有时候非常有用,比如要表示一对[]里有字符,那么用grep来实现搜索遍历出带有[]且[]里有字符的行,并显示这一行临近的前3行,后5行的内容的脚本:

grep -B3 -A5 -E "\[.+\]"

上面的B表示before,A表示after,.+表示有字符(不是空),注意,[和]都是特殊字符,需要在前面加\。

如果要取反的匹配,则带上-v参数即可,如要剔除掉所有包含[]且[]里有字符的所有的行,过滤出剩下的行,如下命令:

grep -B3 -A5 -vE "\[.+\]"

另外,正则表达式可以使用括号来与|来进行配合()包裹了一段正则表达式,这样可以结合|来使用,比如匹配开头是abc或者cde,结尾是123或者234的行:

temp.txt的内容:

abc abc 222 456 123 abc dsfdsfsfsd 234 cde dfdfd 123 333 cde 123 555


使用下面的命令:

cat temp.txt | grep -E "^(abc|cde).*(123|234)$"

输出结果:

.*表示任意字符串可以是空,^表示开头,$表示结尾

4.2 sort命令,-k1 -nr及自定义分隔符结合head和tail命令

常用的sort用k加一个数字,比如1表示第一个段落(默认的分割符是空格或制表符),但是可以设置自定义的分割符。-n表示用数字来理解段落来进行排序,-r表示由大的数字到小的数字进行排序。

如搜索系统里所有的线程的实时优先级按照由高到低排序,显示前10个:

ps -L -eo "rtprio,pid,tid,comm" | sort -k1 -nr | head -n 10

tail也是可以用-n 行数这么来显示,另外,tail -f可以用来读取持续变大的文件。

sort命令指定自定义的分割符,比如指定[]分隔符,过滤出下面的temp.txt里的最后一个数字,再进行排序的命令:

temp.txt的内容:

[3][Dexceed] cpu[14]desc[Dexceed]dtimens[22550600] [4][Dexceed] cpu[4]desc[Dexceed]dtimens[42391850] [5][Dexceed] cpu[8]desc[Dexceed]dtimens[22864425]

命令:

sort -t '[' -k6,6nr temp.txt

排序后的结果:

因为指定了[作为分隔符,找到了第6个字段就是最后包含]的这个字段,因为用了-n所以识别成数字,也就把后面的]给过滤掉了,所以就可以按数字排序了。

4.3 watch命令

watch命令太有用了,我经常用它来持续观察一些感兴趣的状态,watch可以设置的最小间隔是0.1秒,也是足够可以观察到一些细节变化了。

watch -n 0.1之后,后面的命令不能tab出来,所以我一般是先把后面的命令tab联想敲完之后,再前后补一个""后,再加watch -n 0.1在开头。

五、du命令、wc命令、truncate命令

du -sh可能大家知道得比较多,但是是看不到隐藏文件的,之前一篇博客讲到了一个vscode的占很大的空间的问题 vscode的缓存文件夹及查看进程读写的文件,看隐藏文件得用下面的命令:

du -sh ./* .[^.]* | sort -hr

这里再做一下记录。

wc命令我用得比较多的就是wc -l来查看行数,常用于搜索出来的内容看有多少行,再用别的匹配方式来去搜索看搜索出来是多少行,这么去比较看是否一致或者有大小关系,来推断一些如调用栈是否调用函数A的调用者是否都是函数B。

wc还可以带-m去数字符数,-c去数字节数

truncate命令主要有两种用途,一种是扩大文件,先固定占住一定的磁盘空间,一种是裁剪掉一些系统上的日志文件来节省空间。用truncate来去裁剪日志文件,日志文件还在,不影响日志的继续存储。

truncate改变文件大小的命令:

truncate -s 0 temp.txt

效果如下:

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

开发者必看:集成GLM-4.6V-Flash-WEB到业务系统的路径

集成GLM-4.6V-Flash-WEB到业务系统的实践路径 在当前AI技术快速渗透各行各业的背景下&#xff0c;多模态能力正从“锦上添花”演变为核心竞争力。尤其是当用户上传一张图片并提问“这是什么&#xff1f;”、“该怎么办&#xff1f;”时&#xff0c;系统能否像人类一样“看图说…

作者头像 李华
网站建设 2026/9/9 19:18:34

LINKSWIFT实战:打造个人知识库的智能链接中心

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 开发一个个人知识管理系统的核心模块&#xff0c;专注于链接和资源的智能管理。功能包括&#xff1a;1) 网页内容抓取和摘要生成 2) 多维度标签系统 3) 可视化知识图谱展示 4) 跨设…

作者头像 李华
网站建设 2026/9/7 0:45:34

AI自动生成CRONTAB任务:告别手动配置的繁琐

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 开发一个AI辅助工具&#xff0c;能够根据用户输入的任务描述&#xff08;如每天凌晨3点备份数据库&#xff09;&#xff0c;自动生成正确的CRONTAB配置。工具应支持自然语言理解&a…

作者头像 李华
网站建设 2026/9/4 17:06:25

远程协作白板工具:GLM-4.6V-Flash-WEB实现手绘草图语义转换

远程协作白板工具&#xff1a;GLM-4.6V-Flash-WEB实现手绘草图语义转换 在一场跨国产品设计会议中&#xff0c;产品经理用触控笔在数字白板上快速勾勒出一个潦草的流程图——几条箭头连接着“用户登录”“权限校验”“数据同步”等文字框。不到半秒后&#xff0c;系统自动生成了…

作者头像 李华
网站建设 2026/9/6 17:24:58

YOLO26在智能安防中的5个实战案例

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 基于YOLO26构建一个智能安防监控系统&#xff0c;要求能够识别特定场景下的异常行为&#xff08;如攀爬围墙、遗留物品&#xff09;。系统需包含警报触发机制&#xff0c;并将检测…

作者头像 李华
网站建设 2026/9/3 17:53:10

HEIDISQL在企业级数据库管理中的5个实战案例

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 创建一个HEIDISQL实战案例演示项目&#xff0c;包含&#xff1a;1) 大型电商数据库迁移案例 2) 高并发查询优化方案 3) 跨服务器数据同步实现 4) 定时备份自动化脚本 5) 敏感数据脱…

作者头像 李华