鸟哥的Linux私房菜 总结索引 | 第一章:Linux是什么与如何学习

1、Linux是什么

1.1 Linux是什么?操作系统/应用程序?

操作系统除了有效率的控制这些硬件资源的分配,并提供计算机运行所需要的功能(如网络功能)之外, 为了要提供程序设计师更容易开发软件的环境,所以操作系统也会提供一整组系统调用接口来给软件设计师开发用

Linux就是一套操作系统

由于不同的硬件他的功能函数并不相同,所以同一套操作系统是无法在不同的硬件平台上面运行的
如果能够参考硬件的功能函数并据以修改你的操作系统程序码, 那经过改版后的操作系统就能够在另一个硬件平台上面运行了。 这个动作我们通常就称为“软件移植”

Windows操作系统本来就是针对个人计算机x86架构的硬件去设计的,所以他当然只能在x86的个人计算机上面运行, 在不同的硬件平台当然就无法运行了。也就是说,每种操作系统都是在他专门的硬件机器上面运行的

Linux由于是Open Source的操作系统,所以他的程序码可以被修改成适合在各种机器上面运行的, 也就是说,Linux是具有“可移植性”
Linux提供了一个完整的操作系统当中最底层的硬件控制与资源管理的完整架构
虽然Linux仅是其核心与核心提供的工具,不过由于核心、核心工具与这些软件开发者提供的软件的整合, 使得Linux成为一个更完整的、功能强大的操作系统

1.2 Linux之前,Unix的历史

1960年代初期麻省理工学院发展了所谓的: “相容分时系统”, 它可以让大型主机通过提供数个终端机以连线进入主机,来利用主机的资源进行运算工作

这个相容分时系统可以说是近代操作系统的始祖。他可以让 多个使用者在某一段时间内分别使用CPU的资源, 感觉上 会觉得大家是同时使用该主机的资源。事实上,是CPU在每个使用者的工作之间进行切换

Bell,MIT与GE的“Multics”系统:目的是想要让大型主机可以达成提供300个以上的终端机连线使用的目标

Ken Thompson的小型file server system:以组合语言(Assembler)写出了一组核心程序,同时包括一些核心工具程序, 以及一个小小的文件系统。那个系统就是Unix的原型
Thompson 的这个文件系统有两个重要的概念,分别是:
所有的程序或系统设备都是文件
不管建构编辑器还是附属文件,所写的程序只有一个目的,且要有效的完成目标

1973年:Unix的正式诞生,Ritchie等人以C语言写出第一个正式Unix核心:组合语言具有专一性,加上当时的计算机机器架构都不太相同,所以每次要安装到不同的机器都得要重新编写组合语言,不方便。由于Unix是以较高阶的C语言写的,相对于组合语言需要与硬件有密切的配合, 高阶的C语言与硬件的相关性就没有这么大。所以,这个改变也使得Unix很容易被移植到不同的机器上

GNU计划的推展:计划的目的是:创建一个自由、开放的Unix操作系统
不论是什么软件, 都得要进行编译成为二进制文件后才能够执行,如果能够写出一个不错的编译器,那不就是大家都需要的软件了吗? 因此他便开始撰写C语言的编译器,那就是现在相当有名的GNU C Compiler(gcc)
GNU所开发的几个重要软件,如:
Emacs
GNU C (GCC)
GNU C Library (glibc)
Bash shell

1.3 关于GNU计划、自由软件与开放源代码

自由软件的重点并不是指“免费”的,而是指具有“自由度, freedom”的软件, 史托曼进一步说明了自由度的意义是: 使用者可以自由的执行、复制、再发行、学习、修改与强化自由软件

一个软件挂上了GPL版权宣告之后,他自然就成了自由软件!这个软件就具有下面的特色:

取得软件与源代码:你可以根据自己的需求来执行这个自由软件;
复制:你可以自由的复制该软件;
修改:你可以将取得的源代码进行程序修改工作,使之适合你的工作;
再发行:你可以将你修改过的程序,再度的自由发行,而不会与原先的撰写者冲突;
回馈:你应该将你修改过的程序码回馈于社群

你所修改的任何一个自由软件都不应该也不能这样:

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

不可以将一个GPL软件的授权取消,即使你已经对该软件进行大幅度的修改。 那么自由软件也不能贩卖吗?当然不是!自由软件是可以贩售的,不过,不可仅贩售该软件,应同时搭配售后服务与相关手册
有人有需要你的自由软件时,他就会请求你的协助, 此时,你就可以通过服务来收费

GPL 对于自由软件的作者有何优点呢?大致的优点有这些:
软件安全性较佳;
软件执行性能较佳;
软件除错时间较短;
贡献的源代码永远都存在

该软件的授权必须要符合下面的基本需求,才可以算是 open source(开源) 的软件
公布源代码且用户具有修改权:用户可以任意的修改与编译程序码,这点与自由软件差异不大;
任意的再散布:该程序码全部或部份可以被贩售,且程序码可成为其他软件的元件之一,作者不该宣称具有拥有权或收取其他额外费用。
必须允许修改或衍生的作品,且可让再发布的软件使用相似的授权来发表即可。
承上,用户可使用与原本软件不同的名称或编号来散布

不可限制某些个人或团体的使用权
不可限制某些领域的应用:例如不可限制不能用于商业行为或者是学术行为等特殊领域等等
不可限制在某些产品当中,亦即程序码可以应用于多种不同产品中。
不可具有排他条款,例如不可限制本程序码不能用于教育类的研究中,诸如此类

GPL 自由软件也可以算是开源软件的一个,只是对于商业应用的限止稍微多一些而已
常见的开放源代码授权:
Apache License 2.0
BSD 3-Clause “New” or “Revised” license
BSD 2-Clause “Simplified” or “FreeBSD” license
GNU General Public License (GPL)
GNU Library or “Lesser” General Public License (LGPL)
MIT license
Mozilla Public License 2.0
Common Development and Distribution License

2、Torvalds的Linux发展

2.2 对386硬件的多任务测试

如果具有多任务能力的CPU就会在不同的程序间切换。假设CPU频率为1GHz的话,那表示CPU一秒钟可以进行109次工作。 假设CPU对每个程序都只进行1000次运行周期,然后就得要切换到下个程序的话,那么CPU一秒钟就能够切换106

为什么有的时候 同时开两个文件(假设为A, B文件)所花的时间, 要比开完A再去开B文件的时间还要多: 因为如果同时打开的话,CPU就必须要在两个工作之间不停的切换,而切换的动作还是会耗去一些CPU时间的

要达到多工(multitasking)的环境,除了硬件(主要是CPU)需要能够具有多任务的特性外,操作系统也需要支持这个功能
多任务的操作系统中,每个程序被执行时,都会有一个最大CPU使用时间,若该工作运行的时间超过这个CPU使用时间时, 该工作就会先被丢出CPU的运行中,而再度的进入核心工作调度中等待下一次被CPU取用来运行

撰写程序需要什么呢?首先需要的是能够进行工作的环境,再来则是可以将源代码编译成为 可可执行文件的编译器。 好在有GNU计划提供的bash工作环境软件以及gcc编译器等自由软件, 让托瓦兹得以顺利的撰写核心程序

2.3 初次释出Linux 0.02

POSIX是可携式操作系统接口 的缩写,重点在规范核心与应用程序之间的接口

因为POSIX标准主要是针对Unix与一些软件运行时候的标准规范, 只要依据这些标准规范来设计的核心与软件,理论上,就可以搭配在一起执行了。 而Linux的发展就是依据这个POSIX的标准规范,Unix上面的软件也是遵循这个规范来设计的, 如此一来,让Linux很容易就与Unix相容共享互有的软件了

2.4 Linux 的发展:虚拟团队的产生

单一个人维护阶段:首先,他将释出的Linux核心放置在FTP上面,并请告知大家新的版本信息, 等到使用者下载了这个核心并且安装之后,如果发生问题,或者是由于特殊需求亟需某些硬件的驱动程序,那么这些使用者就会主动回报给托瓦兹。 在托瓦兹能够解决的问题范围内,他都能很快速的进行Linux核心的更新与除错

广大骇客志工加入阶段:他将该驱动程序/软件带入核心中,并且加以测试。 只要测试可以运行,并且没有什么主要的大问题,那么他就会很乐意的将志工们写的程序码加入核心
对于Linux核心所欠缺的项目,他总是“先求有且能跑, 再求进一步改良”

为因应这种随时都有程序码加入的状况,于是Linux便逐渐发展成具有模块的功能。亦即是将某些功能独立出于核心外,在需要的时候才载入到核心中。如此一来, 如果有新的硬件驱动程序或者其他协定的程序码进来时,就可以模块化, 大大的增加了Linux核心的可维护能力

核心是一组程序,这组程序每次加入新的功能不用重新编译与改版,模块化之后,原本的核心程序不需要更动,你可以直接将他想成是“驱动程序”即可

核心功能细部分工发展阶段:这些重要的副手会先将来自志工们的修补程序或者新功能的程序码进行测试, 并且结果上传给托瓦兹看,让托瓦兹作最后核心加入的源代码的选择与整并

早期的Linux确实是不具有移植性的。不过,Open source的好处就是, 可以修改程序码去适合作业的环境

2.5 Linux的核心版本

3.10.0-123.el7.x86_64
主版本.次版本.释出版本-修改版本

主线版本、长期维护版本:从 3.0 版开始,核心主要依据主线版本来开发,开发完毕后会往下一个主线版本进行。 例如 3.10 就是在 3.9 的架构下继续开发出来的新的主线版本

而旧的版本在新的主线版本出现之后,会有两种机制来处理,一种机制为结束开发,亦即该程序码已经结束,不会有继续维护的状态。 另外一种机制为保持该版本的持续维护,亦即为长期维护版本!例如 3.10 即为一个长期维护版本,这个版本的程序码会被持续维护,若程序码有 bug 或其他问题, 核心维护者会持续进行程序码的更新维护

如果你想要使用 Linux 核心来开发你的系统,那么当然要选择长期支持的版本才行

当 有任何问题想要在Linux论坛发言时,请务必仔细的说明你的distribution版本, 因为虽然各家distributions使用的都是Linux核心,不过每家distributions所选用的软件以及他们自己发展的工具并不相同, 多少还是有点差异

2.6 Linux distributions

Linux其实就是一个操作系统最底层的核心及其提供的核心工具。 他是GNU GPL授权模式,所以,任何人均可取得源代码与可执行这个核心程序,并且可以修改。 此外,因为Linux参考POSIX设计规范,于是相容于Unix操作系统,故亦可称之为Unix Like的一种

“Kernel + Softwares + Tools + 可完整安装程序”的东西,我们称之为Linux distribution, 一般中文翻译成可完整安装套件,或者Linux发布商套件等
Linux可完整安装的套件
由于Linux的GPL版权宣告,因此,商业公司所贩售的Linux distributions通常也都可以从Internet上面来下载的

因为每个Linux distributions使用的kernel都是一样的,而他们所选择的软件,几乎都是目前很知名的软件,重复性相当的高, 例如网页服务器的Apache,电子邮件服务器的Postfix/sendmail,文件服务器的Samba等等

为了让所有的Linux distributions开发不致于差异太大,且让这些开发商在开发的时候有所依据,还有Linux Standard Base (LSB)等标准来规范开发者,以及目录架构的File system Hierarchy Standard (FHS)标准规范。唯一差别的,可能就是该开发者自家所开发出来的管理工具,以及套件管理的模式

distributions主要分为两大系统,一种是使用RPM方式安装软件的系统,包括Red Hat, Fedora, SuSE等都是这类; 一种则是使用Debian的dpkg方式安装软件的系统,包括Debian, Ubuntu, B2D等等

如果是要装在个人计算机上面做为桌面电脑用的,建议使用社群版, 包括Fedora, Ubuntu, OpenSuSE等等。如果是用在服务器上面的,建议使用商业版本,包括Red Hat, SuSE等。 这是因为社群版通常开发者会加入最新的软件,这些软件可能会有一些bug存在。至于商业版则是经过一段时间的磨合后, 才将稳定的软件放进去

3、Linux当前应用的角色

3.1 企业环境的利用

网络服务器:
这是Linux当前最热门的应用了。承袭了Unix高稳定性的良好传统,Linux上面的网络功能特别的稳定与强大
关键任务的应用(金融数据库、大型企业网管环境)
学术机构的高性能运算任务

为了加强整体系统的性能,丛集计算机系统(Cluster)的平行运算能力。 所谓的平行运算指的是“将原本的工作分成多份,然后交给多部主机去运算,最终再将结果收集起来”的一种方式。 由于通过高速网络使用到多部主机,将能够让原本需要很长运算时间的工作,大幅的降低等待的时间

3.2 个人环境的使用

为了要强化桌面电脑的使用率,Linux与X Window System结合了。要注意的是,X Window System仅只是Linux上面的一套软件, 而不是核心。所以即使X Window挂了,对Linux也可能不会有直接的影响

Google 成立了开放手机联盟 ,并且推出 Android 手机专用操作系统。 而 Android 其实就是 Linux 核心的一支,只是专门用来针对手机/平板这类的 ARM 机器所设计的

要让硬件系统顺利的运行就得要撰写合适的操作系统才行。那硬件系统除了我们常看到的计算机之外, 其实家电产品、PDA、手机、数码相机以及其他微型的计算机配备也是硬件系统
操作系统是直接嵌入于产品当中的,理论上你不应该会更动到这个操作系统, 所以就称为嵌入式系统
要玩嵌入式系统必须要很熟悉Linux Kernel与驱动程序的结合才行

3.3 云端运用

云程序的底层就是 Linux ,而云程序搭建出来的虚拟机,内容也是 Linux 操作系统

所谓的“虚拟化”指的是:在一部实体主机上面仿真出多个逻辑上完全独立的硬件,这个假的虚拟出来的硬件主机,可以用来安装一部逻辑上完全独立的操作系统。因此,通过虚拟化技术,你可以将一部实体主机安装多个同时运行的操作系统 (非多重开机),以达到将硬件资源完整利用的效果

4、Linux 该如何学习

建议学习Linux最好能够先舍弃X Window的环境呢? 这是因为X window了不起也只是Linux内的“一套软件”而不是“Linux核心”

计算机概论与硬件相关知识
先从Linux的安装与指令学起
Linux操作系统的基础技能: 这些包含了“使用者、群组的概念”、“权限的观念”,“程序的定义”等等
务必学会vi文书编辑器
Shell与Shell Script的学习:“命令行”说穿了就是一个名为shell的软件,shell上面的数据太多了,包括“正则表达式”、“管线命令”与“数据流重导向”等等
一定要会软件管理员
网络基础的创建

实作再实作

  • 17
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值