1、Linux命令与应用程序的关系
在Linux操作系统中,一直以来对命令和应用程序没有特别明确的区别,因此对安装软件包与安装应用程序这两种说法,并不做严格的区分。
2、Linux应用程序的组成
安装完一个软件包之后,可能会向系统中复制大量的数据文件,并进行相关设置。
在Linux操作系统中,典型的应用程序通常由以下几部分组成:
- 普通的可执行程序文件:一般保存在/usr/bin目录中,普通用户即可执行
- 服务器程序、管理程序文件:一般保存在/usr/sbin目录中,只有管理员才能执行
- 配置文件:一般保存在/etc目录中,配置文件较多时会建立相应的子目录
- 日志文件:一般保存在/var/log目录中
- 关于应用程序的参考文档等数据:一般保存在/usr/share/doc目录中
- 执行文件及配置文件的man手册页:一般保存在/usr/share/man目录中
3、软件包的封装类型
对于各种应用程序的软件包,在封装时可采用各种不同的类型,不同类型的软件包其安装方法也各不相同,常见的软件包封装类型有:
- RPM软件包:扩展名为.rpm,只能在使用RPM软件包管理机制的Linux操作系统中安装(如RHEL、Fedora、CentOS等)
注:RPM软件包一般针对特定版本的操作系统量身定制,因此依赖性较强,
(安装RPM软件包需要使用操作系统中的rpm命令)
- DEB软件包:扩展名为.deb,只能在使用DPKG机制的Linux操作系统中进行安装
(如Debian Package,Debian包管理器)
注:在安装DEB软件包时需要使用到操作系统中的dpkg命令。
- 源代码安装包:被称为TarBall,是程序员开发完成的原始代码,一般被制做成.tar.gz或.tar.bz2等格式的压缩包文件。
注:在安装源代码时需要使用相应的编译工具,如Linux中的C语言编译器gcc。
- 附带安装程序的软件包:软件包中会提供用于安装的可执行程序或脚本文件,如install.sh、setup等。
开放源代码的自由软件绝大多数选择以TarBall的形式发布,而RPM软件包、DEB软件包等则使用了二进制的文件格式,代码相对比较封闭。
4、RPM概述
RPM软件包是各种Linux发行版本中应用较广泛的软件包之一,最早是由Red Hat公司提出的,后来随着版本升级成为了众多Linux发行版中公认的软件包管理标准。
一般使用RPM机制封装的软件包具有约定俗成的命名格式:
软件名-软件版本-发布次数.操作系统类型.硬件架构类型.rpm
如bash-4.2.46-20.el7_2.x86_64.rpm
注:其中的硬件平台通常为i386或i686等——表示适用于Intel公司的处理器。
el7——代表该软件可以安装的系统的系统版本(el7就是Linux7,就是红帽的Linux7版本)
x86_64表示适用于64位的系统,如果是noarch——表示不区分硬件架构(支持不同硬件体系的处理器)
CentOS的DVD安装光盘携带的大部分软件包都在Packages目录中。
5、使用RPM软件包管理命令——rpm
5.1 rpm命令的格式
使用rpm命令能够实现几乎所有对RPM软件包的管理功能。
注:执行man rpm ——可以获得关于rpm命令的详细帮助信息
rpm命令具有非常强大的功能,结合不同的命令选项及子选项主要可以实现的功能有:
- 查询、验证RPM软件包的相关信息
- 安装、升级、卸载RPM软件包
- 维护RPM数据库信息等
5.2 查询RPM软件包信息
使用rpm命令的查询功能可以查看某个软件包是否已经安装,软件包的用途以及软件包复制到系统中的文件等相关信息。
注:rpm命令的查询功能主要通过-q选项来实现,主要针对当前系统中已经安装的软件包。
-qp选项——可针对尚未安装的RPM软件包文件进行查询。
结合不同的子选项使用时,可以实现更具体的查询,常用的几个子选项有:
-qa ——显示当前系统中以RPM方式安装的所有软件列表
-qi (info) ——查看指定软件包的名称、版本、许可协议、用途等详细信息
-ql (file) ——显示指定的软件包在当前系统中安装的所有目录、文件列表
不带-q选项的可用于查询已知名称的软件包是否已经安装,需要使用准确的软件名作为参数(可以有多个)
如直接执行rpm -qa 命令将列出当前操作系统中以RPM方式安装的所有软件包清单,每行记录一个软件包的名称、版本等信息。再结合管道操作和wc -l 命令,可以统计出系统中已安装的RPM软件的个数
如下图中执行rpm -q elinks lynx命令可以查询是否在系统中已安装elinks和lynx软件包(这两个软件包都是文本模式下的网页浏览器工具)
如果不知道准确的软件包名称,还可以对全部查询结果进行过滤,使用软件包的一部分名称进行模糊查询,根据查询结果再进行判断。
如以下命令可查询系统中是否已安装了名称中包含samba的软件包(查询时不区分大小写)
对于系统中已经安装的各种软件程序,如果不知道其中某个软件的用途,可以通过rpm工具进行查询。
例如要查询samba-client软件包的用途,就可以执行命令rpm -qi samba-client
当需要查看某个软件包安装的目录和文件清单时,可以使用-ql选项,如执行rpm -ql wget 命令可以列出wget软件包安装的目录和文件清单
当需要知道系统中的某个文件是由哪一个软件包生产的时候,可以使用-qf选项
如:执行下列命令可以获知vim编辑器程序是安装在vim-enhanced软件包时生产的
注:使用rpm命令只能查询通过RPM方式安装的软件包信息,对其他途径安装到系统中的软件包,rpm命令无法获取相关信息
- -qpi:查看指定软件包的名称、版本、许可协议、用途描述等详细信息
- -qpl:查看该软件包要安装的所有目标目录、文件列表
使用rpm -qp选项时,必须以RPM软件包作为参数(可以用多个),而不是软件包名称。
如:已知CentOS光盘目录中有一个RPM软件包文件ethtool-4.5-3.el7.x86_64.rpm,若要在安装之前了解该软件的用途,可以执行以下的操作:
若希望进一步了解该软件包中包含哪些文件,可以执行下列命令:
5.3、安装、升级、卸载RPM软件包
常用的基本命令包括:
- -i 在当前系统中安装一个新的RPM软件包
- -e 卸载指定名称的软件包
- -U 检查并升级系统中的某个软件包(若该软件包原来并未安装,则等同于-i选项)
- -F 检查并更新系统中的某个软件包(若该软件包原来并未安装,则放弃安装)
- -h 在安装或升级软件包的过程中,以#号显示安装进度
- -v 显示软件安装过程中的详细信息
- --force 强制安装某个软件包,当需要替换已安装的软件包及文件,或者安装一个比当前使用的软件版本更旧的软件时,可以使用此选项
- --nodeps 在安装或升级、卸载一个软件包时,不检查与其他软件包的依赖关系
(1)、安装RPM软件包
注:在安装一个新的软件包时,通常使用-ivh的组合选项,这样便于了解软件安装的过程信息,及时跟踪安装进度(若使用新版本的软件包替换旧的版本时,则只需要将-i换成-U即可)
如,以下操作将从光盘目录中全新安装lynx软件包:
使用rpm命令安装软件包时,一般需要指定完整的软件包文件名作为参数(可以有多个)。
卸载软件包时,只需要指定软件名称即可。
若要一次安装多个RPM软件包,可以使用通配符*。
(2)、卸载软件包
卸载一个软件包时,主要使用-e选项,如执行rpm -e lynx命令可以卸载已安装的lynx软件
再执行查询时会发现lynx软件没有安装:
注:当需要安装、卸载一个与其他程序存在依赖关系的软件包时,系统将提示存在依赖关系而放弃执行。
这时可以结合--nodeps选项忽略依赖关系,而强行安装或卸载指定的软件包。但忽略依赖关系可能会导致软件功能异常或失效,因此只在学习或调试程序时使用,生产环节避免使用。
5.4、维护RPM数据库
维护RPM数据库的操作步骤如下:
(1)、重建RPM数据库
RPM数据库用于记录在Linux操作系统中安装、卸载、升级应用程序的相关信息由RPM软件包管理系统自动完成维护,一般不需要用户干预。
当RPM数据库发生损坏,且Linux操作系统无法自动完成修复时,将导致无法使用rpm命令正常的安装、卸载及查询软件包(这时可以使用rpm -- rebuilddb或rpm --initdb命令对RPM数据库进行重建):
(2)、导入验证公钥
在Linux/UNIX应用领域,软件厂商会对发布的软件包进行数字签名,以确保软件的完整性、合法性。
对于用户来说,可以利用官方提供的公钥文件,自动对下载的软件包进行验证
若在安装软件时出现验证失败的提示,则表示该软件包可能已经被非法篡改。
向RPM数据库中导入公钥文件时,需要用到--import选项,如执行下列命令可以把光盘目录中的
RPM-GPG-KEY-CentOS-7公钥文件导入RPM数据库中。
6、从源代码编译安装程序
在Linux操作系统中搭建一些大型服务时,考虑兼容性与功能的扩展,通常会选择源代码安装软件。
最早的Linux操作系统整体上都是编译安装而成的。
6.1、源代码编译概述
Linux操作系统中的两个重要特性:开放源代码、操作简单
即Linux操作系统中包括内核在内的所有软件都可以获得源代码,并且可以经过定制后编译安装。
现在的Linux发行版本通常使用软件包管理机制对软件进行打包安装,这样省去了软件的编译安装过程。大大简化了Linux操作系统的安装和使用难度。
注:大多数的开源软件总是以源代码的形式最先发布,之后才会出现.rpm、.deb等二进制封装的版本。
编译源代码需要有相应的开发环境,对于自由软件来说,gcc和make是最佳的编译工具。
CentOS7.3中默认使用的gcc工具版本为4.8.5,make工具版本为3.82。如执行以下命令可以查看gcc和make开发工具的版本信息。
6.2、编译安装的基本过程
获得所需的软件源代码以后,安装的基本过程有解包、配置、编译及安装这几个通用步骤。
(1)、解包
开放软件的源代码包一般为TarBall形式,扩展名为.tar.gz或.tar.bz2都可以使用tar命令进行解压释放。
注:对于只有.gz扩展名的源代码包——表示只经过压缩而并未使用tar命令归档(这样的文件只需要使用gzip进行解压缩即可)
在Linux操作系统中,通常将各种软件的源代码目录保存到/usr/src目录中,以便于集中管理。
如以下操作将把hyypd-2.4.25.tar.gz文件解包到/usr/src目录中:
(2)、配置
在编译应用程序之前,需要进入源代码目录,通过目录下的脚本检查安装环境,并且对软件的安装目录、功能选择等参数进行预先配置。
注:环境检查与配置工作通常由源代码目录中的configure脚本文件来完成,可用的各种配置参数可以通过在源代码目录中执行./configure --help命令查看。
不同的软件程序,其配置参数存在区别,但是有一个--prefix形式的参数却是大多数开源软件通用的,该配置参数用于指定软件包安装的目标文件夹。
如果没有指定任何配置参数,configure脚本将采用软件默认的值进行配置。
在Linux操作系统中通过源代码方式安装软件时,也可以将所有程序文件安装到同一个文件夹中,
这样当需要卸载软件时,只要直接将该文件夹删除即可,非常方便(某些软件也可以在源代码目录中执行make uninstall 命令完成卸载)
配置结果将保存到源代码目录的Makefile文件中,如果配置过程出现错误
(如包含error、failed或no found等关键字),通常是缺失相关的依赖软件包所致,此时只要根据提示安装对应的软件即可。
(3)、编译
编译的过程主要是根据Makefile文件内的配置信息(若上一步的配置操作失败,将无法进行编译)
,将源代码文件进行编译生成二进制的程序模块、动态链接库、可执行文件等。
配置完成后,只要在源代码目录中执行make命令即可执行编译操作。
注:编译的过程比配置过程需要更长的时间,期间同样会显示大量的执行过程信息。
(4)、安装
编译完成后,就可以执行如下的make install命令将软件的执行程序、配置文件、帮助文件等相关文件复制到Linux操作系统中了,即应用程序的最后安装过程。(安装过程需要的时间相对要短一些,期间也会显示安装的过程信息)
注:有时为了简便,可将上述的编译、安装步骤写成一行命令执行,中间用&&符号分隔。
例如,make && make install (表示make命令执行成功后再执行make install 命令,否则将忽略make install命令)
标签:03,Linux,安装,管理应用程序,RPM,软件包,源代码,rpm From: https://blog.csdn.net/2401_85163870/article/details/139192198