1 简介

1.1 操作系统概述

  • 计算机是一台机器,它按照用户的要求接收信息、存储数据、处理数据,然后再将处理结果输出(文字、图片、音频、视频等)。计算机由硬件和软件组成
    • 硬件是计算机赖以工作的实体,包括显示器、键盘、鼠标、硬盘、CPU、主板等
    • 软件会按照用户的要求协调整台计算机的工作,比如 Windows、Linux、Mac OS、Android 等操作系统,以及 Office、QQ、迅雷、微信等应用程序

1.1.1 操作系统

  • 操作系统(Operating System,OS)是软件的一部分,是硬件基础上的第一层软件,是硬件和其它软件沟通的桥梁(或者说接口、中间人、中介等)
  • 操作系统会控制其他程序运行,管理系统资源,提供最基本的计算功能。如管理及配置内存、决定系统资源供需的优先次序等,同时还提供一些基本的服务程序,例如

    • 文件系统:提供计算机存储信息的结构,信息存储在文件中,文件主要存储在计算机的内部硬盘里,在目录的分层结构中组织文件。文件系统为操作系统提供了组织管理数据的方式
    • 设备驱动程序:提供连接计算机的每个硬件设备的接口,设备驱动器使程序能够写入设备,而不需要了解执行每个硬件的细节
    • 用户接口:操作系统需要为用户提供一种运行程序和访问文件系统的方法。如常用的 Windows 图形界面,可以理解为一种用户与操作系统交互的方式;智能手机的 Android 或 iOS 系统,也是一种操作系统的交互方式
    • 系统服务程序:当计算机启动时,会自启动许多系统服务程序,执行安装文件系统、启动网络服务、运行预定任务等操作

    操作系统在计算机架构中的位置

  • 目前流行的服务器和 PC 端操作系统有 Linux、Windows、UNIX 等,手机操作系统有 Android、iOS、Windows Phone(简称 WP),嵌入式操作系统有 Windows CE、PalmOS、eCos、uClinux 等

1.2 UNIX vs Linux

  • 区别
    • UNIX 系统大多是与硬件配套的,即大多数 UNIX 系统如 AIX、HP-UX 等是无法安装在 x86 服务器和个人计算机上的,而 Linux 则可以运行在多种硬件平台上
    • UNIX 是商业软件,而 Linux 是开源软件,是免费、公开源代码
  • 联系
    • Linux 是一套免费使用和自由传播的类 Unix 操作系统,Unix 要早于 Linux,Linux 的初衷就是要替代 UNIX,并在功能和用户体验上进行优化
    • Linux 是一个基于 POSIX 和 UNIX 的多用户、多任务、支持多线程和多 CPU 的操作系统
    • Linux 能运行主要的 UNIX 工具软件、应用程序和网络协议。它支持 32 位和 64 位硬件
    • Linux 继承了 UNIX 以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统

1.2.1 UNIX/Linux 系统结构

  • UNIX/Linux 系统可以粗糙地抽象为 3 个层次,如图所示。底层是 UNIX/Linux 操作系统,即系统内核(Kernel);中间层是 Shell 层,即命令解释层;高层则是应用层

UNIX/Linux 系统结构

  • 内核层:UNIX/Linux 系统的核心和基础,它直接附着在硬件平台之上,控制和管理系统内各种资源(硬件资源和软件资源),有效地组织进程的运行,从而扩展硬件的功能,提高资源的利用效率,为用户提供方便、高效、安全、可靠的应用环境
  • Shell 层:与用户直接交互的界面。用户可以在提示符下输入命令行,由 Shell 解释执行并输出相应结果或者有关信息,所以也把 Shell 称作命令解释器,利用系统提供的丰富命令可以快捷而简便地完成许多工作
  • 应用层:提供基于 X Window 协议的图形环境。X Window 协议定义了一个系统所必须具备的功能(就如同 TCP/IP 是一个协议,定义软件所应具备的功能),系统能满足此协议及符合 X 协会其他的规范,便可称为 X Window

1.3 Linux 系统的优缺点

  • Linux 不可比拟的优势
    • 大量的可用软件及免费软件:比如 Apache、Samba、PHP、MySQL 等,构建成本低廉,是 Linux 被众多企业青睐的原因之一。当然,这和 Linux 出色的性能是分不开的,否则,节约成本就没有任何意义
    • 良好的可移植性及灵活注:几乎支持所有的 CPU 平台,使得它便于裁剪和定制。可以把 Linux 放在 U 盘、光盘等存储介质中,也可以在嵌入式领域广泛应用
    • 如果希望不进行安装就体验 Linux 系统,可在网上下载一个 Live DVD 版的 Linux 镜像,刻成光盘放入光驱或者用虚拟机软件直接载入镜像文件,设置 CMOS/BIOS 为光盘启动,系统就会自动载入光盘文件,启动进入 Linux 系统
    • 优良的稳定性和安全性:Linux 开放源代码,将所有代码放在网上,全世界的程序员都看得到,有什么缺陷和漏洞,很快就会被发现,从而成就了它的稳定性和安全注
    • 支持几乎所有的网络协议及开发语言:UNIX 系统是与 C 语言、TCP/IP 协议一同发展起来的,而 Linux 是 UNIX 的一种,C 语言又衍生出了现今主流的语言 PHP、Java、C++ 等,而网络协议都与 TCP/IP 有关。所以,Linux 对网络协议和开发语言的支持很好
  • Linux 的缺点:桌面应用还有待完善(Linux 在办公应用和游戏娱乐方面的软件相比 Windows 系统还很匮乏)、Linux 的标准统一还需要推广、开源软件的盈利模式与发展还有待考验等

1.4 Linux 的发行版

  • 从技术上来说,李纳斯•托瓦兹开发的 Linux 只是一个内核。内核指的是一个提供设备驱动、文件系统、进程管理、网络通信等功能的系统软件,内核并不是一套完整的操作系统,它只是操作系统的核心
  • Linux 的发行版:一些组织或厂商将 Linux 内核与各种软件和文档包做一个打包,并提供系统安装界面和系统配置、设定与管理工具
  • Linux 的各个发行版本使用的是同一个 Linux 内核,因此在内核层不存在什么兼容性问题,每个版本有不一样的感觉,只是在发行版本的最外层(由发行商整合开发的应用)才有所体现

Linux 发行版

  • Linux 的发行版本可以大体分为两类
    • 商业公司维护的发行版本,以著名的 Red Hat 为代表
    • 社区组织维护的发行版本,以 Debian 为代表
  • 知名的发行版
    • Ubuntu:基于知名的 Debian Linux 发展而来,界面友好,容易上手,对硬件的支持非常全面,是目前最适合做桌面系统的 Linux 发行版本,而且 Ubuntu 的所有发行版本都免费提供
    • Red Hat:公司的产品主要包括 RHEL(Red Hat Enterprise Linux,收费版本)和 CentOS(RHEL 的社区克隆版本,免费版本)、Fedora Core(由 Red Hat 桌面版发展而来,免费版本)
    • CentOS 是基于 Red Hat Enterprise Linux 源代码重新编译、去除 Red Hat 商标的产物,各种操作使用和付费版本没有区别,且完全免费。缺点是不向用户提供技术支持,也不负任何商业责任
    • SuSE Linux:可以非常方便地实现与 Windows 的交互,硬件检测非常优秀,拥有界面友好的安装过程、图形管理工具,对于终端用户和管理员来说使用非常方便
    • Gentoo Linux:所有 Linux 发行版本里安装最复杂的,到目前为止仍采用源码包编译安装操作系统。不过,它是安装完成后最便于管理的版本,也是在相同硬件环境下运行最快的版本。具有高度的自定制性(基于源代码的发行版)。尽管安装时可以选择预先编译好的软件包,但是大部分使用 Gentoo 的用户都选择自己手动编译,因此适合比较有 Linux 使用经验的用户使用

1.4.1 Linux 发行版及特点汇总

版本名称 网址 特点 软件包管理器
Debian Linux www.debian.org 开放的开发模式,且易于进行软件包升级 apt
Ubuntu www.ubuntu.com 优秀易用的桌面环境,基于 Debian 构建 apt
Fedora Core www.redhat.com 拥有数量庞人的用户,优秀的社区技术支持。并且有许多创新 up2date(rpm),yum (rpm)
CentOS www.centos.org CentOS 就是将商业的 Linux 操作系统 RHEL 进行源代码再编译后分发,并在 RHEL 的基础上修正了不少已知的漏洞 rpm
SuSE Linux www.suse.com 专业的操作系统,易用的 YaST 软件包管理系统 YaST(rpm),第三方 apt (rpm)软件库(repository)
Gentoo Linux www.gentoo.org 高度的可定制性,使用手册完整 portage

1.4.2 Linux 发行版本的选择

  • Linux 的发行版本众多,选择 Linux 发行版本的建议
    • 如果只是需要一个桌面系统,而且既不想使用盗版,又不想花大价钱购买商业软件,不想自己定制,也不想在系统上浪费太多时间,则可以选择 Ubuntu
    • 如果需要一个服务器系统,且已经厌烦了各种 Linux 的配置,只是想要一个比较稳定的服务器系统,那么建议选择 CentOS 或 RHEL
    • 如果需要使用数据库高级服务和电子邮件网络应用,则可以选择 SuSE
    • 如果想深入摸索一下 Linux 各个方面的知识,而且想非常灵活地定制自己的 Linux 系统,选择 Gentoo

1.5 Linux 应用领域

1.5.1 服务器

  • 通常服务器使用 LAMP(Linux + Apache + MySQL + PHP)或 LNMP(Linux + Nginx+ MySQL + PHP)组合
  • 服务器使用 Linux 而不使用 UNIX 或 Windows:使用 Linux 成本较低,而 UNIX 和 Windows 都是商业软件;而且 Linux 服务器非常高效和稳定

1.5.2 电影工业

  • Linux 作为开源软件,可以节省大量成本
  • Linux 具有商业软件不具备的功能定制化特点,各家电影厂商都可依据自己的制片需要铺设相关平台

1.5.3 嵌入式应用

  • 嵌入式系统是以应用为中心,以计算机技术为基础,并且软硬件可定制,适用于各种应用场合,对功能、可靠注、成本、体积、功耗有严格要求的专用计算机系统。它一般由嵌入式微处理器、外围硬件设备、嵌入式操作系统及用户的应用程序 4 部分组成,用于实现对其他设备的控制、监视或管理等
  • 安卓是基于 Linux 的开源系统,主要适用于便携设备,如智能手机和平板电脑等,是Google公司为移动终端打造的真正开放和完整的移动软件

1.6 开源软件

  • Linux 是一款开源软件,我们可以随意浏览和修改它的源代码
  • 开源软件就是把软件程序与源代码文件一起打包提供给用户,用户既可以不受限制地使用该软件的全部功能,也可以根据自己的需求修改源代码,甚至编制成衍生产品再次发布出去
  • 开源软件的优点

| 优点 | 说明 | | — | — | | 低风险 | 一旦封闭的源代码没有人来维护,你将进退维谷;而且相较于商业软件公司,开源社区很少存在倒闭的问题 | | 高品质 | 相较于闭源软件产品,开源项目通常是由开源社区来研发及维护的,参与编写、维护、测试的用户量众多,一般的 bug 还没有等爆发就已经被修补 | | 低成本 | 开源工作者都是在幕后默默且无偿地付出劳动成果,因此使用开源社区推动的软件项目可以节省大量的人力、物力和财力 | | 更透明 | 没有人会把木马、后门等放到开放的源代码中,这样无疑是把自己的罪行暴露在阳光之下 |

  • 典型的开源软件

| 软件 | 说明 | | — | — | | Linux | Linux 是一款开源的操作系统,它的内核由多名极客共同维护。Linux 是开源软件的经典之作、代表之作、巅峰之作 | | Apache | 世界使用排名第一的 Web 服务器软件 | | MySQL | 世界上最流行的关系型数据库,适合中小型网站 | | Firefox | 火狐浏览器。在 Chrome 推出之前,Firefox 几乎是最快速的浏览器,直到现在也是 Web 开发人员的调试利器 | | OpenOffice | 一套跨平台的办公软件套件,类似 Microsoft Office | | GCC | C语言/C++编译器 | | Java、PHP、Python | 开源的编程语言 |

  • 国内外开源社区推荐:开源中国、ChinaUnix、GitHub、Apache、SourceForge

1.7 开源协议

  • 开源软件在追求“自由”的同时,不能牺牲程序员的利益,否则将会影响程序员的创造激情,因此世界上现在有 60 多种被开源促进组织(Open Source Initiative)认可的开源许可协议来保证开源工作者的权益
  • 开源协议规定了你在使用开源软件时的权利和责任,也就是规定了你可以做什么,不可以做什么
  • 开源协议虽然不一定具备法律效力,但是当涉及软件版权纠纷时,开源协议也是非常重要的证据之一

1.7.1 Apache 许可证版本(Apache License Version)协议

  • Apache 和 BSD 类似,都适用于商业软件。Apache 协议在为开发人员提供版权及专利许可的同时,允许用户拥有修改代码及再发布的自由
  • 现在热门的 Hadoop、Apache HTTP Server、MongoDB 等项目都是基于该许可协议研发的,程序开发人员在开发遵循该协议的软件时,要严格遵守下面的四个条件
    • 该软件及其衍生品必须继续使用 Apache 许可协议
    • 如果修改了程序源代码,需要在文档中进行声明
    • 若软件是基于他人的源代码编写而成的,则需要保留原始代码的协议、商标、专利声明及其他原作者声明的内容信息
    • 如果再发布的软件中有声明文件,则需在此文件中标注 Apache 许可协议及其他许可协议

1.7.2 BSD(Berkeley Software Distribution,伯克利软件发布版)协议

  • BSD 协议基本上允许用户“为所欲为”,用户可以使用、修改和重新发布遵循该许可的软件,并且可以将软件作为商业软件发布和销售,前提是需要满足下面三个条件
    • 如果再发布的软件中包含源代码,则源代码必须继续遵循 BSD 许可协议
    • 如果再发布的软件中只有二进制程序,则需要在相关文档或版权文件中声明原始代码遵循了 BSD 协议
    • 不允许用原始软件的名字、作者名字或机构名称进行市场推广
  • BSD 对商业比较友好,很多公司在选用开源产品的时候都首选 BSD 协议,因为可以完全控制这些第三方的代码,甚至在必要的时候可以修改或者二次开发

1.7.3 GNU GPL(GNU General Public License,GNU 通用公共许可证)

  • 只要软件中包含了遵循 GPL 协议的产品或代码,该软件就必须也遵循 GPL 许可协议,也就是必须开源免费,不能闭源收费,因此这个协议并不适合商用软件
  • 遵循 GPL 协议的开源软件数量极其庞大,包括 Linux 系统在内的大多数的开源软件都是基于这个协议的
  • GPL 开源协议的主要特点

| 特点 | 说明 | | — | — | | 复制自由 | 允许把软件复制到任何人的电脑中,并且不限制复制的数量 | | 传播自由 | 允许软件以各种形式进行传播 | | 收费传播 | 允许在各种媒介上出售该软件,但必须提前让买家知道这个软件可以免费获得;因此,开源软件一般是通过为用户提供有偿服务的形式盈利 | | 修改自由 | 允许开发人员增加或删除软件的功能,但软件修改后必须依然基于 GPL 许可协议授权 |

1.7.4 GUN LGPL(GNU Lesser General Public License,GNU 宽通用公共许可证)

  • LGPL 是 GPL 的一个衍生版本,也被称为 GPL V2,该协议主要是为类库设计的开源协议
  • LGPL 允许商业软件通过类库引用(link)的方式使用 LGPL 类库,而不需要开源商业软件的代码。这使得采用 LGPL 协议的开源代码可以被商业软件作为类库引用并发布和销售
  • 但是如果修改 LGPL 协议的代码或者衍生品,则所有修改的代码,涉及修改部分的额外代码和衍生的代码都必须采用 LGPL 协议
  • 因此 LGPL 协议的开源代码很适合作为第三方类库被商业软件引用,但不适合希望以 LGPL 协议代码为基础,通过修改和衍生的方式做二次开发的商业软件采用

1.7.5 MIT(Massachusetts Institute of Technology)协议

  • 目前限制最少的开源许可协议之一(比 BSD 和 Apache 的限制都少),只要程序的开发者在修改后的源代码中保留原作者的许可信息即可,因此普遍被商业软件所使用
  • 使用 MIT 协议的软件有 PuTTY、X Window System、Ruby on Rails、Lua 5.0 onwards、Mono 等

1.7.6 如何选择开源协议

开源协议比较

1.3 Linux vs Windows

  • 目前国内 Linux 更多的是应用于服务器上,而桌面操作系统更多使用的是 Windows。主要区别如下
比较 Windows Linux
界面 界面统一,外壳程序固定所有 Windows 程序菜单几乎一致,快捷键也几乎相同 图形界面风格依发布版不同而不同,可能互不兼容。GNU/Linux 的终端机是从 UNIX 传承下来,基本命令和操作方法也几乎一致
驱动程序 驱动程序丰富,版本更新频繁。默认安装程序里面一般包含有该版本发布时流行的硬件驱动程序,之后所出的新硬件驱动依赖于硬件厂商提供。对于一些老硬件,如果没有了原配的驱动有时很难支持。另外,有时硬件厂商未提供所需版本的 Windows 下的驱动,也会比较头痛 由志愿者开发,由 Linux 核心开发小组发布,很多硬件厂商基于版权考虑并未提供驱动程序,尽管多数无需手动安装,但是涉及安装则相对复杂,使得新用户面对驱动程序问题(是否存在和安装方法)会一筹莫展。但是在开源开发模式下,许多老硬件尽管在Windows下很难支持的也容易找到驱动。HP、Intel、AMD 等硬件厂商逐步不同程度支持开源驱动,问题正在得到缓解
使用 使用比较简单,容易入门。图形化界面对没有计算机背景知识的用户使用十分有利 图形界面使用简单,容易入门。文字界面,需要学习才能掌握
学习 系统构造复杂、变化频繁,且知识、技能淘汰快,深入学习困难 系统构造简单、稳定,且知识、技能传承性好,深入学习相对容易
软件 每一种特定功能可能都需要商业软件的支持,需要购买相应的授权 大部分软件都可以自由获取,同样功能的软件选择较少
大小写 不区分 区分
扩展名 依赖以区分文件类型 不区分。通过权限位标识确定文件类型
  • Linux 中的一些特殊文件要求写”扩展名”,但并不是 Linux 一定要靠扩展名来识别文件类型,写这些扩展名是为了帮助管理员来区分不同的文件类型。这样的文件扩展名主要有
    • 压缩包:Linux 下常见的压缩文件名有 gz/bz2/zip/tar.gz/tar.bz2/tgz 等。就算没写扩展名,在 Linux 中一样可以解压缩,不影响使用
    • 二进制软件包:CentOS 中所使用的二进制安装包是 RPM 包,所有 RPM 包用 rpm 扩展名结尾,目的同样是让管理员一目了然
    • 程序文件:Shell 脚本一般用 sh 扩展名结尾,其他还有用 c 扩展名结尾的 C 语言文件等
    • 网页文件:网页文件一般使用 php 等结尾,不过这是网页服务器的要求,而不是 Linux 的要求

相关