古人云,知其然知其所以然。马哲思想指导着我们,任何事物、问题,离不开:为什么(Why,事物从哪里来?)、是什么(What,事物的定位?)、怎么做(How,到哪里去?)的哲学3问。
继上个月算是相对彻底地弄懂了2个对于大部分从业者在今天看来的可能相当'常识'的底层概念问题:云计算————[云计算]概念辨析:云计算 [IaaS/PaaS/SaaS & 公有云/私有云/混合云]、底层计算机硬件——CPU架构与计算机芯片的问题:[Linux]CPU架构/指令集:RISC / CISC | arm | amd | X86/i386 | aarch64的时候,便对日日接触的服务器底层的CENTOS操作系统的内核Linux的发展、由来产生了莫大兴趣。(虽说在学校的时候,已经专门开过4门的操作系统、Linux的理论与实操课程,奈何人的记忆力总是有限,只能再从头开始自个儿来理一理了)
因此可见,这篇文章是憋了许久的,回答自个儿想要搞明白的一个问题的记叙性笔记。除了反复阅读鸟哥的书籍外,也广泛阅读了各网站的相对权威、可信的叙述。
好了,咱开门见山:
1964 Multics (分时操作系统 / 交互式操作系统) 开发者: 贝尔实验室(Bell Lab) / 麻省理工学院(MIT) / 美国通用电气公司(GE) 备注:因资金超支及贝尔实验室的退出而废弃
1969 Unics/Unix (分时操作系统 / 交互式操作系统) 开发者: 贝尔实验室-Ken Thompson 编程语言: B语言(汇编语言) 备注: ①Ken Thompson 利用汇编语言(B语言)开发了 File Server System(Unics,即 UNIX 的原型)。
1973 Unics/Unix 开发者: 贝尔实验室-Ken Thompson(C语言之父) + Ritchie 编程语言: C语言 备注: ①1971年,Thompson联合Ritchie,利用汇编语言共同发明了C语言。 由于B语言进行系统编程时不够强大,故二人对其改造 ②1973年,Thompson和Ritchie用C语言重写了UNIX ③自此到20世纪90年代,UNIX已成为大学中的主流操作系统。与此同时,UNIX 转向商业化,价格昂贵。 ④1979 年,UNIX 发布 System V,用于个人计算机
1977 BSD(Berkeley Software Distribution)(类Unix的OS) 开发者: Bill Joy(UC Berkeley大学,SUN公司的创始人) 编程语言: C语言 备注: ①1977 年, 大学的 ( Sun 公司的创始人)针对他的机器修改了 UNIX V7版本的源码,称为BSD(Berkeley Software Distribution)操作系统。 ②后来很多商业厂家意识到Unix的价值也纷纷以Bell Lab的System V OS或BSD OS为基础来开发自己的Unix,较著名的有Sun OS,AIX,VMS。
1984 GNU(GNU’s Not Unix)项目 → 自由软件运动 FSF(Free Software Foundation)基金会 创始者: Richard Stallman 备注: ①1984 年,Richard Stallman 开始 GNU[GNU’s Not Unix]项目,创办 FSF[Free Software Foundation]基金会 ②该组织倡导“自由软件”,开发了非常重要的几个软件: GCC(GNU C Compiler/GNU Compiler Collection)、GLIBC(GNU C Library)、G++(GCC的c++编译器)、 Bash Shell、Emacs等产品; GNU 的软件缺乏一个开放的平台运行,只能在 UNIX 上运行; 自由软件指用户可以对软件做任何修改,甚至再发行,但要遵守GPL 的版权规定; 自由软件是可以卖的,但是不能只卖软件,而是卖服务、手册等。 ③GCC全称是 GNU C Compiler, 最早的时候就是一个c编译器。但是后来因为这个项目里边集成了更多其他不同语言的编译器,GCC就代表 the GNU Compiler Collection。故现在 GCC 表示一堆编译器的合集。) ④1985 年,为了避免 GNU 开发的自由软件被其他人用作专利软件,因此创建 GPL(General Public License)版权声明。
1987 Minix(类Unix的OS) 开发者: Andrew S. Tanenbaum 编程语言: C语言 备注: ①1984 年,因UNIX 规定“不能对学生提供源码”,作为老师的 Andrew Tanenbaum 编写兼容于 UNIX 的 Minix,用于教学。 ①Minix是一个兼容Unix的类UNIX操作系统。 ②Minix价格低廉,它的诞生就是为了解决在高校、科研院所里Unix昂贵的授权费,不利于OS教学使用。 ③Minix的初衷:操作系统的教学,故强调代码的可读性与简洁性;UNIX用于商业,注重代码的高效率。
1989 POSIX标准/可移植操作系统接口 → OS系统调用接口标准 (Portable Operating System Interface for Computing Systems) 创始者: IEEE(Institute of Electrical and Electronics Engineers 电气和电子工程师协会) ISO/IEC 备注: ①IEEE最初开发 POSIX 标准,是为了提高 UNIX OS环境及类Unix OS环境下应用程序的可移植性 (即 POSIX 标准并不限于Unix) ②支持其标准的OS包括但不限于: Linux(start from V0.0.1 to now) / DEC OpenVMS / Microsoft Windows NT / ③POSIX.1 已被国际标准化组织(International Standards Organization / ISO)所接受,被命名为 : ISO/IEC 9945-1:1990 标准 ④该标准是基于现有的UNIX 实践和经验,描述了操作系统的调用服务接口。 用于保证编制的应用程序可以在源代码一级上在多种操作系统上移植和运行 ⑤【POSIX与Linux结缘】90 年代初,POSIX 标准的制定正处在最后投票敲定的时候,那是1991-1993 年间。 此时正是Linux刚刚起步的时候,这个UNIX 标准为Linux 提供了极为重要的信息。 使得Linux 能够在标准的指导下进行开发,并能够与绝大多数UNIX 操作系统兼容。 在最初的Linux 内核源代码中(0.01 版、0.11 版)就已为Linux 系统与POSIX 标准的兼容做好了准备工作。 在Linux 0.01 版内核的/include/unistd.h 文件中就已定义了几个有关POSXI 标准要求的符号常数, 且Linus 在注释中已写道:“OK,这也许是个玩笑,但我正在着手研究它呢”。 ⑥第一个POSIX正式标准是在1988 年9 月份批准的(IEEE 1003.1-1988),也既以后经常提到的POSIX.1 标准。 1989 年POSIX 的工作被转移至ISO/IEC 社团,并由15 工作组继续将其制定成ISO 标准。 到1990 年,POSIX.1 与已通过的C 语言标准联合,正式批准为: IEEE 1003.1-1990(即 ANSI 标准)和ISO/IEC 9945-1:1990 标准。
1991.10 Linux | GNU/Linux[OS内核](类Unix、类Minix的OS) 开发者: Linus Torvalds 编程语言: C语言 备注: ①1991年初,芬兰赫尔辛基大学的研究生 Linus Torvalds 基于 gcc、bash 开发了针对 386 机器的 Linux 内核。Linus Torvalds接触到UNIX操作系统,通过学习 MINIX成功地将自己开发的bash移植到了minix 上,并于1991年10月正式向外宣布Linux内核(Linux 0.0.1)的诞生。 1994 年,Torvalds 发布 Linux-v1.0。 1996 年,Torvalds 发布 Linux-v2.0,确定了 Linux 的吉祥物:企鹅(Tux)。 因为Torvalds在小时候被企鹅咬过,故印象非常深刻。 ②Linux是一个采用GNU GPL授权模式的、参考POSIX标准的、兼容Unix的类Minix、类UNIX操作系统。 ③同年,GNU计划已开发出了许多工具软件,最受期盼的【GNU C编译器】已出现。 但GNU的操作系统核心HURD一直处于实验阶段,没有任何可用性。 实质上也没能开发出完整的GNU操作系统,但是【GNU】奠定了Linux用户基础和开发环境。 ④Linux 本身只是操作系统的内核,而不是一个操作系统。内核是使其它程序能够运行的基础。 它实现了多任务和硬件管理,用户或者系统管理员交互运行的所有程序实际上都运行在内核之上。 因此,我们平常说的“操作系统用的是Windows、Mac还是Linux啊?”是错误的; Ubuntu、Fedora等才是操作系统的名字,他们都使用Linux内核; 内核负责控制硬件资源分配,而如果只有内核,则只能让计算机硬件运行,而不能有任何功能。 因此,需要【系统调用】提供给开发者使用,从而开发应用程序; 内核能够控制硬件,比如:让CPU可以运算、让硬盘可以读写数据等; 只有内核的话,只能让计算机运行,但是我们不能控制计算机; 而系统调用是操作系统提供给开发者的调用接口; 任何硬件都不会默认就被操作系统控制,而需要开发商根据操作系统提供的接口开发驱动程序,只有安装了驱动程序才能够控制硬件设备。 ⑤Linux 其中有些程序是必需的,比如说,命令行解释器(shell),它用于用户交互和编写 shell 脚本。 Linux 没有自己去开发这些应用程序,而是使用已有的自由软件。 许多重要的软件,包括 C 编译器,都来自于自由软件基金 GNU 项目。因此,把 Linux 也称为 GNU/Linux。 ⑥Linux核心理念:万物皆文件; ⑦Unix和Linux的代码是由90%的C语言和10%的汇编组成,因此只需要稍加修改,就能移植到其他硬件上;
Linux 内核版 ①Linux内核(版)编号: 主版本.次版本.发布版本-修改版本 3.10.0-123.el7.x84_64 【注】虽然编号就是如上方式来编的,但依据Linux内核的发展离场,内核版本的定义有点不太相同。 [1] 奇数、偶数版本分类 在2.6.x版本以前,Torvalds将内核的发展方向分为2类,并根据这2类内核的发展分别给予不同的编号: A. 主、次版本为奇数:开发中版本(development) 如2.5.xx,这种内核版本主要用于测试与发展新功能,所以通常这种版本仅有内核开发工程师会使用。如果有新增的内核程序代码,会加入到这种版本当中,等到众多工程师测试没有问题后,才加入下一版的稳定内核中。 B.主、次版本为偶数:稳定版本(stable) 如2.6.xx,等到内核功能发展成熟后会加入到这类的版本中,主要用在一般家庭计算机以及企业版本中,重点在于提供用户一个相对稳定的Linux操作环境平台。 [2] 主线版本、长期维护版本(longterm version) 不过,这种奇数、偶数的编号格式在3.0版推出之后就不再使用了。从3.0版开始,内核主要依靠主线版本(MainLine)来开发,开发完毕后会往下一个主线版本进行。例如 3.10 就是在3.9的架构下继续开发出来的新的主线版本,通常新一版的主线版本在2~3个月会被提出。 之所以会有新的主线版本,是因为加入新功能之故。现在(2021/07/26)最新的主线版本已经是5.13版了。 https://www.kernel.org/ 而旧的版本在新的主线版本出现之后,会有两种机制来处理。一种机制为结束开发(End of Live, EoL),亦即该程序代码已结束,不会有继续维护的状态。另一种机制为保持该版本的持续维护,亦即为长期维护版本(Longterm)。例如 3.10 即为一个长期维护版本,这个版本的程序代码会被持续更长的时间,若程序代码有bug或其他问题,内核维护者会持续进行程序代码的更新维护。两种机制结合,即: 所有的长期维护版本均会有终结(停止维护)的那一天;已停止维护的版本将不再被视为长期维护版。 所以,若你想要使用Linux内核来开发你的系统,那么当然要选择长期支持的版本才行。要判断你的Linux内核是否为长期支持的版本,可以使用`uname -r`来查看内核版本,然后对照下列链接来了解其对应值。 https://www.kernel.org/releases.html
Linux 内核版 与 Linux 发行版 Linux内核版本与发行版(distribution)的版本并不相同,很多朋友常常上网问到:“我的Linux是7.x版,请问...”之类的留言。这是不对的提问方式,因为所谓的Linux版本指的应该是内核版本,而目前最新的内核版本应该是5.13.5(2021/07/26)才对,并不会有7.x的版本出现。 你常用的Linux系统应该说明为发行版。因此,如果以CENTOS这个发行版来说,你应该说:“我用的Linux是CENOTS这个发行版,版本为7.x,请问...”才对。 CENTOS 7.4.1708 à 3.10.0-693.el7.x86_64 Linux发行版(可完全安装的Linux发行版) [1] 小结:Linux 与 Unix(类Unix)、GNU、POSIX 由此,我们可知: Linux其实就是一个操作系统最底层的内核,及其提供的内核工具。 它是GNU GPL授权模式。所以,任何人均可获得源代码与可执行的这个内核程序,并且可以修改。 此外,因为Linux参考POSIX设计规范,于是兼容Unix操作系统,故可称之为“Unix-Like”(类Unix)的一种。 [2] 可完全安装的Linux发行版 Linux的出现让GNU计划放下了心里的一块大石头,因为GNU一直以来就是缺乏内核程序,导致它们的GNU自由软件只能在其他的UNIX上面运行,既然目前有Linux出现,且Linux也用了很多的GNU相关软件,所以斯托曼认为Linux的全名应该称之为GNU/Linux。不管怎么说,Linux实在很不错,让GNU软件大多以Linux 为主要操作系统来进行开发。此外,很多其他的自由软件团队,例如 postfix.vsftpd、apache等也都有以Linux为开发测试平台的计划出现。如此一来,Linux 除了主要的内核程序外,可以在Linux 上面运行的软件也越来越多,如果有心,就能够将一个完整的 Linux操作系统搞定。 虽然由托瓦兹负责开发的Linux仅具有内核与内核所提供的工具。不过,如上所述,很多的软件已经 可以在Linux上面运行,因此,“Linux+各种软件”就是一个相当完整的操作系统。不过,要完成这样的 操作系统还真难,因为Linux早期都是由黑客工程师所开发维护,他们并没有考虑到一般用户的能力。 为了让用户能够接触到Linux,于是很多的商业公司或非营利团体,就将Linux内核(及其工具)与可运行的软件整合起来,加上自己具有创意的工具程序,这个工具程序可以让用户以CD/DVD或通过网络直接安装/管理 Linux 系统。这个“内核+软件+工具+可完全安装程序”的东西,我们称之为 Linux distribution,一般中文翻译成Linux发行版,或Linux发布商套件等。 由于GNU的GPL授权并非不能从事商业行为,于是很多商业公司便专门来销售Linux发行版。而由于Linux的GPL版权声明,因此,商业公司所销售的Linux发行版通常也都可以从互联网上面来下载。此外,如果你想要其他商业公司的服务,那么直接向该公司购买光盘来安装,也是一个很不错的方式。
[3] 各大Linux发行版的主要异同;支持标准 不过,由于发展Linux 发行版的社区与公司实在太多,例如有名的 Red Hat、SUSE、Ubuntu、 Fedora、 Debian 等,所以很多人都很担心,如此一来每个发行版是否都不相同呢?这就不需要担心了,因为每个Linux发行版使用的内核都由https://www.kernel.org网站所发布,而它们所选择的软件,几乎都是目前很知名的软件,重复性相当的高,例如网页服务器的 Apache,电子邮件服务器的 Postfix/sendmail,文件服务器的Samba等。 此外,为了让所有的Linux发行版开发不致于差异太大,且让这些开发商在开发的时候有所依据, 还有 Linux Standard Base(LSB)等标准来规范开发者,以及目录结构的File system Hierarchy Standard(FHS)标准规范。唯一的差别,可能就是该厂商所开发出来的管理工具,以及套件管理的模式。 所以说,基本上,每个Linux发行版除了架构的严谨度与选择的套件内容外,其实差异并不大,大家可以选择自己喜好的发行版来安装即可。 FHS:http://www.pathname.com/fhs/ LSB:https://wiki.linuxfoundation.org/lsb/start # 包管理模式 # 事实上鸟哥认为发行版主要分为两大家族: 一种是使用RPM方式安装软件的系统,包括Red Hat、Fedora、SUSE等都是这类; 一种则是使用Debian的dpkg方式安装软件的系统,包括Debian、Ubuntu、B2D等。 若是加上商业公司或网络社区的分类,那么我们可以简单的用下表来做个说明。
下面列出几个主要的Linux发行版官方网址: Red Hat:https://www.redhat.com/ SUSE:https://www.suse.com/ Fedora:https://getfedora.org/ CentOS:https://www.centos.org/ Debian:http://www.debian.org/ Ubuntu:http://www.ubuntu.com/ Gentoo:https://www.gentoo.org/
2004 Ubuntu(Linux发行版之一,基于Debian) 开发者: Andrew S. Tanenbaum 编程语言: C语言 备注: ①Ubuntu基于Debian为开发蓝本,由马克·舍特尔沃斯 创立,其首个版本于2004年 10月20日 发布。 ②其以每六个月发布一次新版本为目标,使得人们得以更频繁地获取新软件。 而其开发目的是为了使个人电脑变得简单易用,但亦有提供服务器版本。 ③Ubuntu的每个新版本均包含了最新版本的GNOME桌面环境,且会在GNOME发布新版本后一个月内发行。 ④Ubuntu的运作主要依靠Canonical有限公司的支持,但亦有来自Linux社区的热心人士提供协助。在2005年 7月8日 ,马克·舍特尔沃斯与Canonical有限公司宣布成立Ubuntu基金会,并对其提供1千万美元 作为启始营运资金。 ⑤Ubuntu不仅仅使用与Debian 相同的deb 软件包格式,还和Debian社区有著密切联系,其会直接和实时地向Debian社区作出贡献,而不是只在发布时宣布一下。许多Ubuntu的开发者也负责为Debian的关键软件包作出维护。 ⑥Ubuntu的软件管理系统与Debian的相同,俱使用apt-get这个指令,而同时亦有图形使用者接口的Synaptic(新立得软件包管理器)可供使用。 ⑦其将所有软件分为4类,称为“组件(component)”,以反映不同的许可证和可用的支持级别。 官方支持 + 自由软件: Main 非官方支持 + 自由软件: Universe 官方支持 + 非自由软件: Restricted 非官方支持 + 非自由软件: Multiverse ⑧Ubuntu均支持主流的CPU指令集架构:i386、AMD64、PowerPC等 ⑨Ubuntu的新版本在发行后,该版本的套件库便会被冻结,只提供安全性更新。