1. Linux系统简介

目录

1.1 操作系统是什么

1.2 Linux是什么,有哪些特点?

1.3 Linux和UNIX的关系及区别

UNIX 的坎坷历史

Linux 的那些往事

UNIX与Linux的亲密关系

UNIX/Linux系统结构

1.4 类UNIX系统是什么鬼?

1.5 Linux中大量使用脚本语言,而不是C语言!

C语言并不是最佳选择

脚本语言也有不足

1.6 Windows很好啊,为什么要学Linux?

1.7 Linux的优缺点

1) 大量的可用软件及免费软件

2) 良好的可移植性及灵活注

3) 优良的稳定性和安全性

4) 支持几乎所有的网络协议及开发语言

1.8 常见Linux发行版本有哪些?

1) Red Hat Linux

2) Ubuntu Linux

3) SuSE Linux

4) Gentoo Linux

5) 其他 Linux 发行版

Linux 发行版本的选择

1.9 这么多Linux发行版,哪个最适合初学者?

1.10 Linux桌面环境大比拼[附带优缺点]

1. KDE 桌面系统

2. GNOME 桌面环境

3. Unity

4. MATE

5. Cinnamon

6. 适用于较老硬件设备的 Linux 桌面环境

查看桌面环境

1.11 Linux的主要应用领域有哪些?

网站服务器

电影工业

嵌入式应用

1.12 Linux已经霸占了服务器领域!

1.13 开源软件是什么?有哪些?

1.14 开源协议是什么?有哪些?

如何选择开源协议

1.15 开源就等于免费吗?用事实来说话

开源软件的盈利模式

1.16 如何学习Linux(新手必看)

如何去学习

碰到问题怎么办

英文读不懂怎么办

忘记Windows的思维方式

1.17 想学好Linux,这些习惯必须养成(初学者必读)

学习Linux,要习惯使用命令行

操作Linux,要慎之又慎

操作Linux,安全永远是第一位的


1.1 操作系统是什么

Linux 也是众多操作系统之一,要想知道 Linux 是什么,首先得说一说什么是操作系统。

计算机是一台机器,它按照用户的要求接收信息、存储数据、处理数据,然后再将处理结果输出(文字、图片、音频、视频等)。计算机由硬件和软件组成:

  • 硬件是计算机赖以工作的实体,包括显示器、键盘、鼠标、硬盘、CPU、主板等;
  • 软件会按照用户的要求协调整台计算机的工作,比如 Windows、Linux、Mac OS、Android 等操作系统,以及 Office、QQ、迅雷、微信等应用程序。


操作系统(Operating System,OS)是软件的一部分,它是硬件基础上的第一层软件,是硬件和其它软件沟通的桥梁(或者说接口、中间人、中介等)。

操作系统会控制其他程序运行,管理系统资源,提供最基本的计算功能,如管理及配置内存、决定系统资源供需的优先次序等,同时还提供一些基本的服务程序,例如:

1) 文件系统

提供计算机存储信息的结构,信息存储在文件中,文件主要存储在计算机的内部硬盘里,在目录的分层结构中组织文件。文件系统为操作系统提供了组织管理数据的方式。

2) 设备驱动程序

提供连接计算机的每个硬件设备的接口,设备驱动器使程序能够写入设备,而不需要了解执行每个硬件的细节。简单来说,就是让你能吃到鸡蛋,但不用养一只鸡。

3) 用户接口

操作系统需要为用户提供一种运行程序和访问文件系统的方法。如常用的 Windows 图形界面,可以理解为一种用户与操作系统交互的方式;智能手机的 Android 或 iOS 系统,也是一种操作系统的交互方式。

4) 系统服务程序

当计算机启动时,会自启动许多系统服务程序,执行安装文件系统、启动网络服务、运行预定任务等操作。

打个比方,操作系统就好像是一个政府,其它软件都会被它管控;操作系统在给其他软件提供各种便利的同时,还会约束其他软件不能为所欲为。
 

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


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

这套《Linux入门教程》主要讲解 Linux 这种操作系统的应用,并不想过多涉及操作系统的类型和功能等理论性的知识,本节的目的是让读者明白,操作系统也是软件的一种,只不过它是位于硬件和应用程序之间的底层的软件,它除了会为应用程序保驾护航,还会“杀死”不听话的应用程序,具有双面性。

以上对操作系统的认知虽然只是“皮毛”,但它足以让我们学习 Linux 了。

 

1.2 Linux是什么,有哪些特点?

与大家熟知的 Windows 操作系统软件一样,Linux 也是一个操作系统软件,其 logo 是一只企鹅(如图 1 所示)。与 Windows 不同之处在于,Linux 是一套开放源代码程序的、可以自由传播的类 Unix 操作系统软件。


Linux操作系统图标
图 1 Linux 操作系统图标

Unix 系统是 Linux 系统的前身,具备很多优秀特性。有关 Unix 和 Linux 更多的介绍,可阅读《Linux和UNIX的关系及区别》一文。

Linux 在设计之初,就是基于 Intel x86 系列 CPU 架构计算机的,它是一个基于 POSIX 的多用户、多任务并且支持多线程和多 CPU 的操作系统,它是由世界各地成千上万的程序员设计和开发实现的,当初开发 Linux 系统的目的就是建立不受任何商业化软件版权制约的、全世界都能自由使用的类 Unix 操作系统兼容产品。

在过去的 20 年里,Linux 系统主要被应用于服务器端、嵌入式开发和 PC 桌面 3 大领域,其中服务器端领域是重中之重。例如,我们熟知的大型、超大型互联网企业(百度、腾讯、Sina、阿里等)都在使用 Linux 系统作为其服务器端的程序运行平台,全球及国内排名前 1000 的 90% 以上的网站使用的主流系统都是 Linux 系统。

有关 Linux 的应用领域,可阅读《Linux的主要应用领域有哪些》一文。

从上面的内容可以看出,Linux操作系统之所以如此流行,是因为它具备如下这些优秀的特点:

  • Linux 不仅是免费的,更是开源的,这意味着任何人都可以获得其代码并根据自己的需求进行修改。事实上,这已经孵化出专属 Linux 各发行版的巨大生态系统,我们将在《常见Linux发行版本》一节中展开探讨。
  • Linux 与 Unix 系统兼容,该系统的构建采用了一些与 UNIX 操作系统相同的技术,具备 Unix 几乎所有的优秀特性(系统的稳定性和安全性尤为突出)。
  • 和其他操作系统相比,Linux 更容易安装,且不会收到任何商业化版本的制约。
  • Linux 让开展各种实际有用且具有创造性的事情成为可能。例如,我们可以在一个U盘上装载 Linux 的自生系统引导映像(live boot image),启动一台硬盘已经崩溃的计算机,之后查找并解决该问题。或者,因为 Linux 是一个真正的多用户操作系统,它具有非常好的私密性和稳定性,整个团队可以同时从本地或远程登录进行工作。
  • Linux 提供了复杂的软件包管理系统,可以放心地安装和维护每一个在线资源库中的软件应用。


当然, Linux 操作系统的特点还有很多,这里不再过多赘述,相信随着学习 Linux 的深入,你会有更多的体会。

 

 

 

 

1.3 Linux和UNIX的关系及区别

 

UNIX 与 Linux 之间的关系是一个很有意思的话题。在目前主流的服务器端操作系统中,UNIX 诞生于 20 世纪 60 年代末,Windows 诞生于 20 世纪 80 年代中期,Linux 诞生于 20 世纪 90 年代初,可以说 UNIX 是操作系统中的"老大哥",后来的 Windows 和 Linux 都参考了 UNIX。

现代的 Windows 系统已经朝着“图形界面”的方向发展了,和 UNIX 系统有了巨大的差异,从表面上甚至看不出两者的关联。

UNIX 的坎坷历史

UNIX 操作系统由肯•汤普森(Ken Thompson)和丹尼斯•里奇(Dennis Ritchie)发明。它的部分技术来源可追溯到从 1965 年开始的 Multics 工程计划,该计划由贝尔实验室、美国麻省理工学院和通用电气公司联合发起,目标是开发一种交互式的、具有多道程序处理能力的分时操作系统,以取代当时广泛使用的批处理操作系统。

说明:分时操作系统使一台计算机可以同时为多个用户服务,连接计算机的终端用户交互式发出命令,操作系统采用时间片轮转的方式处理用户的服务请求并在终端上显示结果(操作系统将CPU的时间划分成若干个片段,称为时间片)。操作系统以时间片为单位,轮流为每个终端用户服务,每次服务一个时间片。

可惜,由于 Multics 工程计划所追求的目标太庞大、太复杂,以至于它的开发人员都不知道要做成什么样子,最终以失败收场。

以肯•汤普森为首的贝尔实验室研究人员吸取了 Multics 工程计划失败的经验教训,于 1969 年实现了一种分时操作系统的雏形,1970 年该系统正式取名为 UNIX。

想一下英文中的前缀 Multi 和 Uni,就明白了 UNIX 的隐意。Multi 是大的意思,大而且繁;而 Uni 是小的意思,小而且巧。这是 UNIX 开发者的设计初衷,这个理念一直影响至今。

有意思的是,肯•汤普森当年开发 UNIX 的初衷是运行他编写的一款计算机游戏 Space Travel,这款游戏模拟太阳系天体运动,由玩家驾驶飞船,观赏景色并尝试在各种行星和月亮上登陆。他先后在多个系统上试验,但运行效果不甚理想,于是决定自己开发操作系统,就这样,UNIX 诞生了。

自 1970 年后,UNIX 系统在贝尔实验室内部的程序员之间逐渐流行起来。1971-1972 年,肯•汤普森的同事丹尼斯•里奇发明了传说中的C语言,这是一种适合编写系统软件的高级语言,它的诞生是 UNIX 系统发展过程中的一个重要里程碑,它宣告了在操作系统的开发中,汇编语言不再是主宰。

到了 1973 年,UNIX 系统的绝大部分源代码都用C语言进行了重写,这为提高 UNIX 系统的可移植性打下了基础(之前操作系统多采用汇编语言,对硬件依赖性强),也为提高系统软件的开发效率创造了条件。可以说,UNIX 系统与C语言是一对孪生兄弟,具有密不可分的关系。

20 世纪 70 年代初,计算机界还有一项伟大的发明——TCP/IP 协议,这是当年美国国防部接手 ARPAnet 后所开发的网络协议。美国国防部把 TCP/IP 协议与 UNIX 系统、C语言捆绑在一起,由 AT&T 发行给美国各个大学非商业的许可证,这为 UNIX 系统、C语言、TCP/IP 协议的发展拉开了序幕,它们分别在操作系统、编程语言、网络协议这三个领域影响至今。肯•汤普森和丹尼斯•里奇因在计算机领域做出的杰出贡献,于 1983 年获得了计算机科学的最高奖——图灵奖。



图 1 为肯•汤普森与丹尼斯•里奇的合影,天才都是不修边幅的……


随后出现了各种版本的 UNIX 系统,目前常见的有 Sun Solaris、FreeBSD、IBM AIX、HP-UX 等。

Solaris 和 FreeBSD

我们重点介绍一下 Solaris,它是 UNIX 系统的一个重要分支。Solaris 除可以运行在 SPARC CPU 平台上外,还可以运行在 x86 CPU 平台上。在服务器市场上,Sun 的硬件平台具有高可用性和高可靠性,是市场上处于支配地位的 UNIX 系统。

对于难以接触到 Sun SPARC 架构计算机的用户来说,可以通过使用 Solaris x86 来体验世界知名大厂的商业 UNIX 风采。当然,Solaris x86 也可以用于实际生产应用的服务器,在遵守 Sun 的有关许可条款的情况下,Solaris x86 可以免费用于学习研究或商业应用。

FreeBSD 源于美国加利福尼亚大学伯克利分校开发的 UNIX 版本,它由来自世界各地的志愿者开发和维护,为不同架构的计算机系统提供了不同程度的支持。FreeBSD 在 BSD 许可协议下发布,允许任何人在保留版权和许可协议信息的前提下随意使用和发行,并不限制将 FreeBSD 的代码在另一协议下发行,因此商业公司可以自由地将 FreeBSD 代码融入它们的产品中。苹果公司的 OS  X 就是基于 FreeBSD 的操作系统。



 

FreeBSD 与 Linux 的用户群有相当一部分是重合的,二者支持的硬件环境也比较一致,所采用的软件也比较类似。FreeBSD 的最大特点就是稳定和高效,是作为服务器操作系统的不错选择;但其对硬件的支持没有 Linux 完备,所以并不适合作为桌面系统。

其他 UNIX 版本因应用范围相对有限,在此不做过多介绍。

Linux 的那些往事

Linux 内核最初是由李纳斯•托瓦兹(Linus Torvalds)在赫尔辛基大学读书时出于个人爱好而编写的,当时他觉得教学用的迷你版 UNIX 操作系统 Minix 太难用了,于是决定自己开发一个操作系统。第 1 版本于 1991 年 9 月发布,当时仅有 10 000 行代码。



 

李纳斯•托瓦兹没有保留 Linux 源代码的版权,公开了代码,并邀请他人一起完善 Linux。与 Windows 及其他有专利权的操作系统不同,Linux 开放源代码,任何人都可以免费使用它。

据估计,现在只有 2% 的 Linux 核心代码是由李纳斯•托瓦兹自己编写的,虽然他仍然拥有 Linux 内核(操作系统的核心部分),并且保留了选择新代码和需要合并的新方法的最终裁定权。现在大家所使用的 Linux,我更倾向于说是由李纳斯•托瓦兹和后来陆续加入的众多 Linux 好者共同开发完成的。

李纳斯•托瓦兹无疑是这个世界上最伟大的程序员之一,何况,他还搞出了全世界最大的程序员交友社区 GitHub (开源代码库及版本控制系统)。

关于 Linux Logo 的由来是一个很有意思的话题,它是一只企鹅。



 

为什么选择企鹅,而不是选择狮子、老虎或者小白兔?有人说因为李纳斯•托瓦兹是芬兰人,所以选择企鹅,有人说因为其他动物图案都被用光了,李纳斯•托瓦兹只好选择企鹅。

我更愿意相信以下说法,企鹅是南极洲的标志性动物,根据国际公约,南极洲为全人类共同所有,不属于世界上的任何国家,可国家都无权将南极洲纳入其版图。Linux 选择企鹅图案作为 Logo,其含义是:开放源代码的 Linux 为全人类共同所有,可公司无权将其私有。

UNIX与Linux的亲密关系

二者的关系,不是大哥和小弟,"UNIX 是 Linux 的父亲"这个说法更怡当。之所以要介绍它们的关系,是因为要告诉读者,在学习的时候,其实 Linux 与 UNIX 有很多的共通之处,简单地说,如果你已经熟练掌握了 Linux,那么再上手使用 UNIX 会非常容易。

二者也有两个大的区别:

  1. UNIX 系统大多是与硬件配套的,也就是说,大多数 UNIX 系统如 AIX、HP-UX 等是无法安装在 x86 服务器和个人计算机上的,而 Linux 则可以运行在多种硬件平台上;
  2. UNIX 是商业软件,而 Linux 是开源软件,是免费、公开源代码的。


Linux 受至旷大计算机爱好者的喜爱,主要原因也有两个:

  1. 它属于开源软件,用户不用支付可费用就可以获得它和它的源代码,并且可以根据自己的需要对它进行必要的修改,无偿使用,无约束地继续传播;
  2. 它具有 UNIX 的全部功能,任何使用 UNIX 操作系统或想要学习 UNIX 操作系统的人都可以从 Linux 中获益。


开源软件是不同于商业软件的一种模式,从字面上理解,就是开放源代码,大家不用担心里面会搞什么猫腻,这会带来软件的革新和安全。

另外,开源其实并不等同于免费,而是一种新的软件盈利模式。目前很多软件都是开源软件,对计算机行业与互联网影响深远。

开源软件本身的模式、概念比较晦涩,这套《Linux教程》旨在指导读者应用 Linux,大家简要理解即可。

近年来,Linux 已经青出于蓝而胜于蓝,以超常的速度发展,从一个丑小鸭变成了一个拥有庞大用户群的真正优秀的、值得信赖的操作系统。历史的车轮让 Linux 成为 UNIX 最优秀的传承者。

总结一下 Linux 和 UNIX 的关系/区别

Linux 是一个类似 Unix 的操作系统,Unix 要早于 Linux,Linux 的初衷就是要替代 UNIX,并在功能和用户体验上进行优化,所以 Linux 模仿了 UNIX(但并没有抄袭 UNIX 的源码),使得 Linux 在外观和交互上与 UNIX 非常类似。

说模仿可能会被人喷,你也可以说微创新或者改进。

相比于 UNIX,Linux 最大的创新是开源免费,这是它能够蓬勃发展的最重要原因;而目前的 UNIX 大部分都是收费的,小公司和个人都难以承受。

正是由于 Linux 和 UNIX 有着千丝万缕的联系,所以人们把 Linux 叫做“类UNIX系统”,下节我们将会着重讲解。

UNIX/Linux系统结构

UNIX/Linux 系统可以粗糙地抽象为 3 个层次(所谓粗糙,就是不够细致、精准,但是便于初学者抓住重点理解),如图 3 所示。底层是 UNIX/Linux 操作系统,即系统内核(Kernel);中间层是 Shell 层,即命令解释层;高层则是应用层。



图 3 UNIX/Linux 系统结掏层次概要

1) 内核层

内核层是 UNIX/Linux 系统的核心和基础,它直接附着在硬件平台之上,控制和管理系统内各种资源(硬件资源和软件资源),有效地组织进程的运行,从而扩展硬件的功能,提高资源的利用效率,为用户提供方便、高效、安全、可靠的应用环境。

2) Shell层

Shell 层是与用户直接交互的界面。用户可以在提示符下输入命令行,由 Shell 解释执行并输出相应结果或者有关信息,所以我们也把 Shell 称作命令解释器,利用系统提供的丰富命令可以快捷而简便地完成许多工作。

3) 应用层

应用层提供基于 X Window 协议的图形环境。X Window 协议定义了一个系统所必须具备的功能(就如同 TCP/IP 是一个协议,定义软件所应具备的功能),可系统能满足此协议及符合 X 协会其他的规范,便可称为 X Window。

现在大多数的 UNIX 系统上(包括 Solaris、HP-UX、AIX 等)都可以运行 CDE (Common Desktop Environment,通用桌面环境,是运行于 UNIX 的商业桌面环境)的用户界面;而在 Linux 上广泛应用的有 Gnome(见图  4)、KDE 等。



图 4 Gnome图形界面


X Window 与微软的 Windows 图形环境有很大的区别:

  • UNIX/Linux 系统与 X Window 没有必然捆绑的关系,也就是说,UNIX/Linux 可以安装 X Window,也可以不安装;而微软的 Windows 图形环境与内核捆绑密切。
  • UNIX/Linux 系统不依赖图形环境,依然可以通过命令行完成 100% 的功能,而且因为不使用图形环境还会节省大量的系统资源。


作为服务器部署,绝大多数 Linux 并不安装或并不启用图形环境,本教程的讲解也基本上为 Linux 命令行下的操作。

 

 

1.4 类UNIX系统是什么鬼?

 

上节《UNIX和Linux的区别》中讲到了 UNIX 系统的历史,UNIX 是操作系统的开山鼻祖,是操作系统的发源地,后来的 Windows 和 Linux 都参考了 UNIX。

有人说,这个世界上只有两种操作系统:

  • UNIX 和类 UNIX 操作系统;
  • 其它操作系统。


类 UNIX 系统(英文 Unix-like)既包括各种传统的 UNIX 系统,比如 FreeBSD、OpenBSD、Sun Solaris 等,还包括与 UNIX 相似的系统,比如 Linux、QNX、Minix 等,它们都相当程度地继承了原始 UNIX 的特性,有很多相似之处,并且都在一定程度上遵守 POSIX 规范(UNIX 可移植接口规范)。

类 UNIX 系统不都是免费的,有相当一部分是收费的,而且还比较昂贵。

Linux 几乎是最著名的一个类 UNIX 系统,现在风头正盛,甚至有点“喧宾夺主”,剥夺了原来属于 UNIX 的市场份额,但是 UNIX 也经历了时间的考验,其在操作系统发展历程中的地位是不可否认的。

几乎每一门科学学到深入都是要接触 Linux 的,很多专业的软件甚至针对 Linux 做了大量的优化。

除去 Windows,几乎你所知道的每一个系统都是 UNIX 和类 UNIX,而且它们在 PC 普及前就大放异彩。Windows 仅仅占领了 PC,而别的方方面面都被 UNIX 和类 UNIX 占领了,至于其他的操作系统更是不值一提。比如:

  • 服务器、超级计算机、嵌入式、机顶盒领域都有 Linux 的身影;
  • 在手机领域,Android 和 iOS 都是类 UNIX 系统。


总之,除了 Windows,几乎你能叫的出名的都是 UNIX 和类 UNIX 系统。
 

维基百科对类UNIX系统的简单
图1:维基百科对 UNIX 和类 UNIX 系统的简单

类 UNIX 系统发展史
图2:类 UNIX 系统发展史(简明版)

 

1.5 Linux中大量使用脚本语言,而不是C语言!

 

说到在 Linux 下的编程,很多人会想到用C语言,Linux 的内核、shell、基础命令程序,也的确是用C语言编写的,这首先证明了一点,C语言很强很通用。

到目前为止,C语言依然垄断着计算机工业中几乎所有的系统编程,而且也正因为是C语言,才使得 Unix 以及后来的 Linux 能够这么广泛地被人们去研究、去改进、去制作自己的分支,以至于我们能在各种硬件平台上使用它们。

但是细心的人会发现,Linux 启动过程中所涉及的各种程序,很少有C语言的痕迹。它们大多是脚本程序。不单单在启动过程中是这样,那些用于安装软件的工具 yum、apt-get,甚至是 configure 和 Makefile 也都是脚本程序。而且你可能还没注意到,那些用于系统管理的工具,如配置 ADSL 拨号上网的工具、配置守护进程的工具等,很多也都是脚本程序。

大量使用脚本程序,是所有类 Unix 系统不同于其他系统的一个显著特征,催生人们在 Linux 中大量使用脚本来编写程序,并不仅仅是因为脚本对人直观、容易修改这种显著特性所决定的。另外一个主要的原因就是 Linux 所支持的脚本语言种类十分丰富。

所有类 Unix 系统所必备的 shell,其本身就是一个强大的脚本解释器。所以从 shell 诞生的那一天起,shell 就是那些不懂 C 语言,又必须在 Unix 上编写程序的用户们的首选工具。

这就给了人们一种新的选择,使用 shell 编程不用去理会让人头晕的指针;shell 程序可以直接利用系统命令来完成一些需要用大量 C 代码的功能;shell 编程不用去理会数据类型,不用考虑烦人的数值和字符数据的转换问题;shell 程序同样提供顺序、选择分支和循环这三种能够构建任意算法的基础设施。因此,shell 很快就能够被非专业用户所接受、掌握,并编写出非常实用的程序。

随着时间的推移,这些非专业用户想往更高的方向发展,遇到了一些 shell 处理起来会很“蹩脚”的问题,比如分析文本和修改文本(别忘了“万般皆文本”)。这个时候他们会发现 有 awk 和 sed。也只需要写几行脚本就能将这些问题处理得很好。而且它们也跟 shell 配合得天衣无缝。或许这个时候会觉得加入了 awk 和 sed 的 shell 脚本有些难看,不过没关系,还有 Perl 和 TCL。Perl 天生就是为处理文本而存在的,TCL 也不含糊。

如果觉得这些语言都太老气了,有些过时了,不要紧,还有 Python、Ruby 等这些现代脚本语言,它们除了不能写操作系统内核之外,几乎什么都能干,而且还是面向对象的。

不管怎样,在 Linux 下能够选择的脚本语言都是极其丰富的。它们最大的特点就是简单、好学且资料丰富。简单就意味着容易维护,好学就容易吸引用户,资料丰富就不会在解决 bug 上出现障碍。即便是专业的程序员,也会因为这些特点而特别偏好脚本语言,导致的一个结果就是脚本程序在 Linux 中的大爆发。

有读者可能会问,为什么不选择 C 语言呢?

C语言并不是最佳选择

C语言是 Unix 的母语,这是毋庸罝疑的。前面也说过,正是因为有了C语言,才使得 Unix 有了今天的成就。但为什么在 Linux 中有这么多程序,甚至是关键程序,不用C语言编写呢?

脚本程序由于是解释执行的,在执行效率上自然是会有很大损失的。并且大家都知道,C语言所编写的程序又是以效率著称的。但是C语言是一种编译型语言,要想让C语言的程序能够运行,必须经过编译和链接这两个步骤。

要知道,能够将由几十个源代码文件构成的C语言程序,有条不紊地编译完成并能最终链接成一个可执行程序,本身就是一件费时又费力的事情,如果一旦程序有问题,还必须使用专门的调试工具一点点地去跟踪判断,修正之后再重复那些复杂的编译和链接步骤,这又是一个极需技巧的事情。积累并掌握技巧又是一件费时又费力的事情。

在早些年,计算机性能不佳的时候,这些付出或许是值得的。但是放到现在,处理器的速度至少快了几千倍,内存大了几千倍,硬盘甚至大了几万倍,而价格却更低了。从经济角度分析,机器的时间成本早己远远低于人的时间成本了。那么C语言在机器效率上的优势根本没有任何意义。脚本程序能够给人节省下来的时间成本,则更具经济效益。

要论机器效率,汇编语言比C语言要好上几十倍,但是目前还有谁在用汇编语言编程呢?

C语言在设计的时候,最主要的一个目标就是能够让程序员自己处理内存管理的问题。这使得C语言很强大但又太过于灵活,导致了很多陷阱的出现。稍微一不注意,程序中就会存在难以发觉的 Bug,甚至是严重的安全漏洞。程序员们大多是要以时间或失败为代价去积累经验,才能尽量避免这些问题的发生。而且效率在大多数应用中根本就不是问题,首要的是正确。脚本程序的简单和直观正是正确的起点,C语言的灵活却是错误的根源。

但是,C语言并不是一无是处,也是 Unix 的精华。C语言作为通用程序设计语言是所向无敌的。C语言本身也非常简洁和紧凑,资料丰富且容易学习。C语言之后的少数语言设计,为了不被C语言所吞并,不得不进行大的改动,比如引进垃圾回收机制等,以和C语言能够在功能上保持足够距离。也正是因为这样,C语言始终没有消失,只是它的光辉在 Linux 中稍稍地被脚本程序所遮挡了一下。

脚本语言也有不足

虽然效率并不是脚本程序的缺点,但是种类过于丰富却是一个极大不足。编写一个复杂的应用,往往很难使用一种脚本语言包杆到底,因为脚本语言都有自己适用的场景,为了能够快速有效地完成某个应用,就需扬长避短,利用多种脚本语言混合编程。

多脚本语言的混合编程是一种知识密集型的编程方法,但不是编码密集型的(这是能够被普遍接受的原因)。为了能够良好地使用这种方法,就要求程序员不仅仅要具备相当数量的多种语言知识,还必须具备能够判断这些语言的适用场景、以及如何将它们有效地组合在一起的经验。

实际上,混合编程并不是脚本语言的专利,任何编程语言都行,只要你能找准那些语言的特点。比如笔者就曾经使用过 Basic 和 C 进行混合编程,去完成一个 DOS 版万年历程序。为了支持鼠标点击操作,用 C 完成了鼠标中断的处理。余下的部分都用 Basic 来完成。

在 Linux 中大量应用脚本程序的场景,好多都是这种混合编程的典范。比如 Linux 的启动过程,主程序 init 是用 C 语言写的,具体到启动流程的各个环节则是 shell 脚本程序。

 

1.6 Windows很好啊,为什么要学Linux?

 

早在 20 世纪 70 年代,UNIX 系统是开源而且免费的,但是在 1979 年时,AT&T 公司宣布了对 UNIX 系统的商业化计划,随之开源软件业转变成了版权式软件产业,源代码被当作商业机密,成为专利产品,人们再也不能自由地享受科技成果。

于是在 1984 年,Richard Stallman 面对于如此封闭的软件创作环境,发起了 GNU 源代码开放计划并制定了著名的 GPL 许可协议。



图 1 Richard Stallman

Richard Stallman,理查德·马修·斯托曼,自由软件运动的领袖、GNU 计划的创立者。

1987 年时,GNU 计划获得了一项重大突破,即发布了 gcc 编译器,这使得程序员可以基于该编译器编写出属于自己的开源软件。随之,在 1991 年 10 月,芬兰赫尔辛基大学的在校生 Linus Torvalds 编写了一款名为 Linux 的操作系统,该系统因其较高的代码质量且基于 GNU GPL 许可协议的开放源代码特性,迅速得到了 GNU 计划和一大批黑客程序员的支持,随后 Linux 系统便进入了如火如荼的发展阶段。

1994 年 1 月,Bob Young(红帽创始人)在 Linux 系统内核的基础之上,集成了众多的源代码和程序软件,发布了红帽系统并开始出售技术服务,这进一步推动了 Linux 系统的普及。

1998 年以后,随着 GNU 源代码开放计划和 Linux 系统的继续火热,以 IBM 和 Intel 为首的多家 IT 企业巨头开始大力推动开放源代码软件的发展。

到了 2017 年年底,Linux 内核已经发展到了 4.13 版本,并且 Linux 系统版本也有数百个之多,但它们依然都使用 Linus Torvalds 开发、维护的 Linux 系统内核。RedHat 公司也成为了开源行业及 Linux 系统的带头公司。

初步接触 Linux 的读者,或者有这样一个疑问,Windows 系统也很好用,也能满足日常工作需求,为什么要学习 Linux 系统呢?

有些初学者会将“Linxu 系统是开源的”作为这个问题的答案,其实不然。开源的操作系统少说有 100 个,开源的软件至少也有十万个,为什么不去逐个学习?Linux 的开源特性只是一部分优势,并不是学习 Linux 的主要原因。

对于用户来讲,开源精神仅具备锦上添花的效果,真正的原因在于,Linux 系统是一款优秀的软件产品,具有类似 UNIX 的程序界面,而且继承了 UNIX 的稳定性,能够较好地满足工作需求。

大多数读者应该都是从微软的 Windows 系统开始了解计算机和网络的,客观来讲,Windows 系统确实很优秀,但是在安全性、高可用性与高性能方面却难以让人满意。例如,如果你经常使用 Windows,应该见过如图 1 所示的这个界面。



图 1 Windows系统崩溃


想必读者现在已经能猜到,为什么要在需要长期稳定运行的网站服务器上、在处理大数据的集群系统中,以及需要协同工作的环境中采用 Linux 系统了。



图 2 Linux相比Windows的优势


从图 2 中,也可以看出 Linux 系统相较于 Windows 系统的具体优势。

 

1.7 Linux的优缺点

 

前面章节提到,相比 Windows 系统,Linux 系统有更好的稳定性,那么除此之外,Linux 系统还有那些优点(或者不足)呢?本节带领大家详细了解一下。

1) 大量的可用软件及免费软件

Linux 系统上有着大量的可用软件,且绝大多数是免费的,比如声名赫赫的 Apache、Samba、PHPMySQL 等,构建成本低廉,是 Linux 被众多企业青睐的原因之一。当然,这和 Linux 出色的性能是分不开的,否则,节约成本就没有任何意义。

但不可否认的是,Linux 在办公应用和游戏娱乐方面的软件相比 Windows 系统还很匮乏,所以,即便打游戏、看影片用的也是 Windows,至于 Linux,就把它用在擅长的服务器领域吧。

2) 良好的可移植性及灵活注

Linux 系统有良好的可移植性,它几乎支持所有的 CPU 平台,这使得它便于裁剪和定制。我们可以把 Linux 放在 U 盘、光盘等存储介质中,也可以在嵌入式领域广泛应用。

如果读者希望不进行安装就体验 Linux 系统,则可以在网上下载一个 Live DVD 版的 Linux 镜像,刻成光盘放入光驱或者用虚拟机软件直接载入镜像文件,设置 CMOS/BIOS 为光盘启动,系统就会自动载入光盘文件,启动进入 Linux 系统。

3) 优良的稳定性和安全性

著名的黑客埃里克•雷蒙德(EricS.Raymond)有一句名言:“足够多的眼睛,就可让所有问题浮现”。举个例子,假如笔者在演讲,台下人山人海,明哥中午吃饭不小心,有几个饭粒粘在衣领上了,分分钟就会被大家发现,因为看的人太多了;如果台下就稀稀落落两三个人且离得很远,那就算明哥衣领上有一大块油渍也不会被发现。

Linux 开放源代码,将所有代码放在网上,全世界的程序员都看得到,有什么缺陷和漏洞,很快就会被发现,从而成就了它的稳定性和安全注。

提到 Linux 的安全性,我们可以做一个实验:在一台计算机上,在安装了 Windows 系统后不安装杀毒软件联网一个月,看看会有什么情况;同样,在安装了 Linux 系统后不安装杀毒软件联网一个月,我们比较一下,大家就明白了什么是 Linux 的安全性。Windows 系统不安装杀毒软件,相信大家都知道会有什么下场吧……

4) 支持几乎所有的网络协议及开发语言

经常有初学的朋友问我,Linux 是不是对 TCP/IP 协议支持不好、是不是 Java 开发环境不灵之类的问题。前面在 UNIX 发展史中已经介绍了,UNIX 系统是与 C 语言、TCP/IP 协议一同发展起来的,而 Linux 是 UNIX 的一种,C 语言又衍生出了现今主流的语言 PHP、Java、C++ 等,而哪一个网络协议与 TCP/IP 无关呢?所以,Linux 对网络协议和开发语言的支持很好。

Linux 的优点在此不一一列举,只说明这几点供读者参考。诚然,Linux 不可能没有缺点,如桌面应用还有待完善、Linux 的标准统一还需要推广、开源软件的盈利模式与发展还有待考验等,不过,瑕不掩瑜。

1.8 常见Linux发行版本有哪些?

新手往往会被 Linux 众多的发行版本搞得一头雾水,我们首先来解释一下这个问题。

从技术上来说,李纳斯•托瓦兹开发的 Linux 只是一个内核。内核指的是一个提供设备驱动、文件系统、进程管理、网络通信等功能的系统软件,内核并不是一套完整的操作系统,它只是操作系统的核心。一些组织或厂商将 Linux 内核与各种软件和文档包装起来,并提供系统安装界面和系统配置、设定与管理工具,就构成了 Linux 的发行版本。

在 Linux 内核的发展过程中,各种 Linux 发行版本起了巨大的作用,正是它们推动了 Linux 的应用,从而让更多的人开始关注 Linux。因此,把 Red Hat、Ubuntu、SUSE 等直接说成 Linux 其实是不确切的,它们是 Linux 的发行版本,更确切地说,应该叫作“以Linux为核心的操作系统软件包”。

Linux 的各个发行版本使用的是同一个 Linux 内核,因此在内核层不存在什么兼容性问题,每个版本有不一样的感觉,只是在发行版本的最外层(由发行商整合开发的应用)才有所体现。

Linux 的发行版本可以大体分为两类:

  • 商业公司维护的发行版本,以著名的 Red Hat 为代表;
  • 社区组织维护的发行版本,以 Debian 为代表。


很难说大量 Linux 版本中哪一款更好,每个版本都有自己的特点。下面为大家介绍几款常用的 Linux 发行版本。

1) Red Hat Linux


 

Red Hat(红帽公司)创建于 1993 年,是目前世界上资深的 Linux 厂商,也是最获认可的 Linux 品牌。

Red Hat 公司的产品主要包括 RHEL(Red Hat Enterprise Linux,收费版本)和 CentOS(RHEL 的社区克隆版本,免费版本)、Fedora Core(由 Red Hat 桌面版发展而来,免费版本)。

Red Hat 是在我国国内使用人群最多的 Linux 版本,资料丰富,如果你有什么不明白的地方,则容易找到人来请教,而且大多数 Linux 教程是以 Red Hat 为例来讲解的(包括本教程)。

本教程以我国国内互联网公司常用的 Linux 发行版本 CentOS 为例讲解,它是基于 Red Hat Enterprise Linux 源代码重新编译、去除 Red Hat 商标的产物,各种操作使用和付费版本没有区别,且完全免费。缺点是不向用户提供技术支持,也不负任何商业责任。有实力的公司可以选择付费版本。

2) Ubuntu Linux


 

Ubuntu 基于知名的 Debian Linux 发展而来,界面友好,容易上手,对硬件的支持非常全面,是目前最适合做桌面系统的 Linux 发行版本,而且 Ubuntu 的所有发行版本都免费提供。

Ubuntu 的创始人 Mark Shuttleworth 是非常具有传奇色彩的人物。他在大学毕业后创建了一家安全咨询公司,1999 年以 5.75 亿美元被收购,由此一跃成为南非最年轻有为的本土富翁。作为一名狂热的天文爱好者,Mark Shuttleworth 于 2002 年自费乘坐俄罗斯联盟号飞船,在国际空间站中度过了 8 天的时光。之后,Mark Shuttleworth 创立了 Ubuntu 社区,2005 年 7 月 1 日建立了 Ubuntu 基金会,并为该基金会投资 1000 万美元。他说,太空的所见正是他创立 Ubuntu 的精神之所在。如今,他最热衷的事情就是到处为自由开源的 Ubuntu 进行宣传演讲。

3) SuSE Linux


 

SuSE Linux 以 Slackware Linux 为基础,原来是德国的 SuSE Linux AG 公司发布的 Linux 版本,1994 年发行了第一版,早期只有商业版本,2004 年被 Novell 公司收购后,成立了 OpenSUSE 社区,推出了自己的社区版本 OpenSUSE。

SuSE Linux 在欧洲较为流行,在我国国内也有较多应用。值得一提的是,它吸取了 Red Hat Linux 的很多特质。

SuSE Linux 可以非常方便地实现与 Windows 的交互,硬件检测非常优秀,拥有界面友好的安装过程、图形管理工具,对于终端用户和管理员来说使用非常方便。

4) Gentoo Linux


 

Gentoo 最初由 Daniel Robbins(FreeBSD 的开发者之一)创建,首个稳定版本发布于 2002 年。Gentoo 是所有 Linux 发行版本里安装最复杂的,到目前为止仍采用源码包编译安装操作系统。

不过,它是安装完成后最便于管理的版本,也是在相同硬件环境下运行最快的版本。自从 Gentoo 1.0 面世后,它就像一场风暴,给 Linux 世界带来了巨大的惊喜,同时也吸引了大量的用户和开发者投入 Gentoo Linux 的怀抱。

有人这样评价 Gentoo:快速、设计干净而有弹性,它的出名是因为其高度的自定制性(基于源代码的发行版)。尽管安装时可以选择预先编译好的软件包,但是大部分使用 Gentoo 的用户都选择自己手动编译。这也是为什么 Gentoo 适合比较有 Linux 使用经验的老手使用。

要注意的是,由于编译软件需要消耗大量的时间,所以,如果你所有的软件都由自己编译,并安装 KDE 桌面系统等比较大的软件包,则可能需要花费很长时间。

5) 其他 Linux 发行版

除以上 4 种 Linux 发行版外,还有很多其他版本,表 1 罗列了几种常见的 Linux 发行版以及它们各自的特点:
 

表 1 Linux 发行版及特点汇总
版本名称网 址特 点软件包管理器
Debian Linuxwww.debian.org开放的开发模式,且易于进行软件包升级apt
Fedora Corewww.redhat.com拥有数量庞人的用户,优秀的社区技术支持. 并且有许多创新up2date(rpm),yum (rpm)
CentOSwww.centos.orgCentOS 是一种对 RHEL(Red Hat Enterprise Linux)源代码再编译的产物,由于 Linux 是开发源代码的操作系统,并不排斥样基于源代码的再分发,CentOS 就是将商业的 Linux 操作系统 RHEL 进行源代码再编译后分发,并在 RHEL 的基础上修正了不少已知的漏洞rpm
SUSE Linuxwww.suse.com专业的操作系统,易用的 YaST 软件包管理系统YaST(rpm),第三方 apt (rpm)软件库(repository)
Mandrivawww.mandriva.com操作界面友好,使用图形配置工具,有庞大的社区进行技术支持,支持 NTFS 分区的大小变更rpm
KNOPPIXwww.knoppix.com可以直接在 CD 上运行,具有优秀的硬件检测和适配能力,可作为系统的急救盘使用apt
Gentoo Linuxwww.gentoo.org高度的可定制性,使用手册完整portage
Ubuntuwww.ubuntu.com优秀已用的桌面环境,基于 Debian 构建apt

Linux 发行版本的选择

Linux 的发行版本众多,在此不逐一介绍,下面给选择 Linux 发行版本犯愁的朋友一点建议:

  1. 如果你需要的是一个服务器系统,而且已经厌烦了各种 Linux 的配置,只是想要一个比较稳定的服务器系统,那么建议你选择 CentOS 或 RHEL。
  2. 如果你只是需要一个桌面系统,而且既不想使用盗版,又不想花大价钱购买商业软件,不想自己定制,也不想在系统上浪费太多时间,则可以选择 Ubuntu。
  3. 如果你想深入摸索一下 Linux 各个方面的知识,而且还想非常灵活地定制自己的 Linux 系统,那就选择 Gentoo 吧,尽情享受 Gentoo 带来的自由快感。
  4. 如果你对系统稳定性要求很高,则可以考虑 FreeBSD。
  5. 如果你需要使用数据库高级服务和电子邮件网络应用,则可以选择 SuSE。


以上纯属个人化建议,非官方指导意见。其实 Linux 的发行版本众多,但是系统的核心——内核却系出同门,所以只要学会使用其中一种,即可触类旁通。

 

1.9 这么多Linux发行版,哪个最适合初学者?

前面章节中,已经对几个常见的 Linux 发行版做了简单的介绍,那么对于初学者来说,选择哪个发行版的性价比更高呢?

通常情况下,初学者学习 Linux,是为了找一份和 Linux 相关的工作,那么问题来了,你知道大多数企业用哪一个 Linux 发行版搭建服务器吗?虽然没有官方统计,但凭借多年的工作经验来分析,国内大多数企业使用的都是 RHEL 或者 CentOS 作为服务器操作系统。

我们知道,RHEL 和 CentOS 都是 Red Hat 公司的产物,其中 CentOS 还可以认为是 RHEL 的克隆版本。对于 Linux 初学者来说,RHEL 和 CentOS 唯一的区别在于:

  • RHEL 可以免费下载使用,但是要想获得官方授权,就必须购买授权协议(也就是所谓的服务),而且这个服务费并不便宜;
  • CentOS 是使用免费的 RHEL 的源代码重新编译而成的,免费提供给大家,而且其本质上和 RHEL 没什么区别。

以 yum 工具为例(此工具对学习 Linux 很重要,具体用法会在后续章节讲解),在未购买服务的 RHEL 上,yum 是不能使用的;而在 CentOS 上,有免费的 yum 工具可以使用。

不仅如此,这里列举了几点推荐大家使用 CenOS 的理由:

  1. 国内多数企业使用 RHEL 搭建服务器,而且目前使用 CentOS 的企业越来越多;
  2. CentOS 和 RHEL 几乎一样,且 CentOS 有免费的 yum 工具可以使用;
  3. CentOS 目前已经加入 Red Hat 公司,且依旧完全免费;
  4. 学习 Linux 的本质,是要学习它最核心的那些机制,而 CentOS 并没有改变这些机制;
  5. 本教程中,所有案例都是用 CentOS 发行版来完成。


总之,要想吃 Linux 这碗饭,CentOS 是非常好的选择,在免费使用的同时,还可以体验到大型互联网公司的服务器系统环境,这对于未来面试找工作也是非常有利的。

有关 CentOS 系统的下载和安装,后续章节会做详细介绍。

 

1.10 Linux桌面环境大比拼[附带优缺点]

 

早期的 Linux 系统都是不带界面的,只能通过命令来管理,比如运行程序、编辑文档、删除文件等。所以,要想熟练使用 Linux,就必须记忆很多命令。

后来随着 Windows 的普及,计算机界面变得越来越漂亮,点点鼠标就能完成很多工作,人们已经习惯了图形界面化的操作,很难再忍受一片漆黑的命令行窗口了。这推动了 Linux 社区进行变革,很快推出了 Linux 系统的图形界面环境。

完成工作的方式不止一种,Linux 一直以来都以此而闻名,在图形桌面上更是如此,Linux 有各种各样的图形化桌面可供选择。

Linux 中的桌面环境也是一个程序,它和内核不是绑定的,两者的开发也不是同步的;给不带界面的 Linux 系统安装上一个桌面环境,你就能看到各种漂亮的窗口,并能用鼠标点击它们了。

上节讲到的各种 Linux 发行版其实已经附带了某种桌面环境,如果你喜欢折腾,也可以更换其它桌面环境。

个人电脑一般都会安装上桌面环境,这样操作更加便捷;Linux 服务器为了节省资源,一般都不会安装桌面环境。

下面给大家介绍几款比较流行的桌面环境。

1. KDE 桌面系统

KDE 是 K Desktop Environment 的缩写,中文译为“K桌面环境”。

KDE 是基于大名鼎鼎的 Qt 的,最初于 1996 年作为开源项目公布,并在 1998 年发布了第一个版本,现在 KDE 几乎是排名第一的桌面环境了。

许多流行的 Linux 发行版都提供了 KDE 桌面环境,比如 Ubuntu、Linux Mint、OpenSUSE、Fedora、Kubuntu、PC Linux OS 等。

KDE 和 Windows 比较类似,各位初学者相信都是 Windows 的用户,所以切换到 KDE 也不会有太大的障碍。

KDE 允许你把应用程序图标和文件图标放置在桌面的特定位置上。单击应用程序图标,Linux 系统就会运行该应用程序。单击文件图标,KDE 桌面就会确定使用哪种应用程序来处理该文件。

KDE 是所有桌面环境中最容易定制的。在其他桌面环境中,你需要几个插件、窗口组件和调整工具才可以定制环境,KDE 将所有工具和窗口组件都塞入到系统设置中。借助先进的设置管理器,可以控制一切,不需要任何第三方工具,就可以根据用户的喜好和要求来美化及调整桌面。

KDE 项目组还还发了大量的可运行在 KDE 环境中的应用程序,包括 Dolphin(文件管理工具)、Konsole(终端)、Kate(文本编辑工具)、Gwenview(图片查看工具)、Okular(文档及PDF查看工具)、Digikam(照片编辑和整理工具)、KMail(电子邮件客户软件)、Quassel(IRC客户软件)、K3b(DVD刻录程序)、Krunner(启动器)等,它们都是默认安装的。

对 KDE 优缺点的总结:

  • 优点:KDE 几乎是最先进最强大的桌面环境,它外观优美、高度可定制、兼容比较旧的硬件设备
  • 缺点:Kmail 等一些组件的配置对新手来说过于复杂。

 

Linux KDE桌面环境
图1:KDE 桌面环境截图

2. GNOME 桌面环境

GNOME 是 the GNU Network Object Model Environment 的缩写,中文译为“GNU网络对象模型环境”。

GNOME 于 1999 年首次发布,现已成为许多Linux发行版默认的桌面环境(不过用得最多的是 Red Hat Linux)。

GNOME 的特点是简洁、运行速度快,但是没有太多的定制选项,用户需要安装第三方工具来实现。

GNOME 甚至不包括一些简单的调整选项,比如更改主题、更改字体等,就这两种基本的调整而言,用户都需要安装第三方工具。所以,GONME 适合那些不需要高度定制界面的用户。

GNOME 被用作 Fedora 中的默认桌面环境,提供在几款流行的 Linux 发行版中,比如 Ubuntu、Debian、OpenSUSE 等。

2011 年,GNOME 3 进行了重大更新,不再采用传统的 Windows 风格的界面,而是进行了全新的设计,惊艳了很多用户。GNOME 3 的这种行为也导致部分用户和开发人员不满,他们又开发了多款其他的桌面环境,比如 MATE 和 Cinnamon。

对 GNOME 优缺点的总结:

  • 优点:简单易用,可通过插件来扩展功能。
  • 缺点:对插件的管理能力比较差,也缺少其它桌面环境拥有的许多功能。

 

GNOME桌面环境截图
图2:GNOME 桌面环境截图

3. Unity

Unity 是由 Ubuntu 的母公司 Canonical 开发的一款外壳。之所以说它是外壳,是因为 Unity 运行在 GNOME 桌面环境之上,使用了所有 GNOME 的核心应用程序。

2010 年,Unity 第一个版本发布,此后经过数次改进,如今和其它的桌面环境一样,也可以安装到其它的 Linux 发行版上了。

Unity 使用了不同的界面风格,如果你用的是 Ubuntu Linux 发行版,你会注意到 Unity 与 KDE 和 GNOME 桌面环境有些不一样。

Unity 在左边有一个启动器,位于启动器顶部的是搜索图标,又叫“Dash”。在 Dash 上搜索文件时,不仅会给出来自硬盘的搜索结果,还会给出来自在线来源的搜索结果,比如 Google Drive、Facebook、Picasa、Flick 及其他。

Unity 还提供了隐藏启动器、触摸侧边栏就显示的选项,用户还可以调高/调低显示启动器菜单的灵敏度。

Unity 很简单、运行速度快,但 Unity 在系统设置下却没有定制桌面的太多选项,要想安装主题或者定制另外不同的选项,比如系统菜单是否应该总是可见,或者“从启动器图标一次点击最小化”,用户需要安装第三方工具。

CCSM 和 Unity Tweak Tool 是面向 Unity 桌面环境的非常流行的定制工具。

对 Unity 优缺点的总结:

  • 优点:界面简洁直观,可以通过第三方工具来深度定制,而且使用了平视显示器(HUD)等新技术。
  • 缺点:默认的定制功能比较差劲,通知机制一般。

 

Unity桌面环境截图
图3:Unity桌面环境截图

4. MATE

上面我们提到,GNOME 3 进行了全新的界面设计,这招致一些用户的不满,他们推出了其它的桌面环境,MATE 就是其中之一。

MATE 是一种从现在无人维护的 GNOME 2 代码库派生出来的桌面环境。

MATE 让人觉得在使用旧的桌面环境,但是结合了历年来界面方面的诸多改进。MATE 还非常适用于低配计算机,所以如果你有一台旧的或速度较慢的计算机,可以使用 MATE。

MATE 还是许多流行的 Linux 发行版随带的,比如 Ubuntu、Linux Mint、Mageia、Debian 及另外更多发行版。Ubuntu MATE 头一回是官方版本。

“欢迎首次发布的 Ubuntu MATE 官方版本。现在,用户将更容易更新软件,因为所有组件现在都在 Ubuntu 软件库中。”

MATE 自带的应用程序包括 Caja(文件管理工具)、Pluma(文本编辑工具)、Atril(文档查看工具)、Eye of MATE(图像查看工具)等,如果用户不需要其他功能完备的桌面环境的所有额外功能,那么 MATE 对他们来说是一款简单的轻量级桌面环境。

对 META 优缺点的总结:

  • 优点:轻量级的桌面环境,能够兼容教旧的硬件设备。
  • 缺点:我也不知道有什么明显的缺点,欢迎读者留言告知。

 

MATE桌面环境截图
图4:MATE 桌面环境截图

5. Cinnamon

与 MATE 类似,Cinnamon 是由 Linux Mint 团队因为不满 Gnome 3 的改进而开发的另一种桌面环境。但 Cinnamon 与 MATE 不同之处在于,Cinnamon 建立在 Gnome 3 的基础上。Cinnamon 是新的,而且在积极开发之中,但这款出色的桌面环境没有因新颖而在功能方面有所减弱。

Cinnamon 拥有 GNOME 和 Unity 等其它桌面环境所没有的种种功能。Cinnamon 是高度可定制的桌面环境,不需要任何外部插件、窗口组件和调整工具来定制桌面。Cinnamon 甚至可以通过设置管理器本身来下载并安装主题,甚至不需要打开互联网浏览器。

由于种种出色的所需功能,Cinnamon 对任何刚接触 Linux 的新用户来说都非常方便。许多用户放弃使用 Linux,是因为他们并不了解 Linux 的工作方式,但是我强烈建议新手应从 Cinnamon 桌面环境开始入手。

许多流行的 Linux 发行版提供了各自版本的 Cinnamon,比如 Ubuntu、Fedora、OpenSUSE、Gentoo、Arch Linux 等。Cinnamon 还是 Linux Mint 的默认桌面环境。
 

Cinnamon 桌面环境截图
图5:Cinnamon 桌面环境截图


对 Cinnamon 优缺点的总结:

  • 优点:成熟完美,高度可性质,适合 Linux 新手。
  • 缺点:有时候可能会有软件错误。

6. 适用于较老硬件设备的 Linux 桌面环境

图形化桌面环境的弊端在于它们要占用相当一部分的系统资源来保证正常运行。在 Linux 发展之初,Linux 的标志和卖点之一就是它可以运行在处理能力较弱的老旧 PC 上,这些 PC 无力运行较新的 Windows 桌面。

然而随着 KDE 和 GNOME 桌面环境的普及,情况发生了变化。运行 KDE 或 GNOME 桌面要占用的内存资源和较新的 Windows 桌面环境旗鼓相当。

如果你的 PC 已经有些年代了,也不要泄气。Linux 开发人员已经联手让 Linux 返璞归真。他们开发了一些低内存开销的图形化桌面应用,提供了能够在老旧 PC 上完美运行的基本功能。尽管这些图形化桌面环境并没有大量专为其设计的应用,但它们仍然能运行许多基本的图形化程序,支持如文字处理、电子表格、数据库、绘图以及多媒体等功能。

下表列出了一些可在配置较低的 PC 和笔记本电脑上运行的轻量级 Linux 图形化桌面环境。
 

桌面环境说明
Fluxbox一个没有面板的轻型桌面,仅有一个可用来启动程序的弹出式菜单。
Xfce和 KDE 很像的一个桌面,但少了很多图像以适应低内存环境。
JWMJoe 的窗口管理器(Joe’s Window Manager),非常适用于低内存低硬盘空间环境的超轻型桌面。
Fvwm支持如虚拟桌面和面板等高级桌面功能,但能够在低内存环境中运行。
fvwm95从 fvwm 衍生而来,但看起来更像是 Windows 95 桌面。


以上这些图形化桌面环境并不如 KDE 或 GNOME 桌面一样绚丽,但却提供了恰到好处的基本图形化功能。

如果你用的是老旧 PC,尝试一下基于上述某个桌面环境的 Linux 发行版,看看怎么样,可能会有惊喜哦。
 

JWM 桌面环境截图
图6:JWM 桌面环境截图

查看桌面环境

我们可以通过环境变量 DESKTOP_SESSION 来查看当前 Linux 发行版使用了哪种桌面环境,例如:

[c.biancheng.net]$ echo $DESKTOP_SESSION
gnome-classic

这表明我使用的是 GNOME。

另外,你也可以查看/etc下有没有对应的目录,例如 gnome 目录或者 kde 目录,如果有的话,就说明已经安装了。

1.11 Linux的主要应用领域有哪些?

 

Linux 似乎在我们平时的生活中很少看到,那么它应用在哪些领域呢?其实,在生活中随时随地都有 Linux 为我们服务着。

网站服务器

用事实说话!访问国际知名的 Netcraft 网站 http:// www.netcraft.com,在 "What's that site running?" 的地址栏内输入想了解信息的网站地址(该功能位于网页右侧),单击箭头图标即可搜索到相关信息,如图 1 所示。


Netcraft
图 1 Netcraft


在搜索结果中会看到网站的操作系统信息。例如,搜索百度网站 www.baidu.com,可以看至 OS 显示为 Linux,如下图所示。


www.baidu.com 服务器
图 2  www.baidu.com 服务器历史


Netcraft 可以理解为一个基于 Web 页面的扫描器,至于扫描,就好像小偷踩点。小偷在偷东西之前拿一堆小广告的宣传单,每天在想要盗窃的户门上插小广告,连续一周,之后去观察,哪家门上7张广告怎么插上的还怎么放在那儿,就要倒霉了,一直没人;哪家门上两张,地下三张,剩下的两张不知道哪儿去了,尽量不下手,不确定什么时候有人;哪家门上和地下都很干净,打死都不能下手,保不齐门一撬开,四个彪形大汉正在打麻将呢!这门技术对窃贼来说叫作踩点,网站扫描和小偷踩点的道理类似……

所以黑客攻击别人电脑的第一个步骤也叫踩点,我们做网络的安全扫描检测与此原理相同,只不过不是发小广告观察结果,而是向对方电脑发数据包,根据返回的应答数据包分析对方电脑的信息。

验证一下哪些大型网站在使用 Linux。世界知名的网站 google.com、qq.com、新浪、网易等,无一例外地应用着 Linux。就连你输入 microsoft.com,会发现微软的下载站等也在使用 Linux。

为什么这么多大型网站会采用 Linux 而不使用 UNIX 或 Windows?其中一个重要的原因就是使用 Linux 成本较低,而 UNIX 和 Windows 都是商业软件;另一个更重要的原因是出于安全和性能方面的考虑。

想更多了解 Linux 在服务器领域的市场份额,请猛击《Linux已经霸占了服务器领域》。

电影工业

1998 年,《泰坦尼克号》那些看起来真实、恐怖的豪华巨轮与冰山相撞最终沉没的场面要归功于 Linux,归功于电影特技效果公司里终日处理数据的 100 多台 Linux 服务器。

在过去,SGI 图形工作站支配了整个电影产业,20 世纪 90 年代的影片《侏罗纪公园》中生动的恐龙正是从 SGI 上孕育出来的,SGI 的操作系统 Irix 就是 UNIX 的一种。当时所有动画制作公司都得看 SGI 的脸色。然而,从 1997 年开始,Linux 开始全面占领好莱坞,娱乐业巨擘迪士尼宣布全面采用 Linux,宣告了 SGI 时代的没落,Linux 时代走向辉煌。

好莱坞精明的电影人热情地拥抱 Linux,其中的原因不言而喻。首先,Linux 作为开源软件,可以节省大量成本;其次,Linux 具有商业软件不具备的功能定制化特点,各家电影厂商都可依据自己的制片需要铺设相关平台。到现在为止,使用 Linux 制作的好莱坞大片已经有几百部。

嵌入式应用

由于 Linux 系统开放源代码,功能强大、可靠、稳定性强、灵活而且具有极大的伸缩性,再加上它广泛支持大量的微处理器体系结构、硬件设备、图形支持和通信协议,因此在嵌入式应用的领域里,从因特网设备(路由器、交换机、防火墙、负载均衡器等)到专用的控制系统(自动售货机、手机、PDA、各种家用电器等),几乎涵盖了生活中的所有电器设备,如手机、平板电脑、电视机顶盒、游戏机、智能电视、汽车、数码相机、自动售货机、工业自动化仪表与医疗仪器等。

嵌入式系统是以应用为中心,以计算机技术为基础,并且软硬件可定制,适用于各种应用场合,对功能、可靠注、成本、体积、功耗有严格要求的专用计算机系统。它一般由嵌入式微处理器、外围硬件设备、嵌入式操作系统及用户的应用程序 4 部分组成,用于实现对其他设备的控制、监视或管理等。

这里,不得不提的是安卓系统(Android)。安卓是基于 Linux 的开源系统,主要适用于便携设备,如智能手机和平板电脑等,是 Google 公司为移动终端打造的真正开放和完整的移动软件。在如今的智能手机操作系统市场上,安卓系统的占有率已然是傲视群雄。

从安卓手机至智能机器人,从大型网站到美国太空站,Linux 都已涉足其中。Linux 的发展震动了整个科技界,动摇了微软一贯以来的霸权,并且为科技界贡献了一种软件制造的新方式。

Top500(www.top500.org)是评定全球 500 台最快的超算系统性能榜单,连续多届,在世界上 500 台超级计算机里,超过 9 成为 Linux 系统!如果你还关在家里面,认为全世界都是 Windows,则无异于坐井观天。世界那么大,出去看看吧!

1.12 Linux已经霸占了服务器领域!

 

如今的 IT 服务器领域是 Linux、UNIX、Windows 三分天下,Linux 系统可谓后起之秀,特别是“互联网热”以来,Linux 在服务器端的市场份额不断扩大,每年增长势头迅猛,开始对 Windows 和 UNIX 的地位构成严重威胁。

下图是 2016 年初国内服务器端各个操作系统的市场份额:
 

服务器操作系统市场份额


可以看出来,Linux(包括 CentOS、Ubuntu 等)已经占据了 80% 左右的市场份额,剩下的基本被 Windows 和 Solaris 瓜分。在未来的服务器领域,Linux 是大势所趋。

Solaris 是 Sun Microsystems 研发的计算机操作系统,被认为是 UNIX 操作系统的衍生版本之一。

Linux 在服务器上的应用非常广泛,可以用来搭建 Web 服务器、数据库服务器、负载均衡服务器(CDN)、邮件服务器、DNS服务器、反向代理服务器、VPN服务器、路由器等。用 Linux 作为服务器系统不但非常高效和稳定,还不用担心版权问题,不用付费。

正是由于 Linux 服务器的大规模应用,才需要一批专业的人才去管理,这群人就是 Linux 运维工程师(OPS)。

OPS 就是负责 Linux 服务器的运行和维护。随着互联网的爆发,Linux 运维在最近几年也迎来了春天,出现了大量的职位需求,催生了一批 Linux 运维培训班。

OPS 的主要工作就是搭建起运行环境,让程序员写的代码能够高效、稳定、安全地在服务器上运行,他们属于后勤部门。OPS 的要求并不比程序员低,优秀的 OPS 拥有架设服务器集群的能力,还会编程开发常用的工具。

OPS 这项工作的细节内容包括:

  • 安装操作系统,例如 CentOS、Ubuntu 等。
  • 部署代码运行环境,例如网站后台语言采用 PHP,就需要安装 Nginx、Apache、MySQL、PHP运行时等。
  • 及时修复漏洞,防止服务器被攻击,这包括Linux本身漏洞以及各个软件的漏洞。
  • 根据项目需求升级软件,例如 PHP 7.0 在性能方面获得了重大突破,如果现在服务器压力比较大,就可以考虑将旧版的 PHP 5.x 升级到 PHP 7.0。
  • 监控服务器压力,别让服务器宕机。例如淘宝双十一的时候就会瞬间涌入大量用户,导致部分服务器宕机,网页没法访问,甚至连支付宝都不能使用。
  • 分析日志,及时发现代码或者环境的问题,通知相关人员修复。

1.13 开源软件是什么?有哪些?

 

Linux 是一款开源软件,我们可以随意浏览和修改它的源代码,学习 Linux,不得不谈到开源精神。Linux 本身就是开源精神的受益者,它几乎是全球最大的开源软件。

简单来说,开源软件就是把软件程序与源代码文件一起打包提供给用户,用户既可以不受限制地使用该软件的全部功能,也可以根据自己的需求修改源代码,甚至编制成衍生产品再次发布出去。

用户具有使用自由、修改自由、重新发布自由和创建衍生品自由,这正好符合了黑客和极客对自由的追求,因此开源软件在国内外都有着很高的人气,大家聚集在开源社区,共同推动开源软件的进步。

坦白来讲,每一位投身 Linux 的技术人或者程序员,只要听到开源项目就会由衷地感到自豪,这是一种从骨子里面带有的独特情况。

支持开源软件的企业不单出是为了利益,而是相互扶持,共同努力服务好更多的用户。
 

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

 

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


国内外开源社区推荐:开源中国ChinaUnixGitHubApacheSourceForge

开源社区以国外为主,国内开源社区由于资金、人才、气氛等问题一直不太稳定,最后附上一张开源社区汇总图。
 

开源软件生态体系

 

1.14 开源协议是什么?有哪些?

 

开源软件在追求“自由”的同时,不能牺牲程序员的利益,否则将会影响程序员的创造激情,因此世界上现在有 60 多种被开源促进组织(Open Source Initiative)认可的开源许可协议来保证开源工作者的权益。

开源协议规定了你在使用开源软件时的权利和责任,也就是规定了你可以做什么,不可以做什么。

开源协议虽然不一定具备法律效力,但是当涉及软件版权纠纷时,开源协议也是非常重要的证据之一。

对于准备编写一款开源软件的开发人员,也非常建议先了解一下当前最热门的开源许可协议,选择一个合适的开源许可协议来最大限度保护自己的软件权益。

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

GUN GPL开源协议图标


只要软件中包含了遵循 GPL 协议的产品或代码,该软件就必须也遵循 GPL 许可协议,也就是必须开源免费,不能闭源收费,因此这个协议并不适合商用软件。

遵循 GPL 协议的开源软件数量极其庞大,包括 Linux 系统在内的大多数的开源软件都是基于这个协议的。
 

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

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

BSD开源协议图标


BSD 协议基本上允许用户“为所欲为”,用户可以使用、修改和重新发布遵循该许可的软件,并且可以将软件作为商业软件发布和销售,前提是需要满足下面三个条件:

  • 如果再发布的软件中包含源代码,则源代码必须继续遵循 BSD 许可协议。
  • 如果再发布的软件中只有二进制程序,则需要在相关文档或版权文件中声明原始代码遵循了 BSD 协议。
  • 不允许用原始软件的名字、作者名字或机构名称进行市场推广。


BSD 对商业比较友好,很多公司在选用开源产品的时候都首选 BSD 协议,因为可以完全控制这些第三方的代码,甚至在必要的时候可以修改或者二次开发。

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

Apache开源协议


Apache 和 BSD 类似,都适用于商业软件。Apache 协议在为开发人员提供版权及专利许可的同时,允许用户拥有修改代码及再发布的自由。

现在热门的 Hadoop、Apache HTTP Server、MongoDB 等项目都是基于该许可协议研发的,程序开发人员在开发遵循该协议的软件时,要严格遵守下面的四个条件:

  • 该软件及其衍生品必须继续使用 Apache 许可协议。
  • 如果修改了程序源代码,需要在文档中进行声明。
  • 若软件是基于他人的源代码编写而成的,则需要保留原始代码的协议、商标、专利声明及其他原作者声明的内容信息。
  • 如果再发布的软件中有声明文件,则需在此文件中标注 Apache 许可协议及其他许可协议。

4) MIT(Massachusetts Institute of Technology)协议

目前限制最少的开源许可协议之一(比 BSD 和 Apache 的限制都少),只要程序的开发者在修改后的源代码中保留原作者的许可信息即可,因此普遍被商业软件所使用。

使用 MIT 协议的软件有 PuTTY、X Window System、Ruby on Rails、Lua 5.0 onwards、Mono 等。

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

LGPL 是 GPL 的一个衍生版本,也被称为 GPL V2,该协议主要是为类库设计的开源协议。

LGPL 允许商业软件通过类库引用(link)的方式使用 LGPL 类库,而不需要开源商业软件的代码。这使得采用 LGPL 协议的开源代码可以被商业软件作为类库引用并发布和销售。

但是如果修改 LGPL 协议的代码或者衍生品,则所有修改的代码,涉及修改部分的额外代码和衍生的代码都必须采用 LGPL 协议。因此LGPL协议的开源代码很适合作为第三方类库被商业软件引用,但不适合希望以 LGPL 协议代码为基础,通过修改和衍生的方式做二次开发的商业软件采用。

如何选择开源协议

世界上的开源协议有上百种(有兴趣的读者请猛击这里了解),很少有人能彻底搞清它们之间的区别,即使在最流行的六种开源协议——GPL、BSD、MIT、Mozilla、Apache 和 LGPL——之中做选择,也很复杂。

乌克兰程序员 Paul Bagwell 画了一张分析图,说明应该怎么选择开源协议,大家看了一目了然,真是清爽。

图片来自于阮一峰博客: 如何选择开源协议

如何选择开源协议

 

1.15 开源就等于免费吗?用事实来说话

首先,开源软件和免费软件是两个概念:

  • 开源软件是指公开源代码的软件。开源软件在发行的时候会附上软件的源代码,并授权允许用户更改、传播或者二次开发。
  • 免费软件就是免费提供给用户使用的软件,但是在免费的同时,通常也会有一些限制,比如源代码不公开,用户不能随意修改、不能二次发布等。


免费软件的例子比比皆是,QQ、微信、迅雷、酷狗、360 等都是免费软件,你可以随意使用,尽情蹂躏;但是,如果你嫌弃它们复杂,自己删除了一些无用的功能,然后在网上发布了一个精简版本供大家下载,那么你就离法院的传票不远了。

开源软件是不抵触商业的,开源的目的也不是做慈善事业,而是通过更多人的参与,减少软件的缺陷,丰富软件的功能,同时也避免了少数人在软件里留一些不正当的后门。开源软件最终还会反哺商业,让商业公司为用户提供更好的产品。

Android 就是大众最熟知的一款开源操作系统,它除了用在手机上,还用在汽车、平板电脑、电视、智能手表等其它硬件平台,小米、华为、OPPO、三星等都是 Android 的受益者,他们都赚得盆满钵满。

很多著名的开源项目背后都有商业公司支撑,它们的开发者也都有正式的工作,享受和我们一样的社会福利;如果一个成功的开源项目背后没有商业公司,这反而是不健康的,社会需要开源和商业之间的互补来促进技术的革新。

开源软件和商业公司的裙带关系:

  • Android 由全球最大的互联网公司 Google 支持;
  • 市场占有率最高的关系型数据库 MySQL 已经被上市公司 Oracle 收购;
  • Linux 不但被 Microsoft、IBM、Intel、SAMSUNG 等巨头免费赞助,还接收它们贡献的源代码;
  • Python 目前属于 python.org 开源组织,它收到了 Facebook、Google、Amazon、Redhat、Microsoft 等商业公司的赞助。

开源软件的盈利模式

伟大的开源软件的背后都有巨量的资金流入,没有资金支撑的开源软件是无法长久的。那么,开源软件究竟是如何盈利的呢?

1) 双重许可

有些开源软件不但有一个免费的基础版本,还有一个收费的商业版本。免费版本能够促进传播,让用户爱上该软件;收费版本功能更加丰富,还提供技术支持。这种情况在开源界非常普遍。

例如 MySQL 就同时推出面向个人和企业的两种版本,即开源版本和专业版本,分别采用不同的授权方式:开源版本完全免费以便更好的推广,而从专业版的许可销售和支持服务获得收入。

2) 技术支持

很多软件在使用上不收取费用,但当用户在使用产品遇到困难,需要技术支持的时候,就需要付费了。技术支持收费的这项服务,也是一些开源公司的生计之路。

例如,最大的开源软件公司 Redhat 被 IBM 收购,卖了 340 亿美元。Redhat 虽然提供免费的 Linux 发行版(当然也有收费的版本),但是当使用者遇到技术障碍,或者想升级硬件的时候,Redhat 可以提供付费支持。

举个例子,纽交所在用免费的红帽 Linux 系统交易股票。英特尔最近升级了处理器,纽交所想用新处理器提高效率,但这需要有人为新硬件部署新的系统和应用程序。同样的事每隔几年会发生一次。纽交所可以养一个团队自己完成所有系统维护、开发工作,也可以花钱请红帽的工程师来做。相当数量的企业用户都选择了后者。 

3) 附加服务

JBoss 就是这种模式的典型代表。JBoss 应用服务器完全免费,而通过提供技术文档、培训、二次开发支持等技术服务而获得收入。

开源软件出版商 O'Reilly 公司也是这种模式,它不遗余力地联系开源软件的权威人士,组织各种开源软件的会议,虽然知识是免费的,但承载知识的书籍却是收费的。

4) 应用服务托管(ASP)

例如 PHP Live ! 就是一种构架于 PHP、MySQL 之上的开源软件,它可为企业用户提供实时交谈服务。目前已经有数十家公开提供 PHP Live! 托管服务的应用服务提供商。

5) 软硬件一体化

比如 IBM、HP 等服务器供应商巨头,通过捆绑免费的 Linux 操作系统销售硬件服务器。SUN 公司近期将其 Solaris 操作系统开放源码,以确保服务器硬件的销售收入,也是这种模式的体现。

这些巨头每年在开源软件领域的投入巨大,但这一切并非是做善事,它们可以从配置了开源软件的硬件中获得巨额回报。

6) 部分组件收费

开源免费的软件可以满足大部分用户的需求,但是也有很多用户需要一些特殊的定制服务,这个时候软件公司就会收取一定的费用。

7) 版权收费

虽然代码是开源的,但很多作者会采用一些开源协议来限制自己版权问题,如果用户想要去版权,是需要另外付费的。

8) 捐款/赞助

很多开源软件都有一些捐款渠道,喜爱该软件的用户,或者该软件的受益者都可以进行资金支持。

例如,Python 就有一个软件基金协会,它收到了来自 Facebook、Amazon、Google、Redhat、Microsoft 等巨头的赞助。

这些公司也不傻,他们为什么会赞助 Python 呢?因为这些公司大量使用了 Python 语言,他们希望 Python 能够持续发展,如果 Python 倒了,他们也会跟着倒霉。

 

1.16 如何学习Linux(新手必看)

 

本节旨在介绍对于初学者如何学习 Linux 的建议。如果你已经确定对 Linux 产生了兴趣,那么接下来我们介绍一下学习 Linux 的方法。

如何去学习

学习大多类似庖丁解牛,对事物的认识一般都是由浅入深、由表及里的过程,循序才能渐进。学习 Linux 同样要有一定的顺序和方法,当然这也是你学习本教程的意义。如果你是初学者,那么建议按照本教程的顺序阅读,不要跳跃,欲速则不达,揠苗也不见得能助长。

另外,强烈建议做好读书笔记,边看边记,边练习边思考,“学而不思则罔,思而不学则殆”,比勤奋更重要的是思考的能力,不要傻学、死学。养成看书的好习惯,学习类的图书如果没能看成自己知识的积累,就是白读。一本书,可能看一遍是不够的,多次阅读,反复实践,才能印象深刻。笔者曾翻烂 8 本《恋爱宝典》,但是从没向任何人表白,结果不言自明。实践是检验真理的唯一标准,实践出真知。

方法有了,贵在坚持。制定好自己的学习目标,设定奖惩,确定详细的时间进度表,开始行动!保持热情,坚定目标,做好计划,希望你、不会让本教程变成你的收藏品,而是成为一套可能会改变你职场命运的技术指导教程,那将是我们最大的荣幸。

碰到问题怎么办

任何人学习和使用 Linux 或多或少会遇到问题,很多人遇到问题的第一个念头就是问人。没错!这可以快速解决问题。但是我们建议你,先尝试自己解决问题,询问别人获得答案固然好,但是对于知识的积累和提升解决问题的能力并没有帮助,不要做依赖别人帮助的懒虫。

在寻找答案的过程中,虽然会花费很多时间,也可能会遇到挫折,但久而久之你会发现,也许为了找一个问题的解答,你了解了 Linux 很多相关的知识,经验也越来越丰富。记住,你不可能永远有人问,也不可能永远有人愿意回答你。

Linux 系统的一个非常大的好处是,当命令执行错误或系统设置错误时,通常会清楚地显示错误信息,告诉你哪里出错了,只要认真观察报错信息,大概就知道问题出现在哪里,应该如何解决了。有的操作步骤复杂,出现状况时,回头检査一下,是不是前面步骤的命令敲错或配置文件改错。

Linux 的帮助文档是很好的工具,命令的选项、配置文件的设置都可以从这里找到答案;我们在提问前,一定要先在网络上寻找答案,借用一句广告语"百度一下,你就知道",没有人愿意回答网上一搜就可以找到答案的问题。

提问时,确认你已经做了上述事情,这有助于树立你不是寄生虫与浪费别人时间的形象。轻率的提问只能得到轻率的回答,或者压根儿没人理你。

有的被询问者常常不是很清楚初学者要问什么,因为初学者没有完整、清楚地描述问题。在求助他人时,说明要做什么、做了什么,列出完整的操作步骤、错误信息或错误截图,描述清晰,让别人能看懂你的问题,否则笔者就算变成超人也帮不了你。

在请教问题时,要注意礼貌。很多年轻人,多了一点理所应当,少了一些礼貌用语,你自然会感到世态炎凉,技术圈子没有人性,毕竟人家不回答你是本分,回答你是人情。

另外,千万不要问那种令人头疼的问题,如 Linux 怎么备份、Linux 权限有明陛、xx 服务怎么配置、oo 脚本帮写一个……你问饺子皮为什么这么擀会破,我可以告诉你;你问怎么包饺子,这就是你找茬儿了,先在网上找找,人生苦短,快用百度,然后照猫画虎时哪个步骤有问题你再问……

提问,也是一种智慧。

英文读不懂怎么办

每次在教授 Linux 课程时,笔者都要给读者介绍两个英文短语,一个是 "No such file or directory",另一个是 "command not found"。初学者在学习命令时问得最多的就是这两个问题:输入的文件或目录名称错误、命令没有被发现(命令敲错了)。

能看懂 Linux 的英文提示及英文文档非常重要。其实计算机英语很简单,只要熟记了计算机专业英语单词,高中毕业的英文水平就可以轻松阅读英文文档了。即便你的英文水平实在太差了,连最简单的计算机英文文档都看不懂,那么在学习 Linux 的同时学学英语,每天从背一定量的单词开始吧!

笔者给各位读者的建议是每天背 30 个在电脑上看到的不认识的单词,30 个单词不需要你会读、会写、会念,看到单词知道意思即可,一般 3~5 个月,常见的计算机英语都能看厪。

忘记Windows的思维方式

思想的转变比暂时性的技术提高更重要,因为它能帮助你加快学习速度。很多人使用 Linux 时骨子里却还是 Windows 的思想,比如讲 Linux 安装都会有读者问:“是把 Linux 装在 C 盘吗?”,可见被 Windows“毒害”之深。Windows 是一个优秀的系统,它的易用性非常好,不过也正是因为易用性好,使用者往往不了解自己所做操作的原理。

大多数初学者已经习惯了使用 Windows 的图形界面来完戚喿作,可是我们在学习和日后使用 Linux 时基本上在命令行模式下,这让很多初学者很头疼也很困惑。这里的问题是"如何有效利用系统资源",X Window 本身相当消耗系统资源,这也就是在架设 Linux 服务器时不启动图形界面的原因。如果你想深入了解 Linux,就必须学习命令行操作。

所以,我们在开始学习 Linux 之前,要不被 Windows 的思想所束缚。这其实是一个使用习惯的问题,笔者常常想,如果我们第一个接触的操作系统就是 Linux,那么之后我们再学习 Windows,可能我们也会感慨"这个系统为什么必须启动图形界面才能操作",说到底,是一个习惯问题吧。

学无止境,不仅是学到的知识,还有学习的意识和方法。笔者有一句话,与诸位共勉:“让学习成为一种习惯。”

1.17 想学好Linux,这些习惯必须养成(初学者必读)

 

不管是在生活还是工作中,每个人都会逐渐养成一些小习惯。坏习惯一旦形成就很难改正,所在在系统学习 Linux 之前,给大家一些建议,刻意去培养一些好的习惯,对自己是很有利的。

学习Linux,要习惯使用命令行

操作系统必须要有图形界面,但早期的 Linux 并不完全支持图形界面,操作起来也没有 Windows 系统流畅,这也是 Windows 系统比 Linux 系统流行的原因之一。在图形界面下进行操作,既直观又简洁,但 Linux 的图形界面存在许多小问题,所以未被大多数 PC 机用户认可。

个人电脑的操作系统大多为 Windows,其次为 macOS,服务器要托管在 IDC 机房,通过远程去管理,这种情况下,开启图形界面不仅耗费资源,而且远程管理时还会有网络带宽的额外开销,因此 Linux 在服务器领域比较流行。

目前,也有不少朋友喜欢使用 Linux 的图形界面及支持图形界面的远程连接工具来管理 Linux,但鉴于以上使用图形界面的几个弊端,建议初学者不要轻易使用 Linux 的图形界面。命令行是 Linux 系统正常运行的核心,也是专业 Linux 系统工程师必须掌握的技能,所以大家要习惯使用命令行。

操作Linux,要慎之又慎

问大家一个问题,你有没有误删过某个重要的文件呢?多数读者会回答“有”,任何人都会有疏忽的时候,但作为一名 Linux 系统管理员,每天都要和服务器打交道,养成严谨认真的习惯是非常有必要的。

其次,服务器上的数据非常重要,所以每天都必须备份,这样一旦数据损坏,还有挽救的余地;反之,数据将无法恢复,很有可能会造成非常严重的后果。

数据备份固然重要,但也经不起一次次的操作失误。在学习 Linux 命令行的过程中,我们输入命令的速度会越来越快,效率也会越来越高,但与此同时,很有可能会无意间输入错误的指令。比如,要删除某个目录,却把要删除目录的名字写错了,结果可想而知。

所以建议大家,输入命令的速度不要太快,看准了再按回车。另外,对于修改重要的配置文件,一定要养成修改前先备份的习惯,这样一旦出现问题,还可以将文件快速还原。

操作Linux,安全永远是第一位的

大家有没有这样的习惯,比如说:

  • 各个网站的账号和密码都一样;
  • 密码中包含自己的名字或者生曰;
  • 密码设置得非常简单,采用纯数字形式或者包含一些常用词汇 (如 love、china 等);
  • 将密码存在一个文档里,并保存到 U 盘中随身携带;
  • 密码使用了好多年,一直没有更改过。

以上列举的这几个习惯,不管符合几条,都说明你的安全意识还不够,需要加强。

要登录服务器,必不可少地要使用登录密码,密码如何设置、如何保存都是有讲究的,下面列举几个设置及保存密码需要注意的点:

  1. 密码设置得要复杂,至少要 8 个字符,其中包含数字和大小写字母,而且不能有规律性,且密码中不能包含自己的名字或者生曰;
  2. 不能在所有的网站都使用同一个账号和密码。近几年有多起账号泄露事件,如果在各大网站设置的密码都一样,一旦你在某一网站上的密码泄露了,那就相当于你所有的密码都泄露了。
  3. 密码最好不要长期沿用,建议每隔 1~3 个月修改一次。
  4. 密码不能保存在一个文档里,更不能把存有密码的文档存到可移动存储设备里。因为可移动存储设备有可能遗失,那么设置的密码也就遗失了。

除了密码,日常在办公室中,也要刻意培养一些习惯。例如,给自己的办公电脑设置密码、当离开工作岗位时将电脑锁屏,等等。

 

 

 

©️2020 CSDN 皮肤主题: 酷酷鲨 设计师:CSDN官方博客 返回首页