学习本身是件很玄乎的事情,有些人潇潇洒洒没见怎么用心就能够获得很好的成绩,而有些人则相反,投悬梁锥刺骨也还是成绩平平收获平平。这里面很大一部分的原因就是方法。当然因为每个人的情况并不相同,对于linux内核学习这件事来说,也就没有这样一个标准的方法存在,但是我们仍然可以来共同探讨一下如何才能更加有效的去学习linux内核。
本期特邀请中国Linux内核领域的权威专家将针对在Linux内核学习过程中遇到的问题,给予解答。欢迎午饭积极提问,与专家一起讨论!
专家著作: 《Linux内核修炼之道》 《linux那些事儿之我是USB》
本期专家: 任桥伟
擅长领域: Linux内核与驱动
专家简介: 西安交通大学本科、上海交通大学硕博,资深研发工程师、项目经理、51CTO做客专家,专注于Linux内核与驱动开发。著有《Linux内核修炼之道》(人民邮电出版社)、《Linux那些事》(电子工业出版社)等备受网友关注的专业图书。
精选本期网友提问与专家解答,以供网友学习参考。
Q: 我想问一下专家,为了成为一名合格的网络工程师,他应该了解linux的那些方面?
A: 既然是作为一名网络工程师,首要的自然网络方面的基础,比如局域网、广域网、各种网络协议等,操作系统本身只是作为将这些网络知识给予利用的一个平台。如果是希望从事linux平台上的工作,那么就需要对linux操作系统的系统架构以及工作原理进行一定程度的了解,当然对linux系统本身的使用也要非常的熟练,特别是要能够熟练的掌握linux平台上网络相关的命令、工具。
Q:我想深入学习LINUX,打算从LINUX 0.01那一万行代码开始,你看合适吗?我接触LINIX不多,只有一些粗浅的知识,谢谢。
A: 你的问题实际上可以分解为两个问题:如何深入学习linux,或者说如何学习linux内核?从哪一个版本开始学习比较合适,比如0.01?
对于第一个问题,根据你描述的自己的情况,我的建议是:
1. “先会使用它”,这也是linus本人的回答,也就是说首先要能够熟练的使用linux操作系统。如果连linux是什么、常用的操作都不会就去研究内核,是不可能入“门”的。
2. 看懂内核源码需要一些操作系统、C语言等的基础。
3. 对内核有个整体的理解和认识。这方面,lkd这本书,和我的linux内核修炼之道应该都能够帮助你。
4. 会配置和编译内核,看得懂内核中的Kconfig和Makefile文件,这两个文件就是内核中的地图,看得懂它们,在内核里就不会迷路。
5. 记住,学习内核就是学习内核的源代码,任何内核有关的书籍都是基于内核, 又不高于内核的。内核源码本身就是最好的参考资料,其他任何经典或非经典的书最多只是起到个辅助作用,不能也不应该取代内核代码在我们学习过程中的主导地位。因此你要做得是选择内核的一个部分或子系统,以韩峰同志对待日记的态度,严谨而细致得理解每一段代码的实现,多问多想多记。切勿抱着走马观花,得过且过的态度。
其实也就是我在linux内核修炼之道中总结的:全面了解抓基本,兴趣导向深钻研;融入社区做贡献,坚持坚持再坚持。
下面是第二个问题,从哪一个版本开始学习比较合适?
我个人建议从新的内核开始,固然新内核的代码非常庞大,但并没有说非要求大求全,追求每个部分都要理解。学内核忌讳求大而全,如果对哪部分比较感兴趣,研究相关的源码和change就行了,当然仁者见仁智者见智,自己如果觉得从低版本开始更好更适合,那采用这种方式也未尝不可,毕竟各人的路还是各自走的。
Q:尽管我知道Linux的内核有难度, 但是我还是想知道我要把C语言(或者汇编,再者其它语言)学到什么程度才能有足够的知识去学习Linux内核? -------感谢专家的回答.
A:在《Linux内核修炼之道》的3.1节专门对类似问题做了回答,概括就是:
首先,学习Linux内核并不仅仅只需要C语言的知识,还需要掌握一些操作系统的理论基础,甚至包括一些硬件的常识,毕竟linux内核源码是一个操作系统的核心代码。
其次,对于C语言来说,也不需要很精通,但要能够链表等数据结构的C实现,当然对C越熟悉会越有帮助,意思就是说起码要能够看懂C代码。我们在研究分析内核源码的过程中,要去体会内核源码的美。
Q:老师你好,我现在的目标是做linux系统管理员。我现在的公司是在给移动做电子商务平台的,服务器也是用的linux的。但是我们很多权限都没有,他们是有自己的系统组的负责管理linux的各种事务。我觉得现在的环境不大利于我的linux学习,老师有什么方法或者建议给我吗?或者说我学习linux的一些注意事项或者方法?? 谢谢了
A:首先,环境是可以自己创造的,公司的没有提供很多的权限,可以在自己的PC上搭建实践的环境啊。下面是我个人的一些建议,希望对你有用。
1. 从命令开始从基础开始。了解Linux 的基础知识,包括用户管理、群组的概念等;掌握常用的命令。
2. 作为一个linux系统管理员,要适应与习惯在命令行下工作的方式,并勤于实践。
3. 学习shell等脚本语言。
4. 有一定的网络的基础,包括路由概念、OSI七层网络模型、TCP/IP模型及相关服务对应的层次等。
5. 学会使用文档,学会在linux社区寻求帮助与分享经验。
Q:学习linux内核需要什么样的基础呢?
A:《Linux内核修炼之道》的3.1节即为介绍内核学习的技术基础: