从2013年的第一届算起,庐山研习班走过十余个年头,办了十几次了。但每一次,都有很多不一样。即使是相同的主题,也有很大差异。
今年春季的庐山研习班是在上个周末。周四晚上我和大部分同学都到了五老峰脚下的训练基地。
除了周六下午一起爬山之外,从周五一早到周日下午的三天两晚时间里,大家都沉浸在Linux的世界里。
为了提高知识的转化率,这一届研习班里,我尽可能减少单纯的讲解,努力增加讨论和动手试验。
讨论方面,感谢有多位资深码农参加,问了很多高质量的问题,不时还有很精彩的“点评”和“共鸣”。
动手试验方面,除了预定的大量操作之外,我还在回答问题时“临时起意”,带着大家写代码,然后上调试器,一起探索。
有一个问题是,当一个程序在做死循环,有人kill它时,是怎么从循环里跳出来的。我当场写了一个做while循环的小程序,gcc编译,然后上gdb观察信号分发的过程,使用handle命令配合,把干讲很难说清的问题,让大家看的一清二楚。
研习班上,有“同学”给我留了个作业,希望把讲过的工具和命令总结一下。我觉得这个建议非常好,立刻答应下来。
周一一早回到上海后,我便直接到单位上班了。前几天晚上又忙别的事情了,但我一直记着这个作业,今晚终于抽出时间,整理出下面这个列表。
1 apt
apt install 安装软件包
apt-cache search 搜索软件包
2 chrt
创建在“头等舱”运行的进程,管理进程的实时属性
3 dmesg
看内核的日记
4 GDB
上调试器,除了常用的命令外,还现场演示了很多种特殊的用法,比如调用malloc,弥补perf的不足查找函数名,飞程序指针等
5 insmod
将刘姥姥驱动送进高特权的内核空间
6 KernelShark
图形化方式捕捉追踪事件和显示分析
7 lsmod
观察内核模块
8 cat /proc/maps
观察进程空间
9 nice
调整普通仓里进程的优先级
10 objdump
观察二进制文件
11 perf stat
看CPU工厂的硬指标
12 perf top
观察热点
13 ps
看软件世界里的众生
14 pstree
理解进程的关系
15 readelf
理解可执行文件格式和很多软件机制
16 renice
动态调整优先级
17 STRACE
观察系统调用,理解大局观,简单调优
18 taskset
绑定CPU
19 tee
与sudo配合修改特殊的假文件
20 top
LINUX下的任务管理器
21 trace_cmd
使用追踪机制的命令行工具
22 valgrind
二进制插桩方式的内存错误检查工具
23 vim
经典的编辑器
24 windbg
Windows下的经典调试器,使用它帮助理解地址空间
25 挥码枪
last but not least,硬件调试器,将内核断下来,慢慢观察
对于错过庐山站的朋友,五月份的上海站正在招生中。
(写文章很辛苦,恳请各位读者点击“在看”,也欢迎转发)
*************************************************
正心诚意,格物致知,以人文情怀审视软件,以软件技术改变人生
扫描下方二维码或者在微信中搜索“盛格塾”小程序,可以阅读更多文章和有声读物
也欢迎关注格友公众号