<audio id="audio" title="开篇词 | 为什么要学习Linux操作系统？" controls="" preload="none"><source id="mp3" src="https://static001.geekbang.org/resource/audio/bd/16/bd7af6a01d606dadc8ed1f2f78dea916.mp3"></audio>

你好，我是你的老朋友刘超。在“[趣谈网络协议](https://time.geekbang.org/column/intro/85?utm_term=zeusMX7NJ&amp;utm_source=app&amp;utm_medium=geektime&amp;utm_campaign=85-end&amp;utm_content=caozuoxitongkaipianci)”结课半年之后，我又给你带来了一个新的基础课程，“趣谈Linux操作系统”。

在“趣谈网络协议”的开篇词中，我表达了作为一个合格的IT工程师，在职业生涯中学习基础知识的重要性。如果说当时，我对这件事只是一种感性认识，在专栏推出之后，我的想法有了一些变化。

我通过留言区和同学们进行了很多互动，也和其他做基础知识专栏的作者有了不少交流，我发现，**无论是从个人的职业发展角度，还是从公司招聘候选人的角度来看，扎实的基础知识是很多人的诉求**。这让我更加坚信，我应该在“趣谈”基础知识这条道路上走下去。

目前极客时间的专栏，覆盖了网络、算法、数学、数据库、编程语言等各个方面，而操作系统也是基础中非常重要的一环。尤其我作为一名云架构师，Linux操作系统的基础知识更是必不可少的。在实践中收获了很多心得之后，我希望在极客时间继续跟你分享。

你可能会说，**我们大学里上过操作系统的课，而且每天都在用操作系统，为什么还要专门学一遍呢**？尽管我的操作系统课成绩不错，但是在大学的时候，我和你的看法一样，我觉得这门课没有什么用，现在回想起来可能有这样几个原因。

第一，大学里普遍使用的操作系统是Windows，老师大多也用Windows。Windows的优势是界面友好，很容易上手，于是我们就养成了要配置东西了就去菜单找，用鼠标点点的习惯，似乎会攒电脑、装系统、配软件就能搞定一切问题。

第二，一种操作系统对应的是一系列的软件生态，而大学里很多课程都是围绕Windows软件生态展开的。例如学C++用的是Vistual Studio，学数据库用的是SQL Server，做网站用的是IIS等等。

第三，大学里的操作系统课往往都是纯讲理论，讲了很多原理，但是压根儿没法和平时用的Windows系统的行为关联起来，也根本弄不清操作系统在底层到底是怎么做的。

直到毕业之后，我加入EMC，第一个项目就是基于Linux开发分布式文件系统。你能想象，只能对着一个黑框敲命令时，我心中的崩溃吗？我那时真的觉得，我大学的操作系统算是白学了。于是，我痛定思痛，开启了学习Linux的征程。

一旦开始学，我发现，Linux对于编程世界来说，简直就像一扇门。尽管门里的知识浩如烟海，每一本书都厚如砖头，但我发现这条路上任何一片景色都精彩无比。

## 打开Linux操作系统这扇门，你才是合格的软件工程师

根据2018年W3Techs的数据统计，对于服务器端，Unix-Like OS占的比例近70%，其中Linux可以称得上是中流砥柱。随着移动互联网的发展，客户端基本上以Android和iOS为主。Android是基于Linux内核的，因而客户端也进入了Linux阵营。可以说，**在编程世界中，Linux就是主流，不会Linux你就会格格不入。**

那些火得不行的技术，什么云计算、虚拟化、容器、大数据、人工智能，几乎都是基于Linux技术的。那些牛得不行的系统，团购、电商、打车、快递，都是部署在服务端，也几乎都是基于Linux技术的。

所以说，如果你想进大公司，想学新技术，Linux一定是一道绕不过去的坎。只有进入Linux操作系统这扇门，你才能成为合格的软件工程师。

## 研究Linux内核代码，你能学到数据结构与设计模式的落地实践

Linux最大的优点就是开源。作为程序员，有了代码，啥都好办了。只要有足够的耐心，我们就可以一层一层看下去，看内核调度函数，看内存分配过程。理论理解起来不容易，但是一行行的“if-else”却不会产生歧义。

在Linux内核里，你会看到数据结构和算法的经典使用案例；你甚至还会看到并发情况下的保护这种复杂场景；在实践中遇到问题的时候，你可以直接参考内核中的实现。

例如，平时看起来最简单的文件操作，通过阅读Linux代码，你能学到从应用层、系统调用层、进程文件操作抽象层、虚拟文件系统层、具体文件系统层、缓存层、设备I/O层的完美分层机制，尤其是虚拟文件系统对于接入多种类型文件系统的抽象设计，在很多复杂的系统里面，这个思想都能用得上。

再如，当你写代码的时候，大部分情况下都可以使用现成的数据结构和算法库，但是有些场景对于内存的使用需要限制到很小，对于搜索的时间需要限制到很小的时候，我们需要定制化一些数据结构，这个时候内核里面这些实现就很有参考意义了。

## 了解Linux操作系统生态，能让你事半功倍地学会新技术

Linux是一个生态，里面丰富多彩。很多大牛都是基于Linux来开发各种各样的软件。可以这么说，只要你能想象到的技术领域，几乎都能在里面找到Linux的身影。

数据库MySQL、PostgreSQL，消息队列RabbitMQ、Kafka，大数据Hadoop、Spark，虚拟化KVM、Openvswitch，容器Kubernetes、Docker，这些软件都会默认提供Linux下的安装、使用、运维手册，都会默认先适配Linux。

因此，在Linux环境下，很容易能够找到现成的工具，这不仅会让你的工作事半功倍，还能让你有亲密接触大牛思想的机会，这对于你个人的技术进步和职业发展都非常有益。

如果不进入Linux世界，你恐怕很难享受到开源软件如此多的红利。

考虑到以上这些，在设计“趣谈Linux操作系统”专栏的时候，我主要秉承两大原则，希望能够帮你打开Linux操作系统这扇门。

第一个原则仍然是“**趣谈**”。我希望通过故事化的方式，将枯燥的基础知识结合某个场景，给你生动、具象地讲述出来，帮你加深理解、巩固记忆、夯实基础。

操作系统是干什么的呢？我们都知道，一台物理机上有很多硬件，最重要的就是CPU、内存、硬盘、网络。同时，一台物理机上也要跑很多程序，这些资源应该给谁用呢？当然是大家轮着用，谁也别独占，谁也别饿着。为了完成资源分配这件事，操作系统承担了一个“大管家”的作用。它将硬件资源分配给不同的用户程序使用，并且在适当的时间将这些资源拿回来，再分配给其他的用户进程。

鉴于操作系统这个“大管家”的角色，我设计了一个故事，将各个知识点串起来，来帮助你理解和记忆。

假设，我们现在就是在做一家外包公司，我们的目标是把这家公司做上市。其中，操作系统就是这家外包公司的老板。我们把这家公司的发展阶段分为这样几个时期：

<li>
**初创期**：这个老板基于开放的营商环境（x86体系结构），创办一家外包公司（系统的启动）。因为一开始没有其他员工，老板需要亲自接项目（实模式）。
</li>
<li>
**发展期**：公司慢慢做大，项目越接越多（保护模式、多进程），为了管理各个外包项目，建立了项目管理体系（进程管理）、会议室管理体系（内存管理）、文档资料管理系统（文件系统）、售前售后体系（输入输出设备管理）。
</li>
<li>
**壮大期**：公司越来越牛，开始促进内部项目的合作（进程间通信）和外部公司合作（网络通信）。
</li>
<li>
**集团化**：公司的业务越来越多，会成立多家子公司（虚拟化），或者鼓励内部创业（容器化），这个时候公司就变成了集团。大管家的调度能力不再局限于一家公司，而是集团公司（Linux集群），从而成功上市（从单机操作系统到数据中心操作系统）。
</li>

<img src="https://static001.geekbang.org/resource/image/80/5d/80a4502300dfa51c8520001c013cee5d.jpeg" alt="">

第二个原则就是**图解**。Linux操作系统中的概念非常多，数据结构也很多，流程也复杂，一般人在学习的过程中很容易迷路。所谓“一图胜千言”，我希望能够通过图的方式，将这些复杂的概念、数据结构、流程表现出来，争取用一张图串起一篇文章的知识点。最终，整个专栏下来，你如果能把这些图都掌握了，你的知识就会形成体系和连接。在此基础上再进行深入学习，就会如鱼得水、易如反掌。

<img src="https://static001.geekbang.org/resource/image/bf/02/bf0bcbea6a24bc5084bc0d4ffca7c502.jpeg" alt="">

例如，这张图就表示了文件操作在各个层的数据结构的关联。只要你学完之后，能对着这张图将它们之间的关系讲清楚，对于文件系统的部分，你就会了然于心了。

一段新的征途即将开始，今天就是“开学典礼”。从今天开始，在接下来的四个月时间里，我会带你一步一步进入Linux操作系统的大门，让基础变成你技术生涯的左膀右臂。

在开始正式学习之前，我也想听你讲讲，之前你在学习和工作过程中，遇到过哪些操作系统相关的问题，有哪些困惑，又有哪些经验，也可以谈谈你对新学期的期许。

欢迎在留言区和我分享。

[<img src="https://static001.geekbang.org/resource/image/19/bc/19bc90ffcf4b1fba4938727e5bc0ecbc.jpg" alt="unpreview">](time://mall?url=https%3A%2F%2Fshop18793264.youzan.com%2Fv2%2Fgoods%2F1y7qqgp3ghd2g%3Fdc_ps%3D2347114008676525065.200001)

Linux知识地图2.0典藏版，现货发售2000份，把5米长的图谱装进背包，1分钟定位80%的高频问题。
