程序锅

  • 首页
  • 分类
  • 标签
  • 归档
  • 关于

  • 搜索
基础知识 Etcd LeetCode 计算机体系结构 Kubernetes Containerd Docker 容器 云原生 Serverless 项目开发维护 ELF 深入理解程序 Tmux Vim Linux Kernel Linux numpy matplotlib 机器学习 MQTT 网络基础 Thrift RPC OS 操作系统 Clang 研途 数据结构和算法 Java 编程语言 Golang Python 个人网站搭建 Nginx 计算机通用技术 Git

Linux 的学习方法,全体系学习:从 Linux 使用到深入 kernel

发表于 2020-12-24 | 分类于 Linux Kernel | 0 | 阅读次数 2384

Windows 的使用方式是图形化界面,鼠标点来点去的就好。而 Linux 的使用方式是命令行,记得刚学 Linux 操作系统的时候(就单纯命令行的时候)真的不适应,上手难,老想着找找图形界面点一下。当你学会 Linux 操作系统的基本操作之后,你会爱上这种模式,比如我现在在 windows 都会装个 cmder 来使用命令行;当你熟练 Linux 操作系统的命令行操作之后,你会发现效率比图形化的方式不知道高多少。

总的来说 Linux 上手难,学习曲线陡峭,所以它的学习过程更像是一个爬坡过程。当你爬上一个坡之后,你会发现 Linux 的设计之美和灵活性,当又爬上一个坡之后你又发现 Linux 的另一种美或者设计的巧妙。在整个 Linux 的学习过程中,要爬的坡有以下这么几个:熟练使用 Linux 命令行、在 Linux 环境下进行编程、了解 Linux 内核机制、阅读 Linux 内核代码、修改 Linux 内核源码以及最后落到生产实践上。如下图所示:

1. 熟练使用 Linux 命令行

也就是要抛弃在使用 windows 时对图形化界面的依赖,习惯于 Linux 中在黑乎乎的界面中使用“命令行”的方式。在 Linux 中,无论做什么事情,都会有相应的命令工具,命令工具其实就是一个可执行文件。这些可执行文件一般都在 bin 或者 sbin 目录中。使用命令往往需要在命令工具名后面跟上各种参数,这些参数怎么填可以使用 -h 或者 help 命令查看使用方式;也可以使用 man 命令查看使用方式。当然最好记住几个常用的命令工具的使用方式。

当命令行使用多了之后,你会发现大部分命令的使用模式都很像,有些时候不需要搜索就能完成大部分操作。到这一步,你会发现一些很有技巧的命令 sed 和 awk、正则表达式、管道和 grep、bash;可以通过命令自动化处理一些事情。

推荐书籍

  • 学习 Linux 命令行的话,推荐阅读 《鸟哥的 Linux 私房菜》;
  • 深入一点的话《Linux 系统管理技术手册》

2. 在 Linux 环境下进行编程

接下去就是在 Linux 环境下的编程了,通过代码的方式来使用 Linux。此时需要使用 glibc 的库,或者直接使用 Linux 系统调用(不推荐)。Linux 的系统调用非常多;glibc 的库函数也非常复杂,传入的参数、返回值、调用的方式等都很有讲究。这个时候可能需要懂一些 Linux 系统机制,否则比较难理解为什么这样调用。

当学完这个阶段之后,你将会理解进程树(fork)、同步机制(信号量)、网络应用层和传输层的分界线(socket)。

推荐书籍

  • 《UNIX 环境高级编程》:有代码、有介绍、有原理

3. 了解 Linux 内核机制

在接下去就是了解 Linux 内核的原理,有助于你更好地使用命令行和进行程序设计。但是此时不建议看内核源码,因为 Linux 代码量太大,很容易迷失,找不到头绪。最好的办法是,先了解一下 Linux 内核机制,知道基本的原理和流程。

当了解了 Linux 内核机制的原理之后,Linux 这个复杂的系统也开始变得透明起来。在出现问题时,也比较容易准确定位到问题所在。

推荐书籍

  • 《深入理解 Linux 内核》:这本书言简意赅地讲述了主要的内核机制。看完这本书,会对 Linux 内核有总体的了解。

4. 阅读 Linux 内核源码

了解内核机制的时候,虽然能让你更容易看清全貌,但容易让你忽略细节。当看内核原理的书的时候遇到难以理解的地方,那么最有效的方式就是看代码。当你重点研究某方面技术的时候,如果涉及到内核,那就需要看这部分的代码,因为原理已经不够了。比如你是研究虚拟化的,那就重点看 KVM 的部分;如果是研究网络的,那就重点看内核协议栈的部分。

**开始阅读源码的时候不要每一行都搞清楚它是干什么的,而是聚焦于核心逻辑和使用场景。**当你 Linux 内核源码都看的差不多了,那么对于操作系统的原理,你应该掌握得比较清楚了。同时还可以将所看的东西和自己所做的东西结合起来。

推荐书籍

  • 《Linux 内核源代码情景分析》,这本书最大的优点是结合场景进行分析、看得见、摸得着、非常直观。

5. 修改 Linux 内核源码

只看内核代码还是差了点意思的,假如此时让你去修改内核代码实现定制化的内容时,那么相信你相比看代码的时候会有不一样的感受。在实现定制化的内容时,比如自己实现一个系统调用、自己实现一个设备驱动、自己实现一个文件系统,那么其实可以参考现有的实现。但是一旦实现了,那你就是大牛了。

6. 落到生产实践上

最后在生产环境中实战了,真正的高手都是在实战中摸爬滚打练出来的。比如你是开发,需要对内核代码进行少量的修改,但是此时的修改需要考虑各种因素:并发与并行、锁与保护、扩展性和兼容性。这些都是真实项目才能练出来的。

卷死我
dawnguo 微信支付

微信支付

dawnguo 支付宝

支付宝

  • 本文作者: dawnguo
  • 本文链接: /archives/115
  • 版权声明: 本博客所有文章除特别声明外,均采用CC BY-NC-SA 3.0 许可协议。转载请注明出处!
# Linux # Linux Kernel
Serverless | 重新认识下 Serverless
Linux Cheat Sheet - Bash 变量的全面整理
  • 文章目录
  • 站点概览
dawnguo

dawnguo

215 日志
24 分类
37 标签
RSS
Creative Commons
© 2018 — 2025 程序锅
0%