《鸟哥的linux私房菜》读书笔记(二)Linux简介

第二章 Linux

第一节 引文

  Linux就是一套操作系统,也就是核心和系统呼叫接口两层。操作系统是针对特定的硬件平台开发,所以不同的硬件平台自然无法运行一套操作系统,跨平台需要移植,Linux具有可移植性,是开源的操作系统。

操作系统的角色

  Linux从Unix沿袭了一个完整的操作系统中最底层的硬件控制与资源管理的完整架构,非常稳定和强大。


第二节 历史

  1969年,贝尔实验室的员工Ken Thompson以汇编语言写出了一组核心程序,以及一个小的文件系统。这个文件系统有两个重要的概念:(1)所有的程序或系统装置都是文件。(2)不管建构编辑器还是附属文件,所写的程序只有一个目的,且要有效的完成目标。这些概念对后续Linux的发展有很重要的影响。

  1973年,Unix正式诞生,最开始Tompson和Ritchie合作用高阶语言:B语言来撰写,但实现出的核心效能并不好,后来Ritchie用C语言重新改写和编译Unics的核心,最后发行Unix的正式版本。

  1977年,Unix分支–BSD诞生。1973年后Unix便和学术界进行了合作,加州伯克利大学的Bill Joy对Unix进行了移植,修改为实验室机器适合的版本,并增加了许多工具软件和编译程序,最终命名为Berkeley Software Distribution(BSD)。Bill Joy也是Sun公司的创办者。Unix具有高度可移植性和强大的效能,再加上当时并没有太多版权的纠纷,所以市场上出现了很多商业公司自家的Unix系统。在这个阶段各个公司还没有制定协议的概念,硬件各不相同所以开发出的Unix系统以及相关软件也无法在其他平台使用。

  1979年,AT&T推出System V第七版Unix,终于有了可以支持x86架构的个人计算机系统。但AT&T在这一代尝试收回Unix版权,特别是限制了不可对学生提供源代码。

  1984年,Andrew Tanenbaum教授自己手写了Minix这个Unix Like核心程序,为了避免版权纠纷,在开发时他完全脱离了Unix核心源代码,终于在1986年完成。但Minix并不是免费的,它的诞生就是作者为了教学,所以也没有后续的发展和更新。

  1984年,Richard Mathew Stallman发起了GNU计划,对后来的自由和开源软件开启了大门。GNU计划的目的是:建立一个自由、开放的Unix操作系统。Stallman从开发免费的Unix程序开始慢慢打响了知名度,然后又撰写了C语言的编译程序:GNU C Compiler(gcc),在这个过程中他还把写过的Emacs编辑器(可以在编辑时就指出语法的错误)移植到了Unix上,并公布了源代码。Stallman通过Emacs赚到了一定的资金并成立了自由软件基金会(FSF,Free Software Foundation),基金会请到了更多的开发者参与终于完成了GCC,之后Stallman还撰写了可以被呼叫的C函式库(GNU C library),以及可以被使用来操作OS的基本接口BASH shell。

  1985年,为了避免GNU开发的自由软件被他人注册为专利软件,Stallman和律师草拟了通用公共许可证(General Public License,GPL),并称呼为copyleft相比于专利软件的copyright。FSF的核心观念是【版权只读是促进社会进步的手段,但版权本身不是自然权利】,自由软件的重点不是指免费,而是指具有自由度的软件,使用者可以自由的执行、复制、再发行、学习、修改和强化自由软件

  GNU在开发的核心叫hurd,是一款架构非常先进的核心,但开发者对其要求太高,导致一直推迟了发布,也影响了后来Linux的开发。

  1991年,芬兰的赫尔辛基大学的Linus Torvalds在BBS上贴了一则消息,说他以bash,gcc等GNU工具写了一个小的核心程序,不是GNU那样的专业程序,比较像玩具。但此核心程序可以在Intel的386个人计算机上运作,引起了很多人的兴趣。Torvalds通过学习Minix操作系统学习了核心程序设计的设计概念,但他对个人计算机缺少服务器的多任务处理能力不是很满意,所以他测试了很久386的硬件性能。在拿到Minix后,他也发现Minix虽然很棒,但创始人Tanenbaum教授不愿意加强其功能,所以Torvalds就动手开始改写自己的核心程序。

  撰写程序首先需要的是能够工作的环境,再来则是可以将原始码编译为可执行文件的编译程序。还好GNU计划提供了bash工作环境和gcc编译程序等自由软件,Torvalds参考了Minix的设计理念和书籍上的程序代码,开始研究386个人计算机的效能优化,通过GNU自由软件将核心程序代码和386结合起来,最终写出了他需要的核心程序。最终这个玩具可以在386上运行,并且可以读取Minix的文件系统。之后他便将这个程序放到了网上供别人下载,并在BBS上贴了一则消息,而他放置这个程序的FTP目录为Linux,也就成为了它的名字。

Linus Torvalds在BBS上发布Linux

  之后Torvalds尝试在Linux上运行一些Unix的程序,但大部分都无法启动。所以他现在有两种选择:第一是修改软件,让其可以运行在Linux上;第二是修改Linux,让Linux符合软件运行的规范。Torvalds选择了后者,他希望Linux可以兼容Unix,于是他参考了标准的POSIX规范(可携式操作系统接口,由IEEE发布,主要针对Unix与一些软件运行时的标准),这个决定也是后来Linux发展状大的一个重要原因。

  Linux的发展离不开社群的贡献,Torvalds在一开始便将Linux发布在网络中,有人使用后出现各种问题和需求,Torvalds就会及时的进行处理和更新。但一个人力量是有限的,因为Linux核心是Open Source的,所以网络和社群上的人很容易就可以跟随Linux的设计架构,并为一些硬件开发出兼容的驱动程序或软件等。Torvalds总是以【先求有且能运行,再求进一步改良】为准则,这鼓励到了很多志愿者加入了这个团队。同时为了适应这种随时都有程序代码加入的状况,Linux发展为具有模块的功能。将一些功能独立出核心,在需要时再加载进核心中,这样模块化的设计大大的提升了Linux核心的可维护能力。

  1994年,Linux核心正式版上线。1996年完成了2.0版,2011年更新了3.0版,2015年更新了4.0版。

自由软件和开源软件

自由软件的特色:

  • 取得软件与原始码:你可以根据自己的需求来执行这个自由软件。
  • 复制:你可以自由的复制该软件。
  • 修改:你可以将取得的原始码进行修改,使其适应你的工作。
  • 再发行:你可以将你修改过的程序,再度的自由发行,不会和原撰写者发生冲突。
  • 回馈:你可以将你修改过的程序代码回馈给社群。

自由软件禁止:

  • 修改授权:你不能把一个GPL授权的自由软件,在修改后取消GPL授权。
  • 单纯贩卖:你不能单纯的贩卖自由软件。

  自由软件也是可以贩卖的,但不能单售卖自由软件,而是厂商自己开发和制作的部分,特别是服务

开源软件规则:

  • 公布原始码且用户具有修改权:用户可以任意的修改和编译程序代码,与自由软件相同。
  • 任意的再散布:此程序代码全部或部分可以被贩卖,且程序代码可以成为其他软件的组件之一,作者不应该称自己具有所有权,或收取额外的费用。
  • 必须允许修改或衍生的作品,且可让再发布的软件使用相似的授权来发表即可。
  • 承上,用户可使用与原本软件不同的名称或编号来散布。
  • 不可限制某些个体或团体的使用权。
  • 不可限制某些领域的应用:如不可限制其不能用于商业行为或学术行为等领域
  • 不可限制在某些产品中,亦即程序代码可以应用于多种不同产品中。
  • 不可具有排他条款,如不可限制此程序代码不能用于教育类研究中等。

  GPL自由软件在商业上相比开源软件要有更多限制,所以许多商业公司选择拥抱其他open source开源软件授权,因为可以用于商业行为。ps:有些专利软件也会通过Freeware和Shareware的模式来开放免费版本给大众使用噢


第三节 版本

  Linux的核心版本编号如下格式:

1
2
3.10.0-123.e17.x86_64
主版本.次版本.释出版本-修改版本

奇数偶数版本分类

  当主次版本为奇数,表示是发展中版本(development),如2.5.XX;当主次版本为偶数,则表示为稳定版本(stable)。释出版本是主次版本的架构不变时,新增功能累积到一定程度后释放的核心版本。修改版本就是使用者各自针对某个进行核心程序代码修改后的版本。

主线版本和长期维护版本

  3.0后奇数偶数编号格式就不再使用了,而是依据主线版本(MainLine)来开发,如3.10基于3.9架构继续开发。

  旧版本在出现新的版本之前会有两种机制来处理,一是结束开发,表示此程序代码已结束不会再维护;二是保持该版本的持续维护,即长期维护版本,如3.10即为一个长期维护版本,如果出现BUG等问题,维护人员会进行更新维护。

核心版本和发布商版本

  Linux核心版本和一些distribution的版本不相同,如Linux 7.x 应该是指CentOS这个distribution的版本。

  为了让更多使用者能够使用Linux,许多商业公司和非盈利团体,将Linux Kernel(包括tools)与一些可运行软件整合起来,再加上了自己一些有创意的工具程序,可以让用户通过存储设备或网络来安装和管理Linux系统。这个【Kernel + Softwares + Tools + 可完全安装程序】就被叫作Linux distribution,Linux发布商套件。

  比较知名的有Red Hat,SuSE,Ubuntu,Fedora,Debian等,这些系统重复性很高,并都基于Linux Standard Base(LSB)标准以及目录架构的File system Hierarchy Standard(FHS)来开发,所以不会有太大差异,区别可能就是平台自家开发的管理工具以及套件管理的模式吧。

Linux distribution分类

商业版会稳定些,而社群版可能会有一些潜在的BUG


第四节 应用场景

网络服务器

  Linux最热门的应用场景。Linux系统网络功能非常稳定和强大,特别适合用作网络服务器,如WWW,Mail Server,File Server等。

关键任务的应用(金融数据库、大型企业网管环境)

  关键任务就是企业最重要的业务,比如金融行业最重要的投资者和账户的数据,这些数据大部分是由数据库系统来作为存取接口,往往都采用Linux。

学术机构的高效能运算任务

  Linux具有强大的运算能力,也具有支持度相当广泛的GCC编译软件,很适合一些学术机构的研究软件。

个人计算机

  桌面计算机(Desktop)的绝大部分功能需求Linux都已经可以满足了,旧版本缺少的窗口接口在Linux和X Window System结合后也得到了解决,Linux经过多年的发展已经兼容了绝大部分常用的办公和生活软件。

移动设备

  Android就是Linux的一个分支。

嵌入式设备

  嵌入式系统基本不会有太大的更新,比如路由器、防火墙、收集、IP分享器、交换机、机器人芯片、家电产品等都可以使用Linux系统。

云端应用

  随着个人计算机的CPU核心数越来越多,主机的性能有些过于强大,一些硬件资源经常会闲置,促进了虚拟化技术的发展,让数据集中在云程序中,用户通过端点设备联机到云中取到运算资源。云程序的底层就是Linux,而云程序搭建出的虚拟机,内容也是Linux操作系统。(通过虚拟化技术可以在一部主机上安装多个同时运作的操作系统,从而充分利用硬件资源)


参考博客和文章书籍等:

《鸟哥的Linux私房菜》

因博客主等未标明不可引用,若部分内容涉及侵权请及时告知,我会尽快修改和删除相关内容