鸟哥的Linux私房菜读书笔记:简单认识Linux

Linux是什么

首先我们知道这玩意是在计算机上运行的一组软件.

问题是这个软件是操作系统还是应用系统?并且Linux可以在哪些种类的计算机硬件上面运行呢?而Linux又源自于哪里?

为啥这玩意

不!!!

要!!!

钱??!!!

操作系统?应用程序?

在上面一篇文章中提到过整个计算机系统的概念,计算机主机就是由一堆硬件所组成的,为了有效率得控制这些硬件资源,于是就有了操作系统的产生了.操作系统除了有效率得控制这些硬件资源得分配, 并提供计算机运行所需要的功能(如网络功能)指歪,为了要提供程序设计师更容易开发软件的环境,所以操作系统也会提供一整组系统调用接口来给软件设计师来开发

所以我们可以得出结论,Linux就是一套操作系统

如下图所示,Linux就是核心与系统调用接口那两层.

至于应用程序到底算不算Linux呢?当然不算

我们可以 从图中看出核心和硬件之间的关系非常强烈

早期的Linux并不包含其他任何的应用程序,所以工程师在下载Linux并且完成安装后,只能按照固定的方式运行他的计算机,然后再根据他们自身的需求,在Linux上面安装他们所需要的软件.

要注意的是,不同的硬件,他们的功能函数也不相同

所以同一套操作系统是没有办法在不同的硬件平台上面运行的,举例来说,如果想要让x86上面的操作系统也能在Power CPU上运行时,就要将该操作系统进行修改才行,如果能够参考硬件的功能函数并根据此来修改操作系统程序码,那么经过修改过后的操作系统就可以在另外一个硬件平台上面运行了.

这个行为,我们通常称为软件移植

那么问题来了

Windows系统能否在MAC系统上面运行呢?

答案是不能

因为苹果当年是拜托了IBM(也就是Power CPU)来开发硬件,然后在此基础上发展自己的MAC系统,而Windows系统则是开发在x86架构上的操作系统之一

不过,在2006年以后,苹果计算机转而请Intel设计其硬件架构,亦即其硬件架构已经转为x86系统,所以在之后的苹果计算机如果使用x86架构时,它的硬件在某些程度上就叫而已安装Windows系统了

不过要想很多办法去处理那些硬件和系统的兼容性

那么问题又来了,Linux和Windows互相之间有什么区别吗?

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

不过Linux因为是开源的操作系统,所以他的程序码可以被修改成适合在各种机器上面运行的,也就是说,Linux是具有可移植性的

Linux提供了一个完整的操作系统当中最底层的硬件控制与资源管理的完整架构, 这个架构是沿袭Unix良好的传统来的, 所以相当的稳定而功能强大! 此外, 由于这个优良的架构可以在目前的个人计算机( x86系统) 上面跑, 所以很多的软件开发者渐渐的将他们的工作心血移转到这个架构上面, 所以 Linux 操作系统也有很多的应用软件

虽然Linux仅仅是其核心与核心提供的工具,不过由于核心、 核心工具与这些软件开发者提供的软件的整合, 使得Linux成为一个更完整的、 功能强大的操作系统

Linux的历史

早在Linux出现之前的二十年( 大约在1970 年代) , 就有一个相当稳定而成熟的操作系统存在了! 那就是Linux的老大哥“Unix”

众所皆知的, Linux的核心是由Linus Torvalds在1991年的时候给他开发出来的, 并且丢到网络上提供大家下载, 后来大家觉得这个小东西( Linux Kernel) 相当的小而精巧, 所以慢慢的就有相当多的朋友投入这个小东西的研究领域里面去了! 但是为什么这个小东西这么棒呢?又为什么大家都可以免费的下载这个东西呢

早期的计算机并不像现在的个人计算机一样普遍, 他可不是一般人碰的起的呢~ 除非是军事或者是高科技用途, 或者是学术单位的前瞻性研究, 否则真的很难接触到。 非但如此, 早期的计算机架构还很难使用, 除了运算速度并不快之外, 操作接口也很困扰的! 因为那个时候的输入设备只有读卡机、 输出设备只有打印机, 使用者也无法与操作系统互动( 批次型操作系统) 。

在那个时候, 写程序是件很可怜的事情, 因为程序设计者, 必须要将程序相关的信息在读卡纸上面打洞, 然后再将读卡纸插入读卡机来将信息读入主机中运算。 光是这样就很麻烦了,如果程序有个小地方写错, 哈哈! 光是重新打卡就很惨, 加上主机少, 使用者众多, 光是等待, 就耗去很多的时间了

在那之后, 由于硬件与操作系统的改良, 使得后来可以使用键盘来进行信息的输入。 不过,在一间学校里面, 主机毕竟可能只有一部, 如果多人等待使用, 那怎么办? 大家还是得要等待啊! 好在1960年代初期麻省理工学院( MIT) 发展了所谓的: “相容分时系统( CompatibleTime-Sharing System, CTSS) ”, 它可以让大型主机通过提供数个终端机( terminal) 以连线进入主机, 来利用主机的资源进行运算工作。 架构有点像这样

这个相容分时系统可以说是近代操作系统的始祖呢! 他可以让多个使用者在某一段时间

内分别使用CPU的资源, 感觉上你会觉得大家是同时使用该主机的资源! 事实上, 是CPU在每个使用者的工作之间进行切换, 在当时, 这可是个划时代的技术!

如此一来, 无论主机在哪里, 只要在终端机前面进行输入输出的作业, 就可利用主机提供的功能了。 不过, 需要注意的是, 此时终端机只具有输入/输出的功能, 本身完全不具任何运算或者软件安装的能力。 而且, 比较先进的主机大概也只能提供30个不到的终端机而已。

为了更加强化大型主机的功能, 以让主机的资源可以提供更多使用者来利用, 所以在1965年前后, 由贝尔实验室( Bell) 、 麻省理工学院( MIT) 及奇异公司( GE, 或称为通用电器) 共同发起了Multics的计划, Multics计划的目的是想要让大型主机可以达成提供300个以上的终端机连线使用的目标。 不过, 到了1969年前后, 计划进度落后, 资金也短缺, 所以该计划虽然继续在研究, 但贝尔实验室还是退出了该计划的研究工作。 ( Multics有复杂、 多数的意思存在。 )

1973年: Unix的正式诞生, Ritchie等人以C语言写出第一个正式Unix核心

由于Thompson写的那个操作系统实在太好用了, 所以在贝尔实验室内部广为流传, 并且数度经过改版

但是因为Unics本来是以组合语言写成的, 组合语言具有专一性, 加上当时的计算机机器架构都不太相同, 所以每次要安装到不同的机器都得要重新编写组合语言, 不方便!

后来Thompson与Ritchie合作想将Unics改以高阶程序语言来撰写。 当时现成的高阶程序语言有B语言。 但是由B语言所编译出来的核心性能不是很好。 后来Dennis Ritchie 将B语言重新改写成C语言, 再以C语言重新改写与编译Unics的核心, 最后正名与发行出Unix的正式版本!

早期的计算机性能没有现在这么好, 所以压榨计算机性能就成了工程师的一项癖好! 托瓦兹本人早期是玩组合语言的, 组合语言对于硬件有很密切的关系, 托瓦兹自己也说: “我始终是个性能癖”^^。 为了彻底发挥386的性能, 于是托瓦兹花了不少时间在测试386机器上! 他的重要测试就是在测试386的多功性能。 首先, 他写了三个小程序, 一个程序会持续输出A、 一个会持续输出B, 最后一个会将两个程序进行切换。 他将三个程序同时执行, 结果, 他看到屏幕上很顺利的一直出现ABABAB.....

要达到多工( multitasking) 的环境, 除了硬件( 主要是CPU) 需要能够具有多任务的特性外, 操作系统也需要支持这个功能喔! 一些不具有多任务特性的操作系统, 想要同时执行两个程序是不可能的。 除非先被执行的程序执行完毕, 否则, 后面的程序不可能被主动执行。

至于多任务的操作系统中, 每个程序被执行时, 都会有一个最大CPU使用时间, 若该工作运行的时间超过这个CPU使用时间时, 该工作就会先被丢出CPU的运行中, 而再度的进入核心工作调度中等待下一次被CPU取用来运行

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/

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

举例来说, Fedora兜出来的软件套件经过一段时间的维护后, 等到该软件稳定到不容易发生错误后, Red Hat才将该软件放到他们最新的释出版本中。 所以, Fedora的软件比较经常改版, Red Hat的软件就较少更版。

自从 iphone4 在 2010 年面世之后, 整个手机市场开始大搬风! 智能手机市场将原本商务用的PDA 市场整个吃掉! 然后原本在 2010 年前后很热门的小笔记本也被平板电脑打趴了! 在这个潮流下, Google 成立了开放手机联盟 ( Open Handset Alliance) , 并且推出 Android 手机专用操作系统! 而 Android 其实就是 Linux 核心的一支, 只是专门用来针对手机/平板这类的 ARM 机器所设计的

2015 最新的 Android 系统 5.x 使用的就是 Linux kernel 3.4.x 版本, 另外, 调查中也显示, 从2013 年之后, Android 系统已经是全球最多人使用的手机系统。 也就是说, 现在手机市场的主流操作系统是 Linux 分支出来的 Android

我们谈到过硬件系统, 而要让硬件系统顺利的运行就得要撰写合适的操作系统

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

云端应用

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

Linux基础

在服务器的应用上, 文件的安全性、 人员帐号的管理、 软件的安装/修改/设置、 登录文件的分析以及自动化工作调度与程序的撰写等等, 都是需要学习的, 而且这些东西都还未涉及服务器软件

不论学什么系统,从头学都是很重要的

比如一开始我们会遇到的很多问题

为甚麽我的使用者个人网页显示我没有权限进入?

为甚麽我下达一个指令的时候,系统告诉我没有这个指令?

此外, 网络基础与安全也很重要, 例如TCP/IP的基础知识 网络路由的相关概念等等

  1. 计算机概论与硬件相关知识: 因为既然想要走Linux这门路, 信息相关的基础技能也不能没有啊! 所以先理解一下基础的硬件知识, 不用一定要全懂啦! 又不是真的要你去组计算机~_, 但是至少要“听过、 有概念”即可;

  1. 先从Linux的安装与指令学起: 没有Linux怎么学习Linux呢? 所以好好的安装起一套你需要的Linux吧! 虽然说Linux distributions很多, 不过基本上架构都是大同小异的, 差别在于接口的友好度与软件的选择不同罢了! 选择一套你喜欢的就好了, 倒是没有哪一套特别好说~

  1. Linux操作系统的基础技能: 这些包含了“使用者、 群组的概念”、 “权限的观念”, “程序的定义”等等, 尤其是权限的概念, 由于不同的权限设置会妨碍你的使用者的便利性, 但是太过于便利又会导致入侵的可能! 所以这里需要了解一下你的系统呦!

  1. 务必学会vi文书编辑器: Linux的文书编辑器多到会让你数到生气! 不过, vi却是强烈建议要先学习的! 这是因为vi会被很多软件所调用, 加上所有的Unix like系统上面都有vi,所以你一定要学会才好!

  1. Shell与Shell Script的学习: 其实鸟哥上面一直谈到的“命令行”说穿了就是一个名为shell的软件啦! 既然要玩命令行, 当然就是要会使用shell的意思。 但是shell上面的数据太多了, 包括“正则表达式”、 “管线命令”与“数据流重导向”等等, 真的需要了解比较好呦! 此外, 为了帮助你未来的管理服务器的便利性, shell scripts也是挺重要的

  1. 一定要会软件管理员: 因为玩Linux常常会面临得要自己安装驱动程序或者是安装额外软件的时候, 尤其是嵌入式设备或者是学术研究单位等。 这个时候
    Tarball/RPM/DPKG/YUM/APT等软件管理员的安装方式的了解, 对你来说就重要到不行了!

  1. 网络基础的创建: 如果上面你都通过了, 那么网络的基础就是下一阶段要接触的咚咚,这部份包含了“IP概念”“路由概念”等等;

  1. 如果连网络基础都通过了, 那么网站的架设对你来说, 简直就是“太简单啦

一般而言, Linux在下达指令的过程当中, 或者是log file里头就可以自己查得错误信息了, 举个例子来说, 当你下达:

[root@centos ~]# ls -l /vbird

由于系统并没有 /vbird 这个目录, 所以会在屏幕前面显示:

ls: /vbird: No such file or directory

这个错误讯息够明确了吧! 系统很完整的告诉您“查无该数据”! 呵呵! 所以啰, 请注意, 发生错误的时候, 请先自行以屏幕前面的信息来进行 debug( 除错) 的动作, 然后, 如果是网络服务的问题时, 请到/var/log/这个目录里头去查阅一下 log file( 登录文件) , 这样可以几乎解决大部分的问题了!

Netman大大给的建议:

此外, Netman 兄提供的一些学习的基本方针, 提供给大家参考:

  • 在Windows里面, 程序有问题时, 如果可能的话先将所有其它程序保存并结束, 然后尝试按救命三键 ( Ctrl+Alt+Delete) , 将有问题的程序( 不要选错了程序哦) “结束工作”,看看能不能恢复系统。 不要动不动就直接关机或reset。

  • 有系统地设计文件目录, 不要随便到处保存盘案以至以后不知道放哪里了, 或找到文件也不知道为何物。

  • 养成一个做记录的习惯。 尤其是发现问题的时候, 把错误信息和引发状况以及解决方法记录清楚, 同时最后归类及定期整理。 别以为您还年轻, 等你再弄多几年计算机了, 您将会非常庆幸您有此一习惯。

  • 如果看在网络上看到任何好文章, 可以为自己留一份copy, 同时定好题目, 归类存盘。( 鸟哥需要注意知识产权! )

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

  • 学写 script 的确没设置 server 那么好玩, 不过以我自己的感觉是: 关键是会得“偷”, 偷了会得改, 改了会得变, 变则通矣。

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

重点

  • 操作系统( Operation System) 主要在管理与驱动硬件, 因此必须要能够管理内存、 管理设备、 负责行程管理以及系统调用等等。 因此, 只要能够让硬件准备妥当( Ready)的情况, 就是一个阳春的操作系统了。

  • Unix的前身是由贝尔实验室( Bell lab.) 的Ken Thompson利用组合语言写成的, 后来在1971-1973年间由Dennis Ritchie以C程序语言进行改写, 才称为Unix。

  • 1977年由Bill Joy释出BSD ( Berkeley Software Distribution) , 这些称为Unix-like的操作系统。

  • 1984年由Andrew Tanenbaum开始制作Minix操作系统, 该系统可以提供源代码以及软件;

  • 1984年由Richard Stallman提倡GNU计划, 倡导自由软件( Free software) , 强调其软件可以“自由的取得、 复制、 修改与再发行”, 并规范出GPL授权模式, 任何GPL( General Public License) 软件均不可单纯仅贩卖其软件, 也不可修改软件授权。

  • 1991年由芬兰人Linus Torvalds开发出Linux操作系统。 简而言之, Linux成功的地方主要在于: Minix( Unix) , GNU, Internet, POSIX 及虚拟团队的产生。

  • 符合 Open source 理念的授权相当多, 比较知名的如 Apache / BSD / GPL / MIT 等。

  • Linux本身就是个最阳春的操作系统, 其开发网站设立在http://www.kernel.org, 我们亦称Linux操作系统最底层的数据为“核心( Kernel) ”。

  • 从 Linux kernel 3.0 开始, 已经舍弃奇数、 偶数的核心版本规划, 新的规划使用主线版本( MainLine) 为依据, 并提供长期支持版本 ( longterm) 来加强某些功能的持续维护。

  • Linux distributions的组成含有: “Linux Kernel + Free Software +
    Documentations( Tools) + 可完整安装的程序”所制成的一套完整的系统。

  • 常见的 Linux distributions 分类有“商业、 社群”分类法, 或“RPM、 DPKG”分类法

  • 学习 Linux 最好从头由基础开始学习, 找到一本适合自己的书籍, 加强实作才能学会

猜你喜欢

转载自blog.csdn.net/qq_63511424/article/details/128895374
今日推荐