Linux内核实战(一)- 学习路线规划

1 抛弃旧文化,迎接Linux命令新文化

Linux第一步,从Windows思维,切换到Linux的“命令行+文件”模式

在Linux中,做什么都有相应命令。一般就在bin或者sbin目录下,数量繁多。如果你事先不知道该用哪个命令,很难通过枚举的方式找到。因此,在这样没有统一入口的情况下,就需要你对最基本的命令有所掌握。

一旦找到某个命令行,替代输入框的是各种各样的启动参数。

这些参数怎么填,

  • 一般可以通过 -h 查看help,就能找到相应的配置项
  • 还可以通过man命令,查看文档

无论是什么命令行工具,最终的配置一般会落到一个文件上,只要找到了那个文件,文件中会有注释,也可以挨个儿看下去,基本就知道如何配置了。

攻克了第一个困难了。这个时候,你能看到一些很美丽的风景,例如一些很有技巧的命令sed和awk、很神奇的正则表达式、灵活的管道和grep、强大的bash。你可以自动化地做一些事情了,例如处理一些数据,会比你使用Excel要又快又准,关键是不用框框点点,在后台就能完成一系列操作。在处理数据的同时,你还可以干别的事情,半夜处理数据,第二天早上发个邮件报告,这都是Excel很难做到的事情。

2 通过系统调用或者glibc,掌握程序设计

命令行工具也是程序,只不过是别人写的程序。从用别人写的程序,到自己能够写程序,通过程序来操作Linux,这是第二个要攻克的困难。

用代码操作Linux,可以直接使用Linux系统调用,也可以使用glibc的库。

Linux的系统调用非常多,而且每个函数都非常复杂,传入的参数、返回值、调用的方式等等都有很多讲究。

这里面需要掌握很多Linux操作系统的原理,否则无法理解为什么应该这样调用。

刚开始学Linux程序设计的时候,你会发现它比命令行复杂得多。

因为你的角色再次变化。

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

经过一段时间的学习,你攻克了这些东西。这时候,你已经很接近操作系统的原理了,你能看到另一番风景了。

大学里学的那些理论,你再回去看,现在就会开始有感觉了。

  • 进程树,调用了fork
  • 进程同步机制,调用信号量
  • 网络应用层和传输层的分界线,调用socket

都明白了!

3 再三研究Linux内核

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

进一步了解内核的原理,有助于你更好地使用命令行和进行程序设计,能让你的面试及开发水平更上一层楼,但是不建议直接看源码,因为Linux代码量太大,很容易迷失。

最好的办法是,先了解一下Linux内核机制,知道基本的原理和流程

不过,Linux内核机制也非常复杂,而且其中相互关联。

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

但是一旦攻克!你会发现Linux这个复杂的系统开始透明起来。

无论你是运维,还是开发,你都能大概知道后发生的事情,并在出现异常的情况时,比较准确地定位到问题所在。

Linux内核机制是我们重点学习部分,基于最新4.x的内核。

辅助学习,推荐《深入理解LINUX内核》。

这本书言简意赅地讲述了主要的内核机制。看完这本书,你会对Linux内核有总体的了解。不过这本书的内核版本有点老,不过对于了解原理来讲,没有任何问题。

4 阅读Linux内核代码,聚焦核心逻辑场景

在看内核原理的书的时候经常遇到这种问题,有的地方实在是难以理解,或者不同的书说的不一样,这时候该怎么办呢?其实很好办,Linux是开源的呀,我们可以看代码呀,代码是精准的。哪里有问题,找到那段代码看一看,很多问题就有方法了。

另外,当你在工作中需要重点研究某方面技术的时候,如果涉及内核,这个时候仅仅了解原理已经不够了,你需要看这部分的代码。

但是开源软件代码纷繁复杂,一开始看肯定晕,找不着北。这里有一个诀窍,就是一开始阅读代码不要纠结一城一池的得失,不要每一行都一定要搞清楚它是干嘛的,而要聚焦于核心逻辑和使用场景。

一旦爬上这个坡,对于操作系统的原理,你应该就掌握得比较清楚了。就像蒸馒头的人已经将面粉加工流程烂熟于心。这个时候,你就可以有针对性地去做课题,把所学和你现在做的东西结合起来重点突破。

  • 研究虚拟化的,就重点看KVM
  • 研究网络的,就重点看内核协议栈

推荐《LINUX内核源代码情景分析》

这本书最大的优点是结合场景进行分析,看得见、摸得着,非常直观,唯一的缺点还是内核版本比较老。

5 实验定制化Linux组件

从只看内核代码,到上手修改内核代码,这又是一个很大的坎。

因为Linux有源代码,很多地方可以参考现有的实现,定制化自己的模块。

例如,你可以自己实现一个设备驱动程序,实现一个自己的系统调用,或者实现一个自己的文件系统等等。

6 面向实战开发

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

7 总结

参考

Linux 命令行

趣谈Linux操作系统

X 交流学习

原文地址:https://blog.51cto.com/13601128/2426502

时间: 2024-11-09 02:46:28

Linux内核实战(一)- 学习路线规划的相关文章

linux内核启动过程学习总结

下面是学习linux内核启动过程的记录 平台是:powerpc mpc8548 + linux2.6.23 内核 通用寄存器的作用r0 :在函数开始时使用r1 :存放堆栈指针,相当于ia32架构中的esp寄存器r2 :存放当前进程的描述符的地址r3 :存放第一个参数和返回地址r4-r10 :存放函数的参数r11 :用在指针的调用和当前一些语言的环境指针r12 :用于存放异常处理r13 :保留做为系统线程IDr14-r31 :作为本地变量,具有非易失性 Linux启动过程描述 第一步:使用Boot

Linux内核分析第一次学习报告

Linux内核分析第一次学习报告 学生 黎静 学习内容 1.存储程序计算机工作模型 冯诺依曼体系结构:核心思想为存储程序计算机. CPU抽象为for循环,总是执行下一条指令,内存保存指令和数据,CPU来解释和执行这些指令. API:应用程序编程接口(程序员与计算机的接口界面) ABI:二进制接口,指令编码(程序员与CPU的接口界面) 2.X86汇编 1.寄存器 (1)通用寄存器 (2)段寄存器: (3)标志寄存器 2.计算机的汇编指令 (1)movl指令: 寄存器寻址,寄存器模式,以%开头的寄存

Python学习路线规划

Python学习路线 参考了很多大牛的博客,知乎的很多回答,认真思考之后暂时规划了以下路线 1.Python全栈之路 2.Python项目实战 3.高性能数据库 4.Linux运维 5.Shell高级编程 6.Linux架构 7.大数据开发 8.复习数学基础,计算机理论 9.算法 10.机器学习算法 11 深度学习 12.机器学习+深度学习项目实战 整体的学习框架就是这些,每一个阶段的详细路线和内容陆续都会更新在博客上,这些会在以后补全.后面很多阶段我也还没有接触过,一起学习,一起进步. 关于学

4个步骤带你搞定大数据,Linux到大数据学习路线资料(绝对必看)

Linux学习路线图 运维学习需要分为四个阶段: ①linux初级入门 ②linux中级进阶 ③linux高级提升 ④资深方向细化. 第一阶段:初级入门 Linux基础知识.基本命令(起源.组成.常用命令如cp.ls.file.mkdir等常见操作命令)Linux用户及权限基础Linux系统进程管理进阶Linux高效文本.文件处理命令(vim.grep.sed.awk.find等命令)第二阶段:中级进阶(基础运维) 中级进阶需要在充分了解linux原理和基础知识之后,对上层的应用和服务进行深入学

Linux内核源码学习之 数据结构

本篇记录在学习Linux内核源码过程中对一些知道但不熟悉不会用的数据结构进行记录. union 是在学习进程复制函数do_fork中遇到的: <sched.h> union thread_union { struct thread_info thread_info; unsigned long stack[THREAD_SIZE/sizeof(long)]; }; struct  thread_info和stack被声明为union 共享空间 "联合"是一种特殊的类,也是一

《Linux内核分析》学习总结与学习心得

一.目录列表 第一周:计算机是如何工作的? http://www.cnblogs.com/dvew/p/5224866.html 第二周:操作系统是如何工作的? http://www.cnblogs.com/dvew/p/5245866.html 第三周:构造一个简单的Linux系统MenOS http://www.cnblogs.com/dvew/p/5270915.html 第四.五周:系统调用的三层皮 http://www.cnblogs.com/dvew/p/5285685.html h

linux 下C语言学习路线

转载:http://blog.csdn.net/xdw1985829/article/details/6817403 UNIX/Linux下C语言的学习路线. 一.工具篇 “公欲善其事,必先利其器”.编程是一门实践性很强的工作,在你以后的学习或工作中,你将常常会与以下工具打交道, 下面列出学习C语言编程常常用到的软件和工具. 1.操作系统     在UNIX或Linux系统中学习C很方便,所以在开始您的学习旅程前请先选择一个UNIX或Linux操作系统,目前可供个人免费使用的UNIX或Linux

linux内核基础层的学习(1)

一:内核基础层数据结构 1:双向链表list a):链表的定义 struct list_head{ struct list_head *next,*pre; } b):container对象和list_entry #define container_of(ptr,type,member){ \ const typeof(((type *)0->member) *_mptr = (ptr); (type*)((char*)_mptr-offset(type,member));}) #define

Linux内核“问题门” - 学习问题、经验集锦

陈宪章说:"学贵有疑,小疑则小进,大疑则大进.疑者,觉悟之机也,一番觉悟一番长进." 培根说:"多问的人将多得." 还在学校的时候导师在激情讲演之后对着会议室里形态各异但均静默不语的我们痛心疾首的说:"会提问题很重要啊,同志们!不会提问题怎么有资格做研究!" 这样铿锵有力的训诫今日想起仍觉深受刺激,于是就要不可避免得要做出一些反应来.不过一是因为咱这年代还没有非主流的说法,二是因为也没有冯仰妍同学的性别优势,不可能受到刺激就整出个门来.咱能够做到