《鸟哥的私房菜基础篇》第四版学习笔记——第1章Linux是什么与如何学习

一、Liux是什么??

1.是操作系统or应用程序??

(1) Linux 就是一套操作系统!Linux 就是核心与系统呼叫接口那两层。
《鸟哥的私房菜基础篇》第四版学习笔记——第1章Linux是什么与如何学习
(2)软件移植定义的由来
由于不同的硬件他的功能函数并不相同,例如 IBM 的 Power CPU 与 Intel 的 x86 架构就是不一样! 所以同一套操作系统是无法在不同的硬件平台上面运作的!我们知道硬件是由『核心』来控制的,而每种操作系统都有他自己的核心
举例来说,如果你想要让 x86 上面跑的那套操作系统也能够在 Power CPU 上运作时,就得要将该操作系统进行修改才行。如果能够参考硬件的功能函数并据以修改你的操作系统程序代码, 那经过改版后的操作系统就能够在另一个硬件平台上面运作了。 这个动作我们通常就称为『软件移植』了

(3)Linux的好处:
Linux 提供了一个完整的操作系统当中最底层的硬件控制与资源管理的完整架构, 这个架构是沿袭Unix 良好的传统来的,所以相当的稳定而功能强大!

2.Linux之前,Unix的历史

(1)经过不断地发展,Unix可以移植的可能性的出发点在于:
Unix 是以高阶的 C语言写成的, 理论上是具有可移植性的!亦即只要取得 Unix 的原始码,并且针对大型主机的特性加以修订原有的原始码(Source Code), 就可能将 Unix 移植到另一部不同的主机上头了。

(2)1984 年,史托曼开始 GNU 计划, 这个计划的目的是:建立一个*、开放的 Unix 操作系统(Free Unix)。
因此他便开始撰写 C 语言的编译程序,那就是现在相当有名的GNU C Compiler(gcc)!
此外,他还撰写了更多可以被呼叫的 C函式库(GNU C library),以及可以被使用来操作操作系统的基本接口 BASH shell!

(3)有鉴于图形用户接口(Graphical User Interface, GUI) 的需求日益加重,在 1984 年由 MIT 与其他第三方首次发表了 X Window System。
为什么称图形用户接口为 X 呢?
因为由英文单字来看, Window 的 W 接的就是 X 啦!意指 Window 的下一版就是了! 需注意的是, X Window 并不是 X Windows 喔

3.关于 GNU 计划、*软件与开放原始码

(1)*软件的版权 GNU GPL
而为了避免自己的开发出来的 Open source *软件被拿去做成专利软件, 于是史托曼同时将 GNU与 FSF 发展出来的软件,都挂上 GPL 的版权宣告。

(2)为什么要称为 GNU 呢?
其实 GNU 是 GNU’s Not Unix 的缩写,意思是说, GNU 并不是 Unix 啊!那么 GNU 又是什么呢? 就是 GNU’s Not Unix 嘛!…如果你写过程序就会知道,这个 GNU = GNU’s Not
Unix 可是无穷循环啊!忙碌

(3)*软件与商业行为
很多人还是有疑问,目前不是有很多 Linux 开发商吗?为何他们可以贩卖 Linux 这个 GPL 授权的软件? 原因很简单,因为他们大多都是贩卖『售后服务!』
服务包括: 提供你数年不等的咨询、售后服务、软件升级与其他协力工作等等的附加价值!

(3)开放原始码
并非软件可以被读取原始码就可以被称为开源软件喔!该软件的授权必须要符合底下的基本需求,才可以算是 open source 的软件。
《鸟哥的私房菜基础篇》第四版学习笔记——第1章Linux是什么与如何学习

(4)开源软件授权
Open source 这个名词只是一个指引,而实际上并不是先有 open source 才有相关的授权。早在 open source 出来之前就有些开源软件的授权存在了 (例如 GPL 啊! )!

那常见的开放原始码授权有哪些呢?
《鸟哥的私房菜基础篇》第四版学习笔记——第1章Linux是什么与如何学习
说明:
(a) 如果你的软件未来你允许它用于商业活动中, 可以考虑 BSD 之类的授权。
(b)如果你的软件希望少一些商业色彩, GPLv2 大概是不二选择啰!

(5)专属软件/专利软件 (close source)
相对于 Open Source 的软件会释出原始码, Close source 的程序则仅推出可执行的二进制程序(binary program)而已。 这种软件的优点是有专人维护,你不需要去更动他;缺点则是灵活度大打折扣,用户无法变更该程序成为自己想要的样式! 此外,若有木马程序或者安全漏洞,将会花上相当长的一段时间来除错!这也是所谓专利软件(copyright)常见的软件出售方式。

二、Torvalds 的 Linux 发展

1.与 Minix 之间

(1)Minix 这个操作系统是有附上原始码的, 所以托瓦兹也经由这个原始码学习到了很多的核心程序设计的设计概念喔。

2.对 386 硬件的多任务测试

(1)CPU 一个时间点内仅能处理一个程序,那怎么办?
这个时候如果具有多任务能力的 CPU就会在不同的程序间切换~ 还记得前一章谈到的 CPU 频率吧?假设 CPU 频率为 1GHz 的话,那表示 CPU 一秒钟可以进行 109 次工作。 假设 CPU 对每个程序都只进行 1000 次运作周期,然后就得要切换到下个程序的话,那么 CPU 一秒钟就能够切换 106 次呢! (当然啦,切换工作这件事情也会花去一些 CPU 时间,不过这里暂不讨论)。
这么快的处理速度下,你会发现, 两个程序感觉上几乎是同步在进行啦!

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

3.初次释出 Linux 0.02

(1)撰写程序需要什么呢?
首先需要的是能够进行工作的环境,再来则是可以将原始码编译成为可执行文件的编译程序。

(2)如何让自己的 Linux 能够兼容于 Unix 系统?
一种是修改软件,让该软件可以在 Linux 上跑, 另一种则是修改 Linux,让 Linux 符
合软件能够运作的规范!由于 Linux希望能够兼容于 Unix,于是托瓦兹选择了第二个作法『修改 Linux』!
为了让所有的软件都可以在 Linux 上执行,于是托瓦兹开始参考标准的 POSIX 规范。
(POSIX 是可携式操作系统接口(Portable Operating System Interface)的缩写,重点在规范核心与应用程序之间的接口)

4.Linux 的发展:虚拟团队的产生

(1)广大黑客志工加入阶段:模块化开发
将某些功能独立出于核心外,在需要的时候才加载到核心中。如此一来, 如果有新的硬件驱动程序或者其他协议的程序代码进来时,就可以模块化, 大大的增加了 Linux 核心的可维护能力!

(2)模块化开发的好处:
核心是一组程序,如果这组程序每次加入新的功能都得要重新编译与改版的话会变成如何? 想象一下,如果你只是换了显示适配器就得要重新安装新的 Windows 操作系统,会不会傻眼? 模块化之后,原本的核心程序不需要更动,你可以直接将他想成是『驱动程序』即可!

(3)核心功能细部分工发展阶段
Linux 由于托瓦兹是针对 386 写的,跟 386 硬件的相关性很强,所以, 早期的 Linux 确实是不具有移植性的。不过,大家知道 Open source 的好处就是, 可以修改程序代码去适合作业的环境。因此,在1994 年以后, Linux 便被开发到很多的硬件上面去了! 目前除了 x86 之外, IBM、 HP 等等公司出的硬件也都有被 Linux 所支持呢!甚至于小型单板计算机 (树莓派/香蕉派等) 与手持装置 (智能型手机、平板计算机) 的 ARM 架构系统,大多也是使用 Linux 核心喔!

5.Linux 的核心版本

(1)奇数、偶数版本分类
在 2.6.x 版本以前,托瓦兹将核心的发展趋势分为两股。
这种奇数、偶数的编号格式在 3.0 推出之后就失效了

(a)主、次版本为奇数:发展中版本(development)
如 2.5.xx,这种核心版本主要用在测试与发展新功能,所以通常这种版本仅有核心开发工程师会使用。 如果有新增的核心程序代码,会加到这种版本当中,等到众多工程师测试没问题后,才加入下一版的稳定核心中;
(b)主、次版本为偶数:稳定版本(stable)
如 2.6.xx,等到核心功能发展成熟后会加到这类的版本中,主要用在一般家庭计算机以及企业版本中。 重点在于提供使用者一个相对稳定的 Linux 作业环境平台。

至于释出版本release则是在主、次版本架构不变的情况下,新增的功能累积到一定的程度后所新释出的核心版本。

(2)主线版本、长期维护版本(longterm version)
从 3.0 版开始,核心主要依据主线版本 (MainLine) 来开发,开发完毕后会往下一个主线版本进行。

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

(3)Linux 核心版本与 Linux 发布商版本
『我的Linux 是 7.x 版,请问…』之类的留言, 这是不对的提问方式。
因为所谓的 Linux 版本指的应该是核心版本, 而目前最新的核心版本应该是4.0.0(2015/04) 才对,并不会有 7.x 的版本出现的。

常用的 Linux 系统则应该说明为 distribution 才对!
因此,如果以 CentOS 这个 distribution 来说, 妳应该说:『我用的 Linux 是 CentOS 这个 distribution,版本为 7.x 版,请问…』才对喔

6.Linux distributions

(1)可完全安装的 Linux 发布套件
为了让使用者能够接触到 Linux,于是很多的商业公司或非营利团体, 就将 Linux Kernel(含 tools)与
可运行的软件整合起来,加上自己具有创意的工具程序, 这个工具程序可以让用户以光盘/DVD 或者透过网络直接安装/管理 Linux 系统。 这个 『Kernel + Softwares + Tools + 可完全安装程序』 的咚咚,我们称之为 Linux distribution, 一般中文翻译成可完全安装套件,或者 Linux 发布商套件等。
《鸟哥的私房菜基础篇》第四版学习笔记——第1章Linux是什么与如何学习

(2)各大 Linux Distributions 的主要异同:支持标准!

(a)为了让所有的 Linux distributions 开发不致于差异太大,且让这些开发商在开发的时候有所依据,还有 Linux Standard Base (LSB)等标准来规范开发者,以及目录架构的 File system HierarchyStandard (FHS)标准规范! 唯一差别的,可能就是该开发者自家所开发出来的管理工具,以及套件管理的模式吧!
所以说,基本上,每个 Linux distributions 除了架构的严谨度与选择的套件内容外, 其实差异并不太大啦! _ 。大家可以选择自己喜好的 distribution 来安装即可。

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

《鸟哥的私房菜基础篇》第四版学习笔记——第1章Linux是什么与如何学习
说明:
(a)如果是要装在个人计算机上面做为桌面计算机用的,建议使用社群版, 包括 Fedora, Ubuntu, OpenSuSE 等等。
(b)如果是用在服务器上面的,建议使用商业版本,包括 Red Hat, SuSE 等。 这是因为社群版通常开发者会加入最新的软件,这些软件可能会有一些 bug存在。至于商业版则是经过一段时间的磨合后, 才将稳定的软件放进去。

(3)选择适合你的 Linux distribution
那我到底应该要选择哪一个 distributions?
目前鸟哥的建议是,先学习以 RPM 套件管理为主的 RHEL/Fedora/SuSE/CentOS 等*使用者较多的版本, 这样一来,发生问题时,可以提供解决的管道比较多。
总之, 版本很多,但是各版本差异其实不大,建议你一定要先选定一个版本后, 先彻头彻尾的了解他,那再继续玩其他的版本时,就可以很快的进入状况。

(4)不过,如果依据计算机主机的用途来分的话,在*鸟哥会这样建议:
《鸟哥的私房菜基础篇》第四版学习笔记——第1章Linux是什么与如何学习

三、Linux 当前应用的角色

(1) Linux kernel 实在是非常的小巧精致,可以在很多强调省电以及较低硬件资源的环境底下执行;
(2)这几年很流行的云端运算机制中, 让 Linux 似乎又更有着力点啰!

1.企业环境的利用

(1)网络服务器: 这是 Linux 当前最热门的应用了!
很多优秀的软件都在 Linux 上面发展, 且这些在 Linux 上面的服务器软件几乎都是*软件!因此,做为一部网络服务器,例如 WWW,Mail Server, File Server 等等, Linux 绝对是上上之选!由于 Linux server的需求强烈,因此许多硬件厂商推出产品时, 还得要特别说明有支持的 Linux distributions 呢!
目前 (2015) 支持度比较广泛的依旧是 Red Hat 以及SuSU 两个大厂喔!

(2)关键任务的应用(金融数据库、大型企业网管环境):所谓的关键任务就是该企业最重要的业务啦! 举例来说,金融业最重要的就是那些投资者、帐户的数据了,这些数据大多使用数据库系统来作为存取接口, 这些数据很重要吧!很多金融业将这么重要的任务交给了 Linux 了!你说 Linux厉不厉害啊?

(3)学术机构的高效能运算任务:
据美国环保署内部人员的测试,发现 Linux 平台的整体硬件费用不但比较便宜(x86 系统嘛! )而且速度还比较快呢!
另外,为了加强整体系统的效能,丛集计算机系统(Cluster)的平行运算能力在近年来一直被拿出来讨论。 所谓的平行运算指的是『将原本的工作分成多份,然后交给多部主机去运算,最终再将结果收集起来』的一种方式。 由于透过高速网络使用到多部主机,将能够让原本需要很长运算时间的工作,大幅的降低等待的时间! 例如*气象局的气象预报就很需要这样的系统来帮忙!而 Linux操作系统则是这种架构下相当重要的一个环境平台呢!

2.个人环境的使用

(1)桌面计算机:一般我们称之为 Desktop 的系统。
为了要强化桌面计算机的使用率, Linux 与 X Window System(就是窗口软件) 结合了!
X WindowSystem 仅只是 Linux 上面的一套软件, 而不是核心喔!所以即使 X Window 挂了,对 Linux 也可能不会有直接的影响呢!

(2)手持系统(PDA、手机):
Android 其实就是 Linux 核心的一支,只是专门用来针对手机/平板这类的 ARM 机器所设计的;2015 最新的 Android 系统 5.x 使用的就是 Linux kernel 3.4.x 版本;现在手机市场的主流操作系统是 Linux 分支出来的 Android 喔!
eg: 如果你的手机是 Android 系统的话,请拿出来,然后点选『设定』 --> 『关于(手机)』
–> 『软件信息』,你就会看到 Android 版本,然后又点选『更多』, 这时你就会看到类似 3.4.10-xxx 的代号,那是什么?查一查上头提到的 Linux 版本,就知道那是啥鬼东西啰!

(3)嵌入式系统:
操作系统是直接嵌入于产品当中的,理论上你不应该会更动到这个操作系统, 所以就称为嵌入式系统啦!
要玩嵌入式系统必须要很熟悉 Linux Kernel 与驱动程序的结合才行!

(4)云端运用:
自从个人计算机的 CPU 内建的核心数越来越多,单一主机的能力太过强大,导致硬件资源经常闲置,这个现象让虚拟化技术得以快速发展! 而由于硬件资源大量集中化,然后行动办公室之类的需求越来越多,因此让办公数据集中于云程序中,让企业员工仅须透过端点设备联机到云去取用运算资源

(a)云程序:
许多公司都有将资源集中管理的打算,阿里巴巴机房里面有多少计算机主机差不多有 2 万部主机,这么多的设备底层使用的就是 Linux 操作系统来统一管理。

除了公司自己内部的私有云之外,许多大型因特网供货商 (ISP) 也提供了所谓的公有云来让企业用户或个人用户来使用 ISP 的虚拟化产品。 如果公司内部缺乏专业管理维护人才,很有可能就将自家所需要的关键应用如 Web、 Mail、系统开发环境等操作系统交由 ISP 代管, 自家公司仅须远程登录该系统进行网站内容维护或程序开发而已。那这些虚拟化后的系统,也经常是 Linux啊!因为跟上头企业环境利用提到的功能是相同的!

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

补充:虚拟化的定义
在一部实体主机上面仿真出多个逻辑上完全独立的硬件,这个假的虚拟出来的硬件主机,可以用来安装一部逻辑上完全独立的操作系统! 因此,透过虚拟化技术,你可以将一部实体主机安装多个同时运作的操作系统 (非多重引导),以达到将硬件资源完整利用的效果。

(2)端设备
既然运算资源都集中在云里面了,那我需要联机到云程序的设备应该可以越来越轻量吧。所以,端点设备理论上会越来越轻量化的!

四、Linux 该如何学习

(1)但是如果想要更深入 Linux 的话,那么指令列模式才是不二的学习方式!

(2)以服务器或者是嵌入式系统的应用来说, X Window 是非必备的软件。更多的时候甚至大家会希望你不要启动 X window 在服务器主机上,这是因为 X Window 通常会吃掉很多系统资源的缘故!
对于远程登陆情况的话,使用文字接口会较为单纯, 使用图形接口则非常麻烦啦!所以啦!这时候就得要学学文字接口来操作 Linux 比较好啦!

另外,在服务器的应用上, 文件的安全性、人员账号的管理、软件的安装/修改/设定、 登录文件的分析以及自动化工作排程与程序的撰写等等,都是需要学习的, 而且这些东西都还未涉及服务器软件呢!对吧!这些东西真的很重要。

1.从头学习 Linux 基础

(1)鸟哥希望大家能够更了解 Linux,好让他可以为你做更多的事情喔! 而且这些基础知识是学习更深入的技巧的必备条件呀!因此建议:
《鸟哥的私房菜基础篇》第四版学习笔记——第1章Linux是什么与如何学习
《鸟哥的私房菜基础篇》第四版学习笔记——第1章Linux是什么与如何学习

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

(1)阅读基础书籍的重点,就是让自己能够掌握住那些『keyword 』啰!加油!

3.实作再实作

(1)你必须要『不断的重复练习』才会将一件事情记得比较熟!

4.发生问题怎么处理啊?建议流程是这样…

(1)在自己的主机/网络数据库上查询 How-To 或 FAQ
以下列出一些有用的 FAQ 与 How-To网站给您参考一下:
o Linux 自己的文件数据: /usr/share/doc (在你的 Linux 系统中)
o CLDP 中文文件计划 http://www.linux.org.tw/CLDP/
o The Linux Documentation Project: http://www.tldp.org/

o Google: http://www.google.com.tw
o 鸟哥网站: http://linux.vbird.org/Searching.php

(2) 注意讯息输出,自行解决疑难杂症:
Linux 在下达指令的过程当中,或者是 log file 里头就可以自己查得错误信息了。
eg:发生错误的时候,请先自行以屏幕前面的信息来进行 debug(除错)的动作;
《鸟哥的私房菜基础篇》第四版学习笔记——第1章Linux是什么与如何学习

然后,如果是网络服务的问题时,请到/var/log/这个目录里头去查阅一下 log file(登录档),这样可以几乎解决大部分的问题了!

(3)搜寻过后,注意网络礼节,讨论区大胆的发言吧:

(4)还有一些建议:
《鸟哥的私房菜基础篇》第四版学习笔记——第1章Linux是什么与如何学习

5.鸟哥的建议(重点在 solution 的学习)

(1)无论作什么事情,对人类而言,两个重要的因素是造成我们学习的原动力:
(a)成就感
(b)兴趣

因此,鸟哥个人认为, 学习 Linux 如果玩不出兴趣, 他对你也不是什么重要的生财工具,那么就不要再玩下去了! 因为很累人。

(2)那么如何培养出兴趣与成就感呢?可能有几个方向可以提供给你参考:
《鸟哥的私房菜基础篇》第四版学习笔记——第1章Linux是什么与如何学习
《鸟哥的私房菜基础篇》第四版学习笔记——第1章Linux是什么与如何学习

(3)我们目前学习的 Linux 其实仅是在一部主机上面进行各项设定而已, 还没有到达解决整体公司所有问题的状态。当然啦,得要先学会 Linux 相关技巧后, 才有办法将这些技巧用之于其他的 solution 上面!

(4)『不同的环境下,解决问题的方法有很多种,只要行的通,就是好方法!』

五、总结

《鸟哥的私房菜基础篇》第四版学习笔记——第1章Linux是什么与如何学习
《鸟哥的私房菜基础篇》第四版学习笔记——第1章Linux是什么与如何学习

六、常见问题与答案(很经典的常见问题)

《鸟哥的私房菜基础篇》第四版学习笔记——第1章Linux是什么与如何学习
《鸟哥的私房菜基础篇》第四版学习笔记——第1章Linux是什么与如何学习
《鸟哥的私房菜基础篇》第四版学习笔记——第1章Linux是什么与如何学习