Linux学习笔记5——什么是Linux:Linux 核心版本与 Linux 发布商版本、如何学linux

一、Linux是什么?它怎么来的?

1,linux是什么?

不用多说,linux就是操作系统,但我在培训的时候讲课的老师强调,linux不是操作系统而是内核,kernel。。。从操作系统的概念来看,操作系统除了有效率的控制这些硬件资源的分配,并提供计算机运行所需要的功能(如网络功能)之外,为了要提供程序设计师更容易开发软件的环境,所以操作系统也会提供一整组系统调用接口来给软件设计师开发用喔!

从概念和图示来看,linux叫操作系统问题也不大,因为它也有操作的相关接口来调用。不过要问我的话我就说它是内核,然后又基于linux的一系列操作系统。

由于操作系统和硬件是直接相关的,因此不同的硬件平台可能存在不兼容操作系统的可能性。

例题:请问Windows操作系统能否在苹果公司的MAC计算机上面安装与运行?

答:由上面的说明中,我们知道硬件是由“核心”来控制的,而每种操作系统都有他自己的核心。 在2006年以前的苹果计算机公司是请IBM公司帮忙开发硬件(所谓的Power CPU), 而苹果计算机公司则在该硬件架构上发展自家的操作系统(就是俗称的MAC是也)。Windows则是开发在x86架构上的操作系统之一, 因此Windows是没有办法安装到MAC计算机硬件上面的。不过,在2006年以后,苹果计算机转而请Intel设计其硬件架构,亦即其硬件架构已经转为x86系统, 因此在2006年以后的苹果计算机若使用x86架构时,其硬件则“可能”可以安装Windows操作系统了。 不过,你可能需要自己想些方式来处理该硬件的兼容性啰!

说明:X86架构(The X86 architecture)是微处理器执行的计算机语言指令集,指一个intel通用计算机系列的标准编号缩写,也标识一套通用的计算机指令集合。

Linux由于是Open Source的操作系统,所以他的程序码可以被修改成适合在各种机器上面运行的, 也就是说,Linux是具有“可移植性”,这可是很重要的一个功能喔!

2,Linux怎么来的?

在Linux之前的二十年(大约在1970 年代),Linux的老大哥“Unix”就出现了!Linux的核心是由Linus Torvalds在1991年的时候给他开发出来的, 并且丢到网络上提供大家下载,然后逐步发展起来。

在1960年代初期麻省理工学院(MIT)发展了所谓的: “相容分时系统(CompatibleTime-Sharing System, CTSS)”, 它可以让大型主机通过提供数个终端机(terminal)以连线进入主机,来利用主机的资源进行运算工作。 架构有点像这样:

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

为了更加强化大型主机的功能,由贝尔实验室(Bell)、麻省理工学院(MIT)及奇异公司(GE, 或称为通用电器)共同发起了Multics的计划, Multics计划的目的是想要让大型主机可以达成提供300个以上的终端机连线使用的目标。该计划未成功。

原本参与Multics计划的人员中,已经从该计划当中获得一些点子, Ken Thompson  就是其中一位!本来Thompson应该是没时间的(有家有小孩的宿命?), 无巧不巧的是,在1969年八月份左右,刚好Thompson的妻儿去了美西探亲,于是他有了额外的一个月的时间好好的待在家将一些构想实现出来!

经过四个星期的奋斗,他终于以组合语言(Assembler)写出了一组核心程序,同时包括一些核心工具程序, 以及一个小小的文件系统。那个系统就是Unix的原型!当初Thompson会写这套Unix核心程序, 却是想要移植一套名为“太空旅游”的游戏呢!这个故事也告诉我们,不要小看自己的潜能喔! 你想作的,但是现实生活中没有的,就动手自己搞一个来玩玩吧!

Thompson 的这个文件系统有两个重要的概念,分别是:

所有的程序或系统设备都是文件
不管建构编辑器还是附属文件,所写的程序只有一个目的,且要有效的完成目标。

1973年:Unix的正式诞生,Ritchie等人以C语言写出第一个正式Unix核心。AT&T在1979年发行的第七版Unix中,特别提到了 “不可对学生提供源代码”的严格限制! 同时,也造成Unix业界之间的紧张气氛,并且也引爆了很多的商业纠纷。谭宁邦(AndrewTanenbaum)在1984年开始撰写核心程序, 到了1986年终于完成,并于次年出版Minix相关书籍(之所以称为Minix的原因,是因为他是个Mini (微小的) 的Unix系统啰!)。Richard Mathew Stallman(史托曼)在1984年发起的GNU计划,对于现今的自由软件风潮,真有不可磨灭的地位!

1984年,史托曼开始GNU计划,这个计划的目的是:创建一个自由、开放的Unix操作系统(Free Unix)。“既然操作系统太复杂,我就先写可以在Unix上面运行的小程序,这总可以了吧?”史托曼开始参考Unix上面现有的软件,并依据这些软件的作用开发出功能相同的软件,且开发期间史托曼绝不看其他软件的源代码, 以避免吃上官司。

不论是什么软件,都得要进行编译成为二进制文件(binary program)后才能够执行,如果能够写出一个不错的编译器,那不就是大家都需要的软件了吗??因此他便开始撰写C语言的编译器,那就是现在相当有名的GNU C Compiler(gcc)!

到了1985年,为了避免GNU所开发的自由软件被其他人所利用而成为专利软件, 所以史托曼与律师草拟了有名的通用公共许可证(General Public License, GPL), 并且称呼他为copyleft(相对于专利软件的copyright!)。

1988年:图形接口XFree86计划。为什么称图形使用者接口为X呢?因为由英文单字来看,Window的W接的就是X啦!意指Window的下一版就是了! 需注意的是,X Window并不是X Windows喔!

到了1991年,芬兰的赫尔辛基大学的Linus Torvalds在BBS上面贴了一则消息, 宣称他以bash, gcc等 GNU 的工具写了一个小小的核心程序,该核心程序单纯是个玩具,不像 GNU 那么专业。 

为什么要称为GNU呢?其实GNU是GNU's Not Unix的缩写,意思是说,GNU并不是Unix啊!

自由(Free)的真谛:"Free software" is a matter of liberty, not price. To understand the concept, you should think of "free speech", not "free beer". "Free software" refers to the users' freedom to run, copy, distribute, study, change, and improve the software

目前自由软件工作者,他们所赖以维生的,几乎都是在“服务”这个领域呢!

自由软件的GPL授权规定,任何软件只要用了GPL的全部或部份程序码那么该软件就得要使用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

免费的专利软件代表的授权模式有:(1)Freeware为“免费软件”而非“自由软件!”虽然它是免费的软件,但是不见得要公布其源代码;(2)Shareware共享软件这个名词就有趣了!与免费软件有点类似的是,Shareware在使用初期,它也是免费的,但是, 到了所谓的“试用期限”之后,你就必须要选择“付费后继续使用”或者“将它移除”的宿命。

刚开始时,到有很多的软件无法在Linux这个核心上运行。这个时候他有两种作法, 一种是修改软件,让该软件可以在Linux上跑, 另一种则是修改Linux,让Linux符合软件能够运行的规范! 由于Linux希望能够相容于Unix,于是托瓦兹选择了第二个作法“修改Linux”! 为了让所有的软件都可以在Linux上执行,于是托瓦兹开始参考标准的POSIX规范。

 POSIX是可携式操作系统接口(Portable Operating System Interface)的缩写,重点在规范核心与应用程序之间的接口, 这是由美国电器与电子工程师学会(IEEE)所发布的一项标准喔!

3,Linux的发展与Linux的版本

单一个人维护阶段——>广大骇客志工加入阶段——>核心功能细部分工发展阶段

Linux企业的由来:奇怪的是,托瓦兹是因为小时候去动物园被企鹅咬了一口念念不忘, 而正式的2.0推出时,大家要他想一个吉祥物。他在想也想不到什么动物的情况下, 就将这个念念不忘的企鹅当成了Linux的吉祥物了......

(1) Linux的核心版本参数说明

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

详细说明:

第一个数字:3,主版本号

第二个数字:10,次版本号表示稳定版本

第三个数字:0,表示第0次修订(错误的修补次数)

头两个数字可以用来描述内核系列;EL是RedHatEnterpriseLinux的简写;x86_64也有一个很长的故事,表示支持64位指令集,x86表示支持32位指令集。

在 2.6.x 版本以前,托瓦兹将核心的发展趋势分为两股,并根据这两股核心的发展分别给予不同的核心编号,那就是:

主、次版本为奇数:发展中版本(development) 如2.5.xx,这种核心版本主要用在测试与发展新功能,所以通常这种版本仅有核心开发工程师会使用。

主、次版本为偶数:稳定版本(stable) 如2.6.xx,等到核心功能发展成熟后会加到这类的版本中,主要用在一般家用计算机以及企业版本中。

不过,这种奇数、偶数的编号格式在 3.0 推出之后就失效了。从 3.0 版开始,核心主要依据主线版本 (MainLine) 来开发,开发完毕后会往下一个主线版本进行。例如 3.10 就是在 3.9的架构下继续开发出来的新的主线版本。通常新一版的主线版本大约在 2~3 个月会被提出
喔! 之所以会有新的主线版本,是因为有加入新功能之故。现在最新版本已经有了linux-4.18.12.tar.xz。

而旧的版本在新的主线版本出现之后,会有两种机制来处理,一种机制为结束开发 (End ofLive, EOL),亦即该程序码已经结束,不会有继续维护的状态。 另外一种机制为保持该版本的持续维护,亦即为长期维护版本 (Longterm)!例如 3.10 即为一个长期维护版本,这个
版本的程序码会被持续维护,若程序码有 bug 或其他问题, 核心维护者会持续进行程序码的更新维护喔!如果你想要使用 Linux 核心来开发你的系统,那么当然要选择长期支持的版本才行!要判断你的 Linux 核心是否为长期支持的版本, 可以使用“ uname -r ”来查阅核心版本,然后对照下列链接来了解其对应值喔!

https://www.kernel.org/releases.html    

Longterm

There are usually several "longterm maintenance" kernel releases provided for the purposes of backporting bugfixes for older kernel trees. Only important bugfixes are applied to such kernels and they don't usually see very frequent releases, especially for older trees.

(2)Linux 核心版本与 Linux 发布商版本

首先要区分核心的版本和发布商版本(distribution),linux的版本在https://www.kernel.org/releases.html   可以查到最新的,详细说明在(1)中有讲解,而distribution分为很多类,我用的虚拟机是centos系列的。

为了让使用者能够接触到Linux,于是很多的商业公司或非营利团体, 就将Linux Kernel(含tools)与可运行的软件整合起来,加上自己具有创意的工具程序, 这个工具程序可以让使用者以光盘/DVD或者通过网络直接安装/管理Linux系统。 这个“Kernel + Softwares + Tools + 可完整安装程序”的咚咚,我们称之为Linux distribution, 一般中文翻译成可完整安装套件,或者Linux发布商套件等。

为了让linux distribution 差异不太大,有两个标准有Linux Standard Base (LSB)等标准来规范开发者、及目录架构的Filesystem Hierarchy Standard (FHS)标准规范:

FHS: http://www.pathname.com/fhs/

LSB: http://www.linuxbase.org

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

主要的Linux distributions发行网址:

Red Hat: http://www.redhat.com
SuSE: https://www.suse.com
Fedora: https://getfedora.org/
CentOS: http://www.centos.org/
Debian: http://www.debian.org/
Ubuntu: http://www.ubuntu.com/
Gentoo: http://www.gentoo.org/

总之,版本很多,但是各版本差异其实不大,建议你一定要先选定一个版本后, 先彻头彻尾的了解他,那再继续玩其他的版本时,就可以很快的进入状况。企业环境建议商业版,个人用desktop等版本。

(3)Linux的作用

企业环境运用Linux作些什么呢?

A、网络服务器

这是Linux当前最热门的应用了!承袭了Unix高稳定性的良好传统,Linux上面的网络功能特别的稳定与强大!总之,是听说linux服务器可以2年部宕机。

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

目前很多金融业界都已经使用Linux做为他们的关键任务应用。所谓的关键任务就是该企业最重要的业务啦! 举例来说,金融业最重要的就是那些投资者、帐户的数据了,这些数据大多使用数据库系统来作为存取接口, 这些数据很重要吧!运营商也是用的linux做的数据库服务器~~~

C、学术机构的高性能运算任务

学术机构的研究常常需要自行开发软件,所以对于可作为开发环境的操作系统需求非常的迫切!

D、大数据的集群

自己补充一点,现在云计算的节点、hadoop的集群搭建,基本上都是以linux主机为基础的。

E、桌面电脑

 Linux早期都是由工程师所发展的,对于窗口接口并没有很需要,所以造成Linux不太友好的印象。为了要强化桌面电脑的使用率,Linux与X Window System结合了! 要注意的是,XWindow System仅只是Linux上面的一套软件, 而不是核心喔!所以即使X Window挂了,对Linux也可能不会有直接的影响呢!linux也有自己的各类软件,拥有桌面的应用程序。

F、手机系统

Google 成立了开放手机联盟 (Open Handset Alliance),并且推出 Android 手机专用操作系统! 而 Android 其实就是 Linux 核心的一支,只是专门用来针对手机/平板这类的 ARM 机器所设计的。在android手机的设置中,找到关于手机、内核版本,可以看到linux版本信息,比如我的是4.1.18-ga5ff2c9

G、嵌入式系统

嵌入式系统这个东东也很牛逼,能做这个的薪水挺高。而要让硬件系统顺利的运行就得要撰写合适的操作系统才行。那硬件系统除了我们常看到的计算机之外, 其实家电产品、PDA、手机、数码相机以及其他微型的计算机配备也是硬件系统啦! 这些计算机配备也都是需要操作系统来控制的!而操作系统是直接嵌入于产品当中的,理论上你不应该会更动到这个操作系统, 所以就称为嵌入式系统啦!

包括路由器、防火墙、手机、IP分享器、交换器、机器人控制芯片、家电用品的微计算机控制器等等,都可以是Linux操作系统喔!

H、云程序

设备底层使用的就是 Linux 操作系统来统一管理。云程序的底层就是 Linux ,而云程序搭建出来的虚拟机,内容也是 Linux 操作系统哩!用的越来越多啊!

所谓的“虚拟化”指的是:在一部实体主机上面仿真出多个逻辑上完全独立的硬件,这个假的虚拟出来的硬件主机,可以用来安装一部逻辑上完全独立的操作系统!

I、端设备

既然运算资源都集中在云里面了,那我需要连线到云程序的设备应该可以越来越轻量吧?当然没错!所以智能手机才会这么热门啊! 很多时候你只要有智能手机或者是平板,连线到公司的云里面去,就可以开始办公了哩!

二、如何学习linux?

首先,先舍弃X-window环境,因为X window了不起也只是Linux内的“一套软件”而不是“Linux核心”,而且X-window理论上还有不能掌控的地方。而且,linux的核心能力也主要是通过命令行体现的,工作上的主要用途也是这种方式。

1,从头学习Linux基础

不论学什么系统,“从头学起”是很重要的!而且根据经验,包括软件的框架也是,通常从头学起之后,很多问题自然而然就解决了。

需要有基础知识:

(1)计算机概论与硬件相关知识(听过、有概念即可);(2)先从Linux的安装与指令学起;(3)Linux操作系统的基础技能;(4)务必学会vi文书编辑器;(5)Shell与Shell Script的学习;(6)一定要会软件管理员;(7)网络基础的创建;(8)网站的架设。

计算机基础 (http://www.study-area.org/compu/compu.htm)

网络基础 (http://www.study-area.org/network/network.htm)

2,选择一本易读的工具书

我是选择了鸟哥的书,反正查一查还是有很多地方有推荐书的。然后这本网络方面的书也贴出来:

http://linux.vbird.org/linux_basic/0120howtolinux/0120howtolinux_1.php

其实鸟哥买科技类书籍比较喜欢买基础书耶,因为基础学好了,其他的部份大概找个keyword ,再 google 一下,一大堆数据就可以让你去分析判断了! 你会说,既然如此,那基础书籍内的项目不是 google 也是一大堆?不要忘记了,“最开始你是要用什么关键字去google 啊?”! 所以,阅读基础书籍的重点,就是让自己能够掌握住那些“ keyword ”啰!加油!

3,实作再实作

编程类的东西,毫无疑问要多练习,不然看了也不知道怎么弄,而且要做笔记、复习,不然也会忘掉的。

4,发生了问题怎么办?

在自己的主机/网络数据库上查询How-To或FAQ——>百度

发生错误的时候,请先自行以屏幕前面的信息来进行 debug(除错)的动作,然后,如果是网络服务的问题时,请到/var/log/这个目录里头去查阅一下 log file(登录文件),这样可以几乎解决大部分的问题了!

养成一个做记录的习惯。尤其是发现问题的时候, 把错误信息和引发状况以及解决方法记录清楚,同时最后归类及定期整理。

作为一个使用者,人要迁就机器;做为一个开发者,要机器迁就人。

在Windows里面,设置不好设备,您可以骂它;在Linux里面,如果设置好设备了,您得要感激它﹗

5,学习的动力

无论作什么事情,对人类而言,两个重要的因素是造成我们学习的原动力:

成就感和兴趣

那么如何培养出兴趣与成就感呢?可能有几个方向可以提供给你参考:

(1)创建兴趣: Linux上面可以玩的东西真的太多了,你可以选择一个有趣的课题来深入的玩一玩!不论是Shell还是图形接口等等, 只要能够玩出兴趣,那么再怎么苦你都会不觉得喔!

(2)成就感: 成就感是怎么来的?说实在话,就是“被认同”来的!怎么被认同呢?写心得分享啊!当你写了心得分享,并且公告在 BBS 上面,自然有朋友会到你的网页去瞧一瞧,当大家觉得你的网页内容很棒的时候, 哈哈!你肯定会加油继续的分享下去而无法自拔的!那就是我啦...... ^_^!

(3)协助回答问题:另一个创造成就感与满足感的方法就是“助人为快乐之本!

(4)参与讨论: 参与大家的技术讨论一直是一件提升自己能力的快速道路!

对于未来的学习,这里建议大家要“眼光看远!”一般来说,公司行号会发生问题时, 他们绝不会只要求各位“单独解决一部主机的问题”而已,他们需要的是整体环境的总体解决“Total Solution”。 而我们目前学习的Linux其实仅是在一部主机上面进行各项设置而已, 还没有到达解决整体公司所有问题的状态。

有办法的话,多接触,不排斥任何学习的机会!都会带给自己很多的成长! 而且要谨记:“不同的环境下,解决问题的方法有很多种,只要行的通,就是好方法!

猜你喜欢

转载自blog.csdn.net/qq_22059611/article/details/82939714