前语

在之前文章# 一个Android开发的学习Flag记载贴中有说Android体系是根据Linux内核的根底来进行开发的,并且在看源码时,在native层中许多完结都是体系调用,假如不了解Linux,将无法深化了解Android体系。

本系列是学习Linux常识,也是作为学习Linux的笔记,这儿咱们有兴趣能够学习极客时间刘超老师的Linux课程

正文

由于笔者只在之前接触过很少的Linux,所以学习进程中有不对的当地,欢迎咱们指正。

为什么学习Linux

首先是关于服务器端来说,Unix-Like OS的份额超过了百分之70,Linux更是中流砥柱;并且在Android体系,又以Linux内核为根底,所以能够说在编程世界中,Linux便是主流。

现在流行的技能,比方云核算、虚拟化、容器等简直都是根据Linux技能,那些十分牛的体系,比方团购、打车、电商等体系,也简直都是根据Linux技能,所以学习Linux也是开阔常识边界、进步才干的方法。

所以不论是前后端程序员,都能够适当学习Linux技能。

勇攀顶峰

关于不常常运用Linux体系的开发人员来说,入门Linux仍是十分难的,根据刘超大佬的总结,整个学习Linux的进程中,要爬的坡一共有6个,也是克服困难的6个阶段。

抛弃旧的思维习惯,娴熟运用Linux命令行

上手Linux的第一步便是从Windows的思维习惯,切换为Linux的”命令行+文件“的运用方式。在Linux中,不论咱们做什么事情,都会有相应的命令东西,只需找到某个命令行东西,咱们就能够经过-h去检查对应的装备项,或许经过man命令检查文档,不断实践是第一步。

所以学习Linux爬的第一个坡便是娴熟运用命令行,引荐书本<<鸟哥的Linux私房菜>>。

运用体系调用或许glibc,自己进行程序设计

前面所说的命令行东西其实也是程序,只不过是别人写的程序,所以这儿爬坡的第二步便是自己能够写程序,通进程序来操作Linux。

代码操作Linux,能够运用Linux的体系调用,也能够运用glibc库。Linux的体系调用十分多,并且运用的参数、返回值等都有许多讲究,从剖析Android的native层代码就能够看出,许多函数的运用比较复杂。

假如说运用命令行是吃馒头,那么写代码操作命令行的人便是做馒头的。或许咱们平时运用的一个简略的命令行,下面能够需求N个体系调用组合才干完结,所以关于重要的体系调用都需求深化学习。

当爬过这个坡,就很接近操作体系的原理了,这时就会豁然开朗。比方不了解的进程树,调用了fork就了解了;不了解的同步机制,调用了信号量,就了解了;等等。

这一部分引荐书本<<UNIX环境高级编程>>。

了解Linux内核机制,反复研习

当学会运用代码操作Linux的时候,就像应用层开发人员迫切需求了解体系原理相同,这时就十分期望揭开Linux内核这层面纱,看看体系调用背后做了什么。

不论是哪个方向,了解内核底层原理,有助于更好地进行程序设计和上层开发。这儿和咱们学习Android体系架构相同,不建议直接看代码,由于Linux代码量太大了,只需求先了解内核机制地基本原理和流程即可。

这一部分引荐书本<<深化了解Linux内核>>。

阅览Linux内核代码,聚集中心逻辑和场景

当了解了内核机制后,这时就要针对特定的场景和模块进行重点攻克,这时就需求重点看看某个模块的代码。同样的,开源软件代码纷繁复杂,一开始阅览代码也不要纠结一城一池的得失,不需求每一行都了解它是干嘛的,而是聚集中心的逻辑和运用场景。

到这个境地,假如是Android体系开发人员触及到内核代码,这时就需求剖析特定场景下的问题,以及给出解决方法。这个部分引荐书本<<Linux内核源码代码情景剖析>>。

定制Linux组件

到了这一步,就需求上手修正内核代码了,这也便是内核开发工程师的作业范围了。由于Linux是开源代码,咱们开源根据现有的完结,定制化自己的模块。

这个部分就比较难了,前面还说咱们不用计较一城一池的得失,这一部分就必须对每个细节都要搞清楚,保证定制组件功用完善。

面向实在场景开发,实践没有结尾

万里长征第一步,学习完这么多,真正的高手都是在实战中摸爬滚打训练出来的。

关于Android开发方向来说,假如是应用层开发者,或许只需求了解到Linux内核机制即可,有了这部分常识,对咱们剖析crash、性能优化等都有很大的帮助。关于体系开发来说,就或许定制化修正Linux内核了,这时要求就更高了。

Linux操作体系概述

任何一个体系,假如运用其专业术语都不简单让入门的人了解,所以这儿有一个十分好的比喻,便是把Linux体系比作一家软件外包公司,咱们就来看看Linux中的各个部分,关于现实世界是什么。

  • 一家外包公司来事务了,首先便是要知道客户的需求,这时就会有客户对接员的人物,而这儿的客户对接员就对应着核算机的输入设备,即鼠标、键盘等,即告诉核算机外部想干什么。
  • 当事务做完了,就需求交给人员把作业成果展现给客户,这时就会有交给人员的人物,而这儿的交给人员就对应着输出设备,即显示器等,将核算处理用户恳求的姐u共展现给客户。
  • 关于公司来说,接到项目后,就需求有一个项目履行计划书,项目计划书里规划着项目怎么办。而对应到操作体系中,这一个个项目计划书便是一个个程序,由于程序也是依照预订的计划在一步步履行。关于公司来说,能够把这些项目计划书放在一个当地保存,而电脑上程序许多,可是他们都是以二进制文件方式保存在硬盘上,硬盘是一个物理设备,要依照规则格式化为文件体系,才干存放这些程序。所以文件体系需求一个体体系一办理,便是文件办理子体系
  • 如何让项目顺利进行呢,公司需求各种资源,比方盖章、开证明、申请会议室,这时资源有限并且有些仍是触及秘要的,所以这时公司需求有一个一致的就事大厅,列出供给哪些服务,谁需求能够来申请,然后就会有回应。对应到操作体系中,这个就事大厅便是体系调用,当咱们需求内核的一些才干时,便是经过体系调用。
  • 一旦项目正式建立,就需求建立项目组,将开发人员、测试人员分配到组里,这时公司就需求一个项目办理体系来办理者这些项目组。而在体系中,进程的履行也需求办理,这个办理体系便是进程办理子体系
  • 在项目履行中,不同的项目组一般会被分配到不同的会议室,这样项目组之间能够减少干扰,为了避免会议室冲突,公司有一个会议室办理体系。而对应到操作体系中,会议室便是内存空间,不同的进程需求有不同的内存空间,所以就需求一个体系来办理和分配内存,这个便是内存办理子体系
外包公司需求 外包公司 操作子体系 效果
项目恳求公司资源的一致入口 就事大厅 体系调用子体系 操作体系功用调用的一致入口
对履行中的项目进行生命周期和资源办理 项目办理体系 进程办理子体系 对履行的程序进行生命周期和资源办理
对履行的项目运用的会议室进行办理、分配、回收、阻隔 会议室办理体系 内存办理子体系 对操作体系的内存进行办理、分配、回收和阻隔
对履行项目运用的文档资料进行办理 档案办理体系 文件子体系 对文件进行办理
对项目的输入和输出进行办理 客户对接人员和交给人员 设备子体系 对输入输出设备进行办理
需求和其他公司协作交流 对外协作部 网络子体系 网络协议栈和收发网络包

这儿是一张图表明了Linux操作体系全貌:

Linux | 欢迎来到Linux世界

总结

本篇文章主要介绍了Linux操作体系的各个子体系功用和效果,这儿必需要记住,后续文章咱们会一步一步揭开Linux的神秘面纱。

笔者水平有限,文章有错欢迎指正。最后记载一下Flag。# 一个Android开发的学习Flag记载贴