“AI 技术+人才”如何成为企业增长新引擎?戳此了解>>> 了解详情
写点什么

为什么要学习 Linux 操作系统?

  • 2019-03-27
  • 本文字数:3288 字

    阅读完需:约 11 分钟

为什么要学习Linux操作系统?

你好,我是你的老朋友刘超。在“趣谈网络协议”结课半年之后,我又给你带来了一个新的基础课程,“趣谈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、内存、硬盘、网络。同时,一台物理机上也要跑很多程序,这些资源应该给谁用呢?当然是大家轮着用,谁也别独占,谁也别饿着。为了完成资源分配这件事,操作系统承担了一个“大管家”的作用。它将硬件资源分配给不同的用户程序使用,并且在适当的时间将这些资源拿回来,再分配给其他的用户进程。


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


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


  • 初创期:这个老板基于开放的营商环境(x86 体系结构),创办一家外包公司(系统的启动)。因为一开始没有其他员工,老板需要亲自接项目(实模式)。

  • 发展期:公司慢慢做大,项目越接越多(保护模式、多进程),为了管理各个外包项目,建立了项目管理体系(进程管理)、会议室管理体系(内存管理)、文档资料管理系统(文件系统)、售前售后体系(输入输出设备管理)。

  • 壮大期:公司越来越牛,开始促进内部项目的合作(进程间通信)和外部公司合作(网络通信)。

  • 集团化:公司的业务越来越多,会成立多家子公司(虚拟化),或者鼓励内部创业(容器化),这个时候公司就变成了集团。大管家的调度能力不再局限于一家公司,而是集团公司(Linux 集群),从而成功上市(从单机操作系统到数据中心操作系统)。



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



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

我是谁:

我是刘超,网易杭州研究院云计算技术部首席架构师,QCon2019 广州专题出品人。我有 15 年云计算领域研发及架构经验,出版过《Lucene 应用开发解密》。


极客时间的老用户都知道,我也是极客时间“趣谈网络协议”专栏的作者,这个专栏目前有超过 3 万人订阅,我收到很多用户的反馈,说非常认可我这种“像小说一样”的“趣谈”形式,讲得通俗易懂,可以更好的理解底层知识。


大家的学习热情也十分高涨,光互动留言就超过了 5 万字。在和很多同学交流后,我发现很多人希望我继续延续“趣谈”的形式,讲一讲 Linux 操作系统。这也是《趣谈 Linux 操作系统》专栏诞生的初衷。


点击这里试看或订阅《 趣谈 Linux 操作系统 》


2019-03-27 14:54157323
用户头像

发布了 23 篇内容, 共 37.9 次阅读, 收获喜欢 160 次。

关注

评论 4 条评论

发布
用户头像
趣谈看似更容易读,但是有两个弊端:1. 多了一次知识形式转化,就会有消息丢失或偏差的风险 2. 学习后只记得故事,不记得原来的术语是什么,不方便复习
2020-03-09 22:30
回复
知识学习就是把抽象的东西转化为自己可以吸收的具体的东西,知识间联系越多越容易理解,理解之后更容易记忆。
已经理解的东西自然不需要多一次形式转化,但是没有理解的人能通过这种方式,快速理解,达到快速学习的目的
2020-12-03 17:52
回复
用户头像
趣谈这样的形式很不错。
2020-01-06 20:14
回复
没有更多了
发现更多内容

医者,智也:智慧医院破茧时,翻开转型新一页

脑极体

简单脚本监控SSL证书,并到期提醒续签

运维研习社

Kafka 中所谓的 ‘零拷贝’ 技术到底是什么?

码农架构

Java kafka 程序员 架构 微服务

【LeetCode】猜字谜Java题解

Albert

算法 LeetCode 28天写作 2月春节不断更

Elasticsearch 相关度评分

escray

elastic 七日更 28天写作 死磕Elasticsearch 60天通过Elastic认证考试 2月春节不断更

开源镜像仓库Harbor的镜像安全

运维研习社

Docker 安全 Harbor CI/CD

优雅地停止Spring Boot应用

韩斌

无人机蜂群

冠冠

攀爬天梯的手机厂商,能从LG的滑落中学到什么?

脑极体

分布式应用监控与链路追踪:SkyWalking

xcbeyond

微服务 监控 Skywalking 调用链 28天写作

这道 Hard 到底难在哪里?大概是难在考察的全是违反“人性直觉”的内容吧 ...

宫水三叶的刷题日记

面试 LeetCode 数据结构与算法

元宵佳节快乐哦

Nydia

我看JAVA 之 AbstractStringBuilder & StringBuffer & StringBuilder

awen

Java 源码 jdk string

区块链能否一劳永逸地结束痛苦的选票争端?

CECBC

区块链

产品经理第五周:如何绘制流程图?

克比

微信公众平台-渠道二维码开发

Geek_247dae

Nginx中常见header配置及修改

运维研习社

nginx Linux

区块链与数字货币的发展到底有什么意义

CECBC

金融

28天瞎写的第二百四十五天:怎么样开始练习冥想?

树上

冥想 28天写作 正念

分页问题-Offset-based Pagination和Cursor-based Pagination

诸葛小猿

分页 Offset-based Pagination Cursor-based Pagination

云主机配置微信公众号后台全记录

小jack

翻译:《实用的 Python 编程》02_07_Objects

codists

Python

341 万考生,除了图书馆他们去了这样一个地方

IoT云工坊

小程序 人工智能 物联网 云平台 24小时无人自习室

【得物技术】Web Components 初探

得物技术

Web API 得物技术 Web Component 组件

区块链打造“红娘链”,婚姻上链让爱更“牢固”

CECBC

婚姻

未来赚钱的行业大预测

ES_her0

28天写作

Java中的String类型到底占用多大的内存空间?

冰河

Java 性能优化 string 高并发 内存空间

Docker安装

Sakura

Docker

第五周作业:用例流程图

克比

收音机焊接

aaaaa

产品迭代最有力的工具:每周产品讨论会

boshi

产品策略 七日更

为什么要学习Linux操作系统?_开源_刘超_InfoQ精选文章