Linux探索之旅 | 第二部分第七课:软件安装,如虎添翼

Linux探索之旅 | 第二部分第七课:软件安装,如虎添翼
 
《Linux探索之旅》全系列

内容简介


  1. 第二部分第七课:软件安装,如虎添翼
  2. 第二部分第八课预告:RTFM 阅读那该死的手册

软件安装,如虎添翼


上一课 Linux探索之旅 | 第二部分第六课:Nano文本编辑器和终端配置 挺轻松的。

这一课也会比较轻松,所以好好享受吧~

我们来谈谈Linux下软件的安装,会在我们的Ubuntu这个Linux发行版中演示。

一般提到软件安装,有过Windows系统使用经验的朋友肯定深有体会,那个麻烦啊,大致流程是这样的:

  • 在搜索引擎(比如百度或google)中搜索我们的软件名称。

  • 看到一个不错的结果,点击进入。如果是官网一般会进入官网。

  • 下载此软件的安装程序。

  • 双击下载下来的安装程序,开始安装。一直按“下一步”,直到“完成”。

但是:

  • 有的软件还会问你要安装在何处。

  • 有的还会在你不知情的状况下安装捆绑软件,相当不开心。

  • 有的还有病毒... 这日子口简直没法过了...

但是在Linux系统中,特别是Ubuntu中,安装软件的流程绝对不是这样的,比Windows中安装软件方便、安全、捷多了。

而且,你会发现在Linux中安装软件是一种乐趣,就是这个feel,倍儿爽。

这也是Linux相对Windows的一个优点。我们一起来体验。

初体验软件包和依赖关系


首先,我们得声明:小编是纯爷们... 不好意思,搞错了,应该是:

这一课涉及到的软件包安装等知识点是基于Debian一族的Linux发行版,包括Ubuntu。

其他不是Debian一族的Linux发行版,例如Fedora,RedHat,CentOS,等等。其实安装软件的方式大同小异,就是每个Linux发行版之间所用的命令不一样,软件包的名称有点区别罢了。所以一通百通。

在Windows下,我们如果要安装软件,一般都是使用“安装程序”,一般是.exe结尾的可执行程序,双击即可运行。一般会把我们的软件安装到Program Files这个文件夹下。

例如我们常用的QQ这个软件的安装包就是.exe文件,如下:

Linux探索之旅 | 第二部分第七课:软件安装,如虎添翼

在Ubuntu下,我们也有类似的程序,但是我们不称之为“安装程序”,而称之为“软件包”,英语是Package。

一个软件包其实是软件的所有文件的压缩包,二进制形式的,包含了安装软件的所有指令。在Debian一族里,软件包的后缀是.deb(是Debian的前三个字母),Ubuntu作为Debian一族的一员,当然也是用.deb的软件包。而如果是Red Hat一族(包括Red Hat,Fedora,等),软件包是.rpm为后缀。

那么,一个.deb格式的软件包,其实是类似Windows下的.exe的安装程序咯?

确实很像,但是其实它们的运作方式不一样。我们列出主要的两个不同点:

  • 软件包管理包括了依赖关系的管理

  • 软件包不需要我们通过搜索引擎来找到并下载,几乎所有的.deb软件包都存放在相同地方,称为软件仓库,英语叫repository。

这两个方面我们会一一来讲解。

依赖关系


通常来说,很少有一个软件可以单独在Linux上运行,也就是说它不依赖于其他程序。一个软件经常需要使用到其他程序或者其他程序的片段(我们称之为库)。我们说这个软件依赖其他程序,这就是依赖关系。

比如说,Linux下类似Photoshop的软件GIMP,它不能单独运行,它的正常运作还需要调用图片读取的库(比如说如何读取一个JPG图片),往往依赖关系还有下层依赖关系,环环相扣。

当然,在Windows里面你也遇到过依赖问题,比如你运行Eclipse软件,它会说你还没安装Java环境;你运行一个大型游戏,它提示你先安装Direct X,等等。

幸运的是,Debian的包管理系统非常智能。每一个软件包都“知道”它依赖于哪几个程序。这可以让系统去寻找并安装缺失的依赖程序。

所以,你只要告诉包管理系统“我要安装某某软件”,包管理系统会为你打理一切。

软件仓库


上面我们说了,Linux的软件包都存放在一个地方,叫做软件仓库,repository。

对于Windows的各种软件,可没有这样一个集中存放的地方,所以网上有软件的各种版本、各种型号任君选择。

因为Linux是在Windows之后诞生的(1991年前后),所以为了避免Windows的这个“弊端”,Linux选择创建一个集中存放软件的地方。

当然了,Linux的这一优势也得益于它的开源性。Linux中的软件基本都是开源自由的,任何人都可以分发,传播软件,只要遵守一定软件协议。因此把这些软件集中存放在某个地方是可行的。

但是Windows的大部分软件都是有版权的,闭源的,不开放,甚至收费的,这些软件的作者不会同意把他们本该赚钱的软件存放到一个公共仓库任大家分发,使用。

软件仓库的概念


前面我们说了,Linux的软件会集中存放在一个地方,叫做软件仓库,英语是repository。

但是你也许会问:假如全球的Linux用户都到同一个地方去下载软件,那么存放软件的那个服务器岂不是会死机?

好问题,很有道理。所以,其实软件仓库绝不只是存放在一台服务器上,全球有很多个软件仓库(也就是有很多服务器),大部分软件仓库里的软件都是一样的,只不过是拷贝而已。

有一些特别的软件仓库,会存放其他软件仓库没有的软件,但一般我们用不到这样的软件仓库。

为了加深理解,我们可以用下图来表现软件仓库的原理:

Linux探索之旅 | 第二部分第七课:软件安装,如虎添翼

所以是用户选择软件仓库,因为基本上各个软件仓库中的软件都是一样的。

我们一般建议用户选择离自己所在地较近的软件仓库的服务器,这样下载速度会比较快。

在法国(小编住在法国),Ubuntu默认会使用 http://fr.archive.ubuntu.com 这个服务器上的软件仓库,但是使用官方的软件仓库并不一定很好,因为有时候这些服务器会比较卡,例如Ubuntu更新版本和其下软件的时候。

我们来学习如何切换软件仓库。

管理软件仓库


上面说了,用默认的官方版本没有太大坏处,但是有时候会卡。所以我们要学习如何切换软件仓库。

我们Ubuntu系统使用的软件仓库的列表是记录在一个文件中。为了修改这个文件,我们要用文本编辑器,幸好上一课Linux探索之旅 | 第二部分第六课:Nano文本编辑器和终端配置我们已经接触了文本编辑器,知道如何使用了。

那现在就是将上一课学习的内容付诸实践的时刻了。我们要编辑的那个包含软件仓库的列表的文件是:

/etc/apt/sources.list

这个文件是系统文件,只能被root用户修改。所以我们有两种选择:

  1. 暂时性地成为root,用nano来编辑此文件

    sudo nano /etc/apt/sources.list
  2. 先永久成为root

    sudo su

    再用nano来编辑此文件

    nano /etc/apt/sources.list

用nano打开此文件之后,我们看到文件内容类似如下:

Linux探索之旅 | 第二部分第七课:软件安装,如虎添翼

上图中,由#开始的行是注释,会被忽略,不会被处理。

通常来说,这个文件中有作用的行是由以下两个指令开头:

  • deb:用于下载软件的二进制版本,大多数情况下我们都是用这个。

  • deb-src:用于下载软件的源代码。一般我们用不到,除非你很好奇想查看软件的源代码。这也是自由软件运动的一个好处。

以下是一行的例子:

deb http://fr.archive.ubuntu.com/ubuntu/ trusty universe
  • 第一个参数 http://fr.archive.ubuntu.com/ubuntu 是法国Ubuntu官方软件仓库的服务器。

  • 第二个参数trusty,是我们所使用的Ubuntu的版本号,trusty是Ubuntu 14.04的代号。14.04全称是 Trusty Tahr(值得信赖的塔尔羊)。

  • 最后一个参数(或者后面还有其他参数)是软件仓库的区域,也就是你要查看的代码仓库的不同分区。

上面的概念稍微有点复杂。但其实你只要知道一件事:如果要切换其他的软件仓库,只需要将/etc/apt/sources.list这个文件中的http://fr.archive.ubuntu.com/ubuntu 这个服务器地址替换为其他软件仓库的服务器地址即可。

那么问题来了:我怎么知道其他软件仓库的服务器地址呢?

你可以用搜索引擎来寻找,比如可以搜“Ubuntu repository”。

但是我们要演示一个更快捷方便的方式,也就是要用到图形界面的方式了。

图形界面工具


Ubuntu提供了一个图形化的代码仓库管理软件,可以按以下步骤启动:

菜单栏中的System->Administration->Software Sources

单击打开后,如下图:

Linux探索之旅 | 第二部分第七课:软件安装,如虎添翼

上图中,我们可以看到默认的服务器是法国的:Server for France

我们可以将这个下拉列表选成Other...,那么会打开另一个窗口,如下图:

Linux探索之旅 | 第二部分第七课:软件安装,如虎添翼

可以看到列表中有很多服务器可供选择,这些都是软件仓库的服务器地址,按国家分类有:United States(美国),United Kingdom(英国),Ukraine(乌克兰),Turkey(土耳其),等等。

为了选出最快的服务器,我们可以做一个实际测试:

点击右上角的Select Best Server (选出最佳服务器)按钮,然后Ubuntu就会启动测试,测试各个服务器的速度:

Linux探索之旅 | 第二部分第七课:软件安装,如虎添翼

测试完之后,最快的服务器会被选中,如下图:

Linux探索之旅 | 第二部分第七课:软件安装,如虎添翼

点击右下角Choose Server(选择服务器)来选择这个最快的服务器(小编的情况是ftp.crihan.fr)。

选择之后,会关闭当前小窗口,回到主窗口,我们可以看到Download from后面的下拉列表已经变为了最快的那个服务器的地址:

http://ftp.crihan.fr/ubuntu (小编的情况)

Linux探索之旅 | 第二部分第七课:软件安装,如虎添翼

重新用nano来打开我们的/etc/apt/sources.list这个文件,可以看到服务器的地址都已经换成了新的http://ftp.crihan.fr/ubuntu

Linux探索之旅 | 第二部分第七课:软件安装,如虎添翼

所以,图形界面的方式更方便,更直观,比直接用文本编辑器逐行修改/etc/apt/sources.list这个文件快多了。

包管理工具


我们来总结一下:

  • package:包。这是软件的二进制安装包。类似Windows中软件的安装程序(大多以.exe结尾)。

  • dependency:依赖。一个软件包可能需要其他的软件包作为运行的基础。这是依赖关系。

  • repository:仓库。软件的仓库,就是存放软件的服务器,我们从这些服务器上下载软件。

我们上面演示了如何切换其他软件仓库,但也不一定要切换,用默认的软件仓库也是可以的。

在Ubuntu中,我们可以使用图形界面的软件包管理,例如 Synaptic Package Manager(新立得软件包管理器),要打开很简单:

菜单栏中的System->Administration->Synaptic Package Manager

单击打开后,如下图:

Linux探索之旅 | 第二部分第七课:软件安装,如虎添翼

当然了,我们也可以使用终端来管理软件包,终端的软件包管理命令一般用两个:

  • apt-get:最常用的,一般小编用这个比较多。

  • aptitude:这个命令在卸载软件时可以卸载不用的依赖。

以后的课程我们会使用apt-get一族来演示。

以下我们再学习几个常用的终端的软件包命令,记得这些命令都需要root身份来运行:

apt-get update:软件包缓存的更新


一般是

sudo apt-get update

apt-cache search:搜索软件包


一般是

sudo apt-cache search

apt-get install:安装软件包


一般是

sudo apt-get install xxx

xxx是对应软件包名

apt-get autoremove:删除软件包


一般是

sudo apt-get autoremove xxx     #xxx是对应软件包名

apt-get upgrade:升级所有已安装的软件包


一般是

sudo apt-get upgrade

补充一下:
dpkg 这个命令也是很有用的,事实上,dpkg 是 apt-get 和 aptitude 这两个命令的后端 (backend)命令,而 apt-get 和 aptitude 又是 Synaptic 和 Software Center 这样的软件安装工具的后端。

依赖链:
dpkg --> apt-get, aptitude --> Synaptic, Software Center

因此,如果是本地的 .deb 软件包,我们可以用 dpkg 来安装:

sudo dpkg -i *.deb

卸载:

sudo dpkg -r 包名

总结


  1. 大部分Linux的发行版都提供了集中式的软件包下载和安装方式,因此软件的安装比Windows下来得简单很多。这些集中存放软件的服务器被称为软件仓库。

  2. 在Ubuntu下,我们可以使用图形界面的软件包管理来安装软件,当然我们也可以使用终端命令来安装软件,就用apt-get命令族。

  3. apt-get update命令:更新可安装的软件列表。

  4. apt-cache search命令:在软件列表里搜索可用软件。

  5. apt-get install命令:安装软件。

  6. apt-get autoremove命令:卸载软件。

  7. apt-get upgrade命令:升级所有已安装软件。

第二部分第八课预告


今天的课就到这里,一起加油吧!

下一课我们学习:Linux探索之旅 | 第二部分第八课:RTFM 阅读那该死的手册

相关推荐