Linux学习路径

学习路径:爬过这六个陡坡,你就能对Linux了如指掌

Linux 的灵活性也会使得你有 N 多种方法解决问题,从而事半功倍,你就会有一切尽在掌握的感觉。只可惜,大部分同学都停留在了山脚下。

在整个 Linux 的学习过程中,要爬的坡有六个,分别是:

  • 熟练使用 Linux 命令行
  • 使用 Linux 进行程序设计
  • 了解 Linux 内核机制
  • 阅读 Linux 内核代码
  • 实验定制 Linux 组件

第一个坡:抛弃旧的思维习惯,熟练使用 Linux 命令行

一旦找到某个命令行工具,替代输入框的是各种各样的启动参数。这些参数怎么填,一般可以通过 -h 查看 help,挨个儿看过去,就能找到相应的配置项;还可以通过 man 命令,查看文档。无论是什么命令行工具,最终的配置一般会落到一个文件上,只要找到了那个文件,文件中会有注释,也可以挨个儿看下去,基本就知道如何配置了。

大部分命令的行为模式都很像,你几乎不需要搜索就能完成大部分操作了。

想全面学习 Linux 命令,推荐你阅读《鸟哥的 Linux 私房菜》。如果想再深入一点,推荐你阅读《Linux 系统管理技术手册》。这本砖头厚的书,可以说是 Linux 运维手边必备。

第二个坡:通过系统调用或者 glibc,学会自己进行程序设计

如果说使用命令行的人是吃馒头的,那写代码操作命令行的人就是做馒头的。看着简简单单的一个馒头,可能要经过 N 个工序才能蒸出来。同样,你会发现,你平时用的一个简单的命令行,却需要 N 个系统调用组合才能完成。其中每个系统调用都要进行深入地学习、读文档、做实验。

你本来不理解进程树,调用了 fork,就明白了;你本来不理解进程同步机制,调用了信号量,也明白了;你本来分不清楚网络应用层和传输层的分界线,调用了 socket,都明白了。

如果要进一步学习 Linux 程序设计,推荐你阅读《UNIX 环境高级编程》,这本书有代码,有介绍,有原理,非常实用。

第三个坡:了解 Linux 内核机制,反复研习重点突破

当你已经会使用代码操作 Linux 的时候,你已经很希望揭开这层面纱,看看系统调用背后到底做了什么。

Linux 内核机制也非常复杂,而且其中相互关联。比如说,进程运行要分配内存,内存映射涉及文件的关联,文件的读写需要经过块设备,从文件中加载代码才能运行起来进程。这些知识点要反复对照,才能理清。

这块内容的辅助学习,我推荐一本《深入理解 LINUX 内核》。这本书言简意赅地讲述了主要的内核机制。看完这本书,你会对 Linux 内核有总体的了解。不过这本书的内核版本有点老,不过对于了解原理来讲,没有任何问题。

第四个坡:阅读 Linux 内核代码,聚焦核心逻辑和场景

一开始阅读代码不要纠结一城一池的得失,不要每一行都一定要搞清楚它是干嘛的,而要聚焦于核心逻辑和使用场景。

一旦爬上这个坡,对于操作系统的原理,你应该就掌握得比较清楚了。就像蒸馒头的人已经将面粉加工流程烂熟于心。这个时候,你就可以有针对性地去做课题,把所学和你现在做的东西结合起来重点突破。例如你是研究虚拟化的,就重点看 KVM 的部分;如果你是研究网络的,就重点看内核协议栈的部分。

这里也推荐一本书,《LINUX 内核源代码情景分析》。这本书最大的优点是结合场景进行分析,看得见、摸得着,非常直观,唯一的缺点还是内核版本比较老。

第五个坡:实验定制化 Linux 组件,已经没人能阻挡你成为内核开发工程师了

这个难度比较大,涉及的细节比较多,上一个阶段,我的建议是不计较一城一地的得失,不需要每个细节都搞清楚,这一个阶段要求就更高了。一旦代码有一个细微的 bug,都有可能导致实验失败。

最后一个坡:面向真实场景的开发,实践没有终点

如果你是运维,仅仅熟悉上面基本的操作是不够的,生产环境会有大量的不可控因素,尤其是集群规模大的更是如此,大量的运维经验是实战来的,不能光靠读书。如果你是开发,对内核进行少量修改容易,但是一旦面临真实的场景,需要考虑各种因素,并发与并行,锁与保护,扩展性和兼容性,都需要真实项目才能练出来。

总结

posted @ 2020-04-07 13:22  insist钢  阅读(634)  评论(0编辑  收藏  举报