7 Linux系统软件安装
- Linux 和 Windows 是完全不同的操作系统,软件包管理是截然不同的,导致Linux 中的软件安装方法是否和 Windows 中的软件安装方法是不一样的,我们需要学习一种新的软件包管理方法,而且 Linux 软件包的管理要比 Windows 软件包的管理复杂得多;而 Windows 下所有的软件都不能在 Linux 中识别,所以 Windows 中大量的木马和病毒也都无法感染 Linux
7.1 Linux软件包(源码包和二进制包)
- Linux下的软件包众多,且几乎都是经 GPL 授权、免费开源(无偿公开源代码)的。这意味着如果你具备修改软件源代码的能力,只要你愿意,可以随意修改。
GPL,全称 General Public License,中文名称“通用性公开许可证”,简单理解 GPL 就是一个保护软件自由的一个协议,经 GPL 协议授权的软件必须开源
- Linux下的软件包可细分为两种,分别是源码包和二进制包。
7.1.1 Linux源码包
- 源码包:一大堆源代码程序,是由程序员按照特定的格式和语法编写出来的。我们都知道,计算机只能识别机器语言,也就是二进制语言,所以源码包的安装需要编译器翻译成二进制语言。
“编译”指的是从源代码到直接被计算机(或虚拟机)执行的目标代码的翻译过程,编译器的功能就是把源代码翻译为二进制代码,让计算机识别并运行,
- 由于源码包的安装需要把源代码编译为二进制代码,因此安装时间较长。源码包的编译是很费时间的,况且绝多大数用户并不熟悉程序语言,安装有一定难度,为了解决使用源码包安装方式的这些问题,Linux 软件包的安装出现了使用二进制包的安装方式。
7.1.2 Linux二进制包
- 二进制包,也就是源码包经过成功编译之后产生的包。由于二进制包在发布之前就已经完成了编译的工作,因此用户安装软件的速度较快(同 Windows下安装软件速度相当),且安装过程报错几率大大减小。
- 二进制包是 Linux 下默认的软件安装包,因此二进制包又被称为默认安装软件包。目前主要有以下 2 大主流的二进制包管理系统:
- RPM 包管理系统:功能强大,安装、升级、査询和卸载非常简单方便,因此很多 Linux 发行版都默认使用此机制作为软件安装的管理方式,例如 Fedora、CentOS、SuSE 等。
- DPKG 包管理系统:由 Debian Linux 所开发的包管理机制,通过 DPKG 包,Debian Linux 就可以进行软件包管理,主要应用在 Debian 和 Ubuntu 中。
- RPM 包管理系统和 DPKG 管理系统的原理和形式大同小异,可以触类旁通。可以自行去 http://www.rpmfind.net 网站上查找相关的 RPM 包
7.1.3 源码包 VS RPM二进制包
- 源码包一般包含多个文件,为了方便发布,通常会将源码包做打包压缩处理,Linux 中最常用的打包压缩格式为“tar.gz”,因此源码包又被称为 Tarball。
Tarball 是 Linux 系统的一款打包工具,可以对源码包进行打包压缩处理,人们习惯上将最终得到的打包压缩文件称为 Tarball 文件。
-
源码包需要我们自己去软件官方网站进行下载,包中通常包含以下内容:
- 源代码文件。
- 配置和检测程序(如 configure 或 config 等)。
- 软件安装说明和软件说明(如 INSTALL 或 README)。
-
总的来说,使用源码包安装软件具有以下几点好处:
- 开源。如果你有足够的能力,则可以修改源代码。
- 可以自由选择所需的功能。
- 因为软件是编译安装的,所以更加适合自己的系统,更加稳定,效率也更高。
- 卸载方便。
-
但同时,使用源码包安装软件也有几点不足:
- 安装过程步骤较多,尤其是在安装较大的软件集合时(如 LAMP 环境搭建),容易出现拼写错误。
- 编译时间较长,所以安装时间比二进制安装要长。
- 因为软件是编译安装的,所以在安装过程中一旦报错,新手很难解决。
-
相比源码包,二进制包是在软件发布时已经进行过编译的软件包,所以安装速度比源码包快得多(和 Windows 下软件安装速度相当)。也正是因为已经进行通译,大家无法看到软件的源代码。
-
使用 RMP 包安装软件具有以下 2 点好处:
- 包管理系统简单,只通过几个命令就可以实现包的安装、升级、査询和卸载。
- 安装速度比源码包安装快得多。
-
与此同时,使用 RMP 包安装软件有如下不足:
- 经过编译,不能在看到源代码。
- 功能选择不如源码包灵活。
- 依赖性。安装软件,需要有一定的顺序,有时依赖性会非常强。
7.1.4 如何选择?
-
源码包和 RMP 二进制包的对比,在 Linux 进行软件安装时,我们应该使用哪种软件包呢?
-
用源码包安装软件会更适合自己的系统,效率更高,更加稳定,但安装难度大需要一定的编程能力
-
虽然软件基本不能自定义功能,但安装简单。
7.2 Linux RPM包统一命名规则
- RPM 二进制包的命名需遵守统一的命名规则,用户通过名称就可以直接获取这类包的版本、适用平台等信息。RPM 二进制包命名的一般
包名-版本号-发布次数-发行商-Linux平台-适合的硬件平台-包扩展名
-
例如,RPM 包的名称是
httpd-2.2.15-15.el6.centos.1.i686.rpm
,其中:- httped:软件包名。这里需要注意,httped 是包名,而 httpd-2.2.15-15.el6.centos.1.i686.rpm 通常称为包全名,包名和包全名是不同的,在某些 Linux 命令中,**有些命令(如包的安装和升级)使用的是包全名,而有些命令(包的查询和卸载)**使用的是包名,一不小心就会弄错。
- 2.2.15:包的版本号,版本号的格式通常为
主版本号.次版本号.修正号
。 - 15:二进制包发布的次数,表示此 RPM 包是第几次编程生成的。
- el*:软件发行商,el6 表示此包是由 Red Hat 公司发布,适合在 RHEL 6.x (Red Hat Enterprise Unux) 和 CentOS 6.x 上使用。
- centos:表示此包适用于 CentOS 系统。
- i686:表示此包使用的硬件平台,目前的 RPM 包支持的平台如表 1 所示:
-
操作硬件平台:由于 RPM 可以适用在不同的操作平台上,但是由于不同的平台设定的参数还是有所差异性!并且,我们可以针对比较高阶的 CPU 来进行最佳化参数的设定,所以就有所谓的 i386, i586, i686 与 noarch 等的文件名称出现了!
-
CPU的等级区分是以型号来的:Intel系列的CPU,奔腾为中低,酷睿为中高,赛扬则为入门级AMD的也是一样的,老款AMD系列闪龙系列为入门级,速龙为中低,羿龙为中高级别。
平台名称 | 适用平台信息 |
---|---|
i386 | 386 以上的计算机都可以安装。几乎适用于所有的 x86 平台,不论是旧的 pentum 或者是新的 pentum-IV 与 K7 系列的 CPU等等。那个 i 指的是 Intel 兼容的 CPU 的意思。至于 386 不用说,就是 CPU 的等级啦! |
i586 | 686 以上的计算机都可以安装。包括 pentum 第一代 MMX CPU, AMD 的 K5, K6 系列 CPU ( socket 7 插脚 ) 等等的 CPU 都算是这个等级; |
i686 | 奔腾 II 以上的计算机都可以安装,目前所有的 CPU 是奔腾 II 以上的,及 K7 以后等级的 CPU 都属于这个 686 等级!所以这个软件版本居多 |
x86_64 | 64 位 CPU 可以安装 |
noarch | 没有硬件限制 |
-
rpm:RPM 包的扩展名,表明这是编译好的二进制包,可以使用 rpm 命令直接安装。此外,还有以 src.rpm 作为扩展名的 RPM 包,这表明是源代码包,需要安装生成源码,然后对其编译并生成 rpm 格式的包,最后才能使用 rpm 命令进行安装。
-
Linux 系统不靠扩展名分区文件类型,但这里的扩展名是为系统管理员准备的,如果我们不对 RPM 包标注扩展名,管理员很难知道这是一个 RPM 包,当然也就无法正确使用。
7.3 Linux RPM包安装、卸载和升级(rpm命令)
-
RPM包默认安装路径:RPM 包采用系统默认的安装路径,所有安装文件会按照类别分散安装到下表所示的目录中。
安装路径 含 义 /etc/ 配置文件安装目录 /usr/bin/ 可执行的命令安装目录 /usr/lib/ 程序所使用的函数库保存位置 /usr/share/doc/ 基本的软件使用手册保存位置 /usr/share/man/ 帮助文件保存位置 -
RPM 包的默认安装路径是可以通过命令查询的。RPM 包也支持手动指定安装路径,但此方式并不推荐。因为一旦手动指定安装路径,所有的安装文件会集中安装到指定位置,且系统中用来查询安装路径的命令也无法使用(需要进行手工配置才能被系统识别)
-
与 RPM 包不同,源码包的安装通常采用手动指定安装路径(习惯安装到 /usr/local/ 中)的方式。既然安装路径不同,同一 apache 程序的源码包和 RPM 包就可以安装到一台 Linux 服务器上(但同一时间只能开启一个,因为它们需要占用同一个 80 端口)。
-
安装 RPM 的命令格式为:注意一定是包全名。涉及到包全名的命令,一定要注意路径,可能软件包在光盘中,因此需提前做好设备的挂载工作,准备好rmp安装包。安装和升级用包全名,卸载用包名
[root@CncLucZK ~]# rpm -ivh 包全名
- 此命令中各选项参数的含义为:
- -i:安装(install);
- -v:显示更详细的信息(verbose);
- -h:打印 #,显示安装进度(hash);
[root@CncLucZK ~]# rpm -ivh \
/mnt/Packages/httpd-2.2.15-15.el6.centos.1.i686.rpm
Preparing...
####################
[100%]
1:httpd
####################
[100%]
注意,直到出现两个 100% 才是真正的安装成功,第一个 100% 仅表示完成了安装准备工作。
- 此命令还可以一次性安装多个软件包,仅需将包全名用空格分开即可,如下所示:
[root@CncLucZK ~]# rpm -ivh 1.rpm 2.rpm
-
如果还有其他安装要求(比如强制安装某软件而不管它是否有依赖性),可以通过以下选项进行调整:
- -nodeps:不检测依赖性安装。软件安装时会检测依赖性,确定所需的底层软件是否安装,如果没有安装则会报错。如果不管依赖性,想强制安装,则可以使用这个选项。注意,这样不检测依赖性安装的软件基本上是不能使用的,所以不建议这样做。
- -replacefiles:替换文件安装。如果要安装软件包,但是包中的部分文件已经存在,那么在正常安装时会报”某个文件已经存在”的错误,从而导致软件无法安装。使用这个选项可以忽略这个报错而覆盖安装。
- -replacepkgs:替换软件包安装。如果软件包已经安装,那么此选项可以把软件包重复安装一遍。
- -force:强制安装。不管是否已经安装,都重新安装。也就是 -replacefiles 和 -replacepkgs 的综合。
- -test:测试安装。不会实际安装,只是检测一下依赖性。
- -prefix:指定安装路径。为安装软件指定安装路径,而不使用默认安装路径。
-
apache 服务安装完成后,可以尝试启动:
[root@CncLucZK ~]# service 服务名 start|stop|restart|status
-
各参数含义:
- start:启动服务;
- stop:停止服务;
- restart:重启服务;
- status: 查看服务状态;
[root@CncLucZK ~]# service httpd start #启动apache服务
- 服务启动后,可以查看端口号 80 是否出现
[root@CncLucZK mnt]# netstat -tlun |grep 80
tcp6 0 0 :::80 :::* LISTEN
- 可以在浏览器中输入 Linux 服务器的 IP 地址,访问这个 apache 服务器。目前在 apache 中没有建立任何网页,所以看到的只是测试页
- RPM包的升级:使用如下命令即可实现 RPM 包的升级:
[root@CncLucZK ~]# rpm -Uvh 包全名
- -U(大写)选项的含义是:如果该软件没安装过则直接安装;若没安装则升级至最新版本。
[root@CncLucZK ~]# rpm -Fvh 包全名
-
-F(大写)选项的含义是:如果该软件没有安装,则不会安装,必须安装有较低版本才能升级。
-
RPM包的卸载:RPM 软件包的卸载要考虑包之间的依赖性。例如,我们先安装的 httpd 软件包,后安装 httpd 的功能模块 mod_ssl 包,那么在卸载时,就必须先卸载 mod_ssl,然后卸载 httpd,否则会报错。
-
如果卸载 RPM 软件不考虑依赖性,执行卸载命令会包依赖性错误,例如:
[root@CncLucZK ~]# rpm -e httpd
error: Failed dependencies:
httpd-mmn = 20051115 is needed by (installed) mod_wsgi-3.2-1.el6.i686
httpd-mmn = 20051115 is needed by (installed) php-5.3.3-3.el6_2.8.i686
httpd-mmn = 20051115 is needed by (installed) mod_ssl-1:2.2.15-15.el6.
centos.1.i686
httpd-mmn = 20051115 is needed by (installed) mod_perl-2.0.4-10.el6.i686
httpd = 2.2.15-15.el6.centos.1 is needed by (installed) httpd-manual-2.2.
15-15.el6.centos.1 .noarch
httpd is needed by (installed) webalizer-2.21_02-3.3.el6.i686
httpd is needed by (installed) mod_ssl-1:2.2.15-15.el6.centos.1.i686
httpd=0:2.2.15-15.el6.centos.1 is needed by(installed)mod_ssl-1:2.2.15-15.el6.centos.1.i686
- RPM 软件包的卸载很简单,使用如下命令即可:-e 选项表示卸载,也就是 erase 的首字母。
[root@CncLucZK ~]# rpm -e 包名
- RPM 软件包的卸载命令支持使用“-nocteps”选项,即可以不检测依赖性直接卸载,但此方式不推荐大家使用,因为此操作很可能导致其他软件也无法征程使用。
参考文献:
Linux RPM包安装、卸载和升级(rpm命令)详解
下一篇:Linux学习-17-rpm查询软件包命令(-q、-qa、-i、-p、-l、-f、-R)
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/123775.html