软件包管理简介 软件包分类 软件包分为两大类:源码包和二进制包(RPM包、系统默认包)。
二进制包
也叫RPM包,也是系统默认包,它是经过编译之后的安装包。不能看到它的源代码。二进制包实际上是软件的厂商在发行软件时,将源码包进行了编译和一些特定的设置。从而,简化了安装步骤,加快了安装速度。RPM包的文件名一般以 .rpm 结尾。
注意:redhat系列的Linux系统(比如:CentOS)用的二进制包才是RPM包,Ubuntu和Debian系列的Linux系统用的二进制包是DEB包。
redhat系列与Ubuntu和Debian系列的Linux系统的主要区别就在于二进制包的不同。
源码包
指的是直接把软件的源代码开放给用户的安装包。Linux最大的特点就是开源,它是用C语言编写的,所以绝大部分源码包也是用C语言编写的。源码包安装过程比较慢和复杂,而且容易报错。源码包可以到该软件的官方网站下载。它的文件名一般是以 .c 结尾,可以用写字板打开查看源代码。计算机能够识别的语言是二进制代码,也就是0或1组成的代码。要想让计算机识别源码包,就必须先将其编译为二进制代码。编译过程,需要C语言编译器gcc的支持。
脚本安装包也是源码包的一种,它绝大多数是对源码包进行再开发之后的源码包。这种包比较少见,有点类似于Windows中的软件包,它的安装程序一般是install.sh,其安装过程非常简单,有简易的安装界面。
二进制包的优缺点 由于我的是CentOS的Linux系统,所以,这里就是指RPM包。
二进制包的优点:
便于管理,只需通过几个命令就可以实现软件的安装、升级、查询和卸载。
安装过程简单,安装速度比源码包快很多。
二进制包的缺点:
已编译为二进制码,看不到源代码。
功能选择不如源码包灵活。
有依赖性的问题。
rpm包管理 - rpm命令管理 rpm包管理有两种方式:rpm命令管理和yum在线管理。
rpm包的命名规则 以Apache的rpm包(httpd-2.2.15-15.el6.centos.1.i686.rpm)为例。
script 1 2 3 4 5 6 7 httpd 软件的包名 2.2.15 软件的版本 15 软件发布的次数 el6.centos 适合的Linux平台 i686 适合的硬件平台(x64表示只适合64位的处理器,noarch表示适合所有的硬件平台) .rpm 软件包的扩展名(在Linux系统中其实是没有扩展名的,这里的扩展名,是为了让管理员便于区分和识别) httpd-2.2.15-15.el6.centos.1.i686.rpm 软件的包全名
rpm包的依赖性
树形依赖:a → b → c
装软件包a,需要先安装软件包b,装软件包b,又需要先安装软件包c。估安装顺序是 c b a ,卸载顺序则是 a b c。
环形依赖:a → b → c → a
解决方法:把软件包a、b、c用一条命令同时安装。
模块(库)依赖
模块依赖的查询网站 www.rpmfind.net。只要被依赖的包是以 .so.数字 结尾,这种依赖关系就是库(模块)依赖。
这种库依赖的包不是单独存在的包,它是某个软件包中的一个软件(模块),因此只需安装它所在的软件包即可。这时,我们就必须要知道该软件(模块)属于哪个软件包。可以通过网站 www.rpmfind.net 进行查询。
rpm包的包全名和包名 包全名 : 操作的包是没有安装的软件包时,要使用包全名,而且要注意路径。安装和升级时,使用包全名。
包名 : 操作的是已经安装的软件包时,要使用包名。系统会自动搜索 /var/lib/rpm/ 中的数据库。不需要写路径。查询和卸载时,使用包名。
rpm安装命令 script 1 2 3 4 5 6 7 8 rpm -ivh 包全名 选项: -i 执行安装(install) -v 显示详细信息(verbose) -h 显示进度(hash) --nodeps 不检测依懒性
由于使用rpm命令安装rpm包,需要手动来解决各种依赖性问题,步骤过于复杂,故在此不作详解。后面,我们可以利用yum命令在线安装rpm包,它会自动解决依赖性,实现快速安装。
rpm升级命令 script 1 2 3 4 5 6 7 rpm -Uvh 包全名 选项: -U 升级(upgrade) -v 显示详细信息(verbose) -h 显示进度(hash)
rpm卸载命令 注意:使用rpm命令进行卸载也会有依赖性的问题 。
script 1 2 3 4 5 6 rpm -e 包名 选项: -e 卸载(erase) --nodeps 不检查依赖性
rpm查询命令 rpm的查询命令要比rpm的安装、升级和卸载命令有用的多,安装、升级和卸载主要采用yum命令。
选项:
script 1 2 3 4 5 6 7 -q 查询(query) -a 所有(all) -i 查询rpm包的详细信息(information) -p 查询未安装的rpm包信息(rpm包的信息是在软件安装之前就已经写好了,查询未安装的rpm包信息时,要使用包全名) -l 列表信息(list) -f 查询指定的文件属于哪个rpm包(file) -R 查询软件包的依赖性(requires)
常见用法:
script 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 rpm -q httpd 查询是否安装了rpm包的apache rpm -qa 查询系统中所有已经安装的rpm包 rpm -qa | grep httpd 查询系统中所有已安装的和httpd相关的rpm包 rpm -qi httpd 查询已安装的apache软件的详细信息 rpm -qip httpd-2.2.15-15.el6.centos.1.i686.rpm 查询未安装的rpm包的详细信息(需要用包全名且注意路径) rpm -ql httpd 查询已安装的apache软件的各个文件的安装位置 rpm -qlp httpd-2.2.15-15.el6.centos.1.i686.rpm 查询未安装的rpm包中的文件打算安装的位置(安装位置在rpm包安装之前就已经计划好了,估就算没有安装,也可以查询) rpm -qf 文件名 通过系统中已知的文件名,查询它所属于的rpm包 rpm -qR 包名 查询已安装的rpm包的依赖性 rpm -qRp 包全名 查询未安装的rpm包的依赖性
rpm校验命令 主要是将rpm包当前的状态和初始安装的状态进行比较,校验哪些文件发生了更改。
script 1 2 3 4 5 rpm -V 包名 选项: -V 检验已安装的RPM包中的文件(verify)
常见用法:
script 1 2 rpm -V httpd 把Apache现在的状态和安装后的初始状态进行比较,从而检验哪些文件作了修改
如果输出以下内容,则表示配置文件被修改了。
script 1 S.5....T. c /etc/httpd/conf/httpd.conf
校验结果中的8个信息的具体说明如下( . 代表没有变化):
script 1 2 3 4 5 6 7 8 S 表示文件大小变了 M 表示文件的类型或者文件的权限变了 5 表示md5的校验和变了(可以看成是文件的内容变了) D 表示设备代码信息变了 L 表示文件的路径变了 U 表示文件的所有者变了 G 表示文件的所属组变了 T 表示文件的修改时间变了
文件类型:
script 1 2 3 4 5 c 配置文件(config file) d 普通文档(documentation) g "鬼"文件(ghost file),很少见,如果显示g,表示该文件不应该被这个rpm包包含 l 授权文件(license file) r 描述文件(read me)
rpm提取文件命令 从rpm包中提取某个文件,主要用于系统的命令文件被误删除或误操作后的修复,避免重装系统或重装相关的rpm包所带来的麻烦。
script 1 2 rpm2cpio 包全名 | cpio -idv .指定文件的绝对路径 用cpio命令从rpm包中提取指定的文件,点 . 表示提取出来的文件存放的位置是当前目录
rpm2cpio命令,可以将rpm包转换为cpio格式的文件。
cpio命令是一个标准工具,用于创建软件档案文件或者从档案文件中提取文件。
rpm包管理 - yum命令管理 yum在线管理工具对CentOS系统是完全免费的,使用yum命令可以快速安装rpm包,yum命令最大的好处是它可以自动解决依赖性的问题。
网络yum源 CentOS的网络yum源默认是已经配好了,只要你的Linux系统连接了外网,就可以利用该网络yum源进行各种RPM包的安装、升级和卸载。
网络yum源的配置文件为:/etc/yum.repos.d/CentOS-Base.repo。
本地光盘yum源的配置文件为:/etc/yum.repos.d/CentOS-Media.repo。
网络yum源的配置文件的默认内容如下:
script 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 [base] name=CentOS-$releasever - Base mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os&infra=$infra # baseurl=http://mirror.centos.org/centos/$releasever /os/$basearch / gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6 # released updates [updates] name=CentOS-$releasever - Updates mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=updates&infra=$infra # baseurl=http://mirror.centos.org/centos/$releasever /updates/$basearch / gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6 # additional packages that may be useful [extras] name=CentOS-$releasever - Extras mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=extras&infra=$infra # baseurl=http://mirror.centos.org/centos/$releasever /extras/$basearch / gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6 # additional packages that extend functionality of existing packages [centosplus] name=CentOS-$releasever - Plus mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=centosplus&infra=$infra # baseurl=http://mirror.centos.org/centos/$releasever /centosplus/$basearch / gpgcheck=1 enabled=0 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6 # contrib - packages by Centos Users [contrib] name=CentOS-$releasever - Contrib mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=contrib&infra=$infra # baseurl=http://mirror.centos.org/centos/$releasever /contrib/$basearch / gpgcheck=1 enabled=0 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
共有5个软件池:[base]、[updates]、[extras]、[centosplus]和[contrib]。默认是第一个软件池(即base)生效。
base软件池的说明:
script 1 2 3 4 5 6 7 [base] 软件池的名称,一定要放在[]中. name 容器说明,可以自己随便写. mirrorlist 镜像站点(可以将其注释掉,mirrorlist和baseurl只开启一个即可). baseurl yum源服务器的地址.默认是CentOS官方的yum源服务器,如果你觉得慢,可以改成其他的yum源地址. enabled 此容器是否生效,如果不写或写成enabled=1都是生效. gpgcheck 如果是1,表示RPM的数字证书生效. gpgkey 数字证书的公钥文件的保存位置.(不用修改)
一般来说,网络yum源默认就配置好了,而且可用,不用去修改该配置文件。
常用的yum命令 script 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 yum list 查询yum源中所有可用的rpm包列表. yum search 关键字 搜索yum源中和关键字(一般用软件名)相关的rpm包. yum -y install 软件名 利用yum命令安装某个软件,-y 表示自动回答yes. yum -y install gcc 安装rpm包的gcc软件(gcc是一个C语言的编译器). yum -y update 软件名 软件的升级. 注意: 如果update后面没有跟软件名,会升级所有的rpm包,包括Linux的内核,需要在本地重新配置好才能恢复. yum -y remove 软件名 软件的卸载. 注意: 如果remove后面没有跟包名,会卸载所有的rpm包.就算跟了包名,也可能造成依赖性的连锁卸载问题. yum卸载命令很容易造成问题,尽量不要使用. 安装Linux系统时,建议最小化安装,不要安装多余的软件,安装后,尽量少卸载. yum grouplist 查询yum源中所有可用的软件组列表. yum groupinstall 软件组名 安装指定的软件组. 注意: 软件组名只能用英文,如果中间包含空格,就用引号括起来. yum groupremove 软件组名 卸载指定的软件组.