Linux程序包管理
Rpm包简介
Rpm包就是在相对应的操作系统平台上面编译好的软件包,没有编译之前就是一堆的源代码,很多刚接触Linux的用户还没有能力或自行编译源代码程序的难度很大,所以才会有了rpm包管理器。使用rpm可以使用户方便的进行软件的安装、查询、卸载、升级等工作。但是rpm软件包之间的依赖性问题往往会很繁琐,尤其是软件由多个rpm包组成时。
程序编译之后一般有四个部分组成,二进制程序,库文件,配置文件,帮助文件下面分别列出了这些文件在系统的存放路径。
二进制程序:/bin, /sbin, /usr/bin, /usr/sbin,/usr/local/bin, /usr/local/sbin, /opt/bin, /opt/sbin
库文件:/lib, /lib64, /usr/lib, /usr/lib64,/usr/local/lib, /usr/local/lib64
配置文件:/etc, /etc/DIR, /usr/local/{etc,conf}
帮助文件:/usr/share/man, /usr/share/doc,/usr/local/share/man
源代码包在编译时可以对程序包的功能进行定制,需要的功能可以编译,不需要的功能就不编译。但是rpm包是直接编译好的程序包,为了使用户能够在安装的时候选择需要的功能,舍弃不需要的功能,就会对一个程序进行分包,一个程序就会被编译成多个功能不同的包,让用户选择安装。
程序包的命名方式
appname-VERSION-RELEASE.ARCH.rpm
VERSION:
major:主版本号
minor:次版本号
release:发行号
RELEASE:包自身的修订号;有时候还会包含适用于的OS信息;比如bash-4.3.2-2.centos6.x86_64.rpm中的2.centos6
ARCH:适用的平台
x86:i386, i486, i586, i686
x86_64:x86_64, amd64
powerpc:ppc
noarch:跟平台无关;
httpd软件包的命名方式如下:
httpd-2.2.15-39.el6.centos.x86_64.rpm
rpm包的来源
1、系统的安装光盘或官方镜像站点
挂载光盘:mount /dev/cdrom /media/cdrom
官方站点,镜像:
mirrors.sohu.com
mirrors.163.com
mirrors.aliyun.com
2、程序包的官方站点
3、第三方组织:epel
4、搜索引擎
http://rpmfind.net
http://rpm.pbone.net
http://pkgs.org
rpm软件包管理
安装软件包
语法:rpm {-i|--install}{install-options}软件包
选项:
-i:表示安装软件包,--install是长选项
-h:以#来表示安装进度
-v:显示安装过程中的详细信息
-vv:显示更详细的信息
-vvv:显示比vv还详细的信息
--test:不执行真正的安装过程,而仅报告冲突信息
--nodeps:忽略依赖关系。虽然可以安装成功,但是未必可以正常运行。
--force:强制安装软件包。
--replacepkgs:覆盖安装,重新安装并覆盖原有文件。
--relocate:把允许修改安装路径的程序包的安装路径定位到新路径下
--replacefiles:有多个程序包安装时,可能安装相同的文件,这时需要指定后安装的程序包替换前面程序包安装的文件
安装时常用的组合:-ivh,-ivvh
实例:安装zsh软件
[root@localhost Packages]# rpm -ivh zsh-4.3.10-7.el6.x86_64.rpm warning: zsh-4.3.10-7.el6.x86_64.rpm: Header V3RSA/SHA1 Signature, key ID c105b9de: NOKEY Preparing... ########################################### [100%] 1:zsh ########################################### [100%]
依赖关系:rpm包最kengdie的地方就是安装a软件包,可能依赖b,安装b依赖c,有时候一个包装到最后依赖几十个上百个都说不定。
解决依赖关系安装软件包
[root@localhost Packages]# rpm -ivh php-5.3.3-38.el6.x86_64.rpm warning: php-5.3.3-38.el6.x86_64.rpm: Header V3RSA/SHA1 Signature, key ID c105b9de: NOKEY error: Failed dependencies: php-cli(x86-64) = 5.3.3-38.el6 is needed by php-5.3.3-38.el6.x86_64 php-common(x86-64) = 5.3.3-38.el6 is needed by php-5.3.3-38.el6.x86_64
上面的错误提示表示安装php依赖与php-cli软件包和php-common软件包,只需要一起安装就不会报错了
[root@localhost Packages]# rpm -ivh php-5.3.3-38.el6.x86_64.rpm php-cli-5.3.3-38.el6.x86_64.rpm php-common-5.3.3-38.el6.x86_64.rpm
升级软件包:
语法:rpm {-U|--upgrade} [install-options] PACKAGE_FILE ...
-U:升级或安装(如果有就升级,没有就安装)
rpm{-F|--freshen} [install-options] PACKAGE_FILE ...
-F:升级(如果此前没有安装低版本软包,那么就不会执行升级操作)
选项:
--test:只是测试是否可以升级,而不是正正升级。
--nodeps:升级时忽略依赖关系
--force:强制升级
--oldpackage:程序包降级
--relocate:把允许修改安装路径的程序包的安装路径定位到新路径下
--replacefiles:安装时只替换指定文件
常用组合:-Uvh,-Fvh
注意:
(1)一定不要对内核执行升级,新版内核可能对系统不兼容。
Linux允许多内核共存,所以,可以直接安装多个不同版本的内核;
(2)如果程序包的配置文件安装后曾被修改,升级时,新版本的文件不会覆盖老版本的配置文件,而把新版本的配置文件重命名(加后缀.rpmnew)后保存。
示例:升级zsh,下载到新版的zsh之后将软件包直接执行下面的升级命令即可
[root@localhost ~]# rpm -Uvh zsh-4.3.10-8.el6_5.x86_64.rpm
新版zsh下载地址http://mirrors.aliyun.com/centos/6.6/updates/x86_64/Packages/
卸载:
语法:rpm {-e|--erase} [--allmatches] [--nodeps] [--noscripts] [--notriggers] [--test] PACKAGE_NAME ...
简单用法:
rpm –e PACKAGE_NAME
--nodeps:忽略依赖关系
--test:测试卸载
--allmatches:如果一个程序包同时安装多个版本,则此选项一次全部卸载之。
注意:如果程序包的配置文件安装后曾被修改,卸载时,此文件通常不会被删除,而是被重命名(加后缀,rpmsave)后留存;
示例:卸载zsh
[root@localhost ~]# rpm -e zsh
卸载的时候只需要对软件包名执行卸载命令即可,不需要更版本和后缀等信息,那样反而会报错。
查询:
查询某包是否已经安装,以及检查安装的所有包;还可以查看某包的详细信息
语法:rpm {-q|--query} [select-options] [query-options]
[select-options]选项说明:
1.查询某包或某些包是否安装;
rpm –q PACKAGE_NAME
示例:查询是否已经安装httpd,查询结果会输出httpd的完整包名。
[root@localhost Packages]# rpm -q httpd httpd-2.2.15-39.el6.centos.x86_64
2.查询已经安装的所有包;
rpm –qa
说明:如果查看已经安装的所有包的话,输出的结果会很庞大,一般使用此选项常用的功能有两种
(1)查询当前系统安装了多少rpm包
示例:查询当前系统安装了多少软件包
[root@localhost ~]# rpm -qa | wc -l 1032
(2)将查询结果使用grep过滤,查看有多少匹配的软件包
示例:查询当前系统安装的httpd相关软件包的信息
[root@localhost ~]# rpm -qa | grep httpd httpd-tools-2.2.15-39.el6.centos.x86_64 httpd-2.2.15-39.el6.centos.x86_64
3.查询某文件是由那个包安装生成的
rpm –qf
示例:查询/etc/httpd/conf/httpd.conf是由那个软件包安装的。
[root@localhost ~]# rpm -qf/etc/httpd/conf/httpd.conf httpd-2.2.15-39.el6.centos.x86_64
4.查询尚未安装包的信息
-p
说明:-p选项 不能单独使用,需要结合[query-options]参数一起使用。
示例:查询mysql软件包的相关信息
[root@localhost Packages]# rpm -pqimysql-5.1.73-3.el6_5.x86_64.rpm warning: mysql-5.1.73-3.el6_5.x86_64.rpm: Header V3RSA/SHA1 Signature, key ID c105b9de: NOKEY Name :mysql Relocations:(not relocatable) Version :5.1.73 Vendor: CentOS Release :3.el6_5 Build Date:Thu 13 Feb 2014 03:42:39 AM CST Install Date: (not installed) Build Host:c6b9.bsys.dev.centos.org Group :Applications/Databases Source RPM:mysql-5.1.73-3.el6_5.src.rpm Size :2495591 License:GPLv2 with exceptions Signature :RSA/SHA1, Thu 13 Feb 2014 03:48:07 AM CST, Key ID 0946fca2c105b9de Packager :CentOS BuildSystem <http://bugs.centos.org> URL : http://www.mysql.com Summary :MySQL client programs and shared libraries Description : MySQL is a multi-user, multi-threaded SQL databaseserver. MySQL is a client/server implementation consisting of a serverdaemon (mysqld) and many different client programs and libraries.The base package contains the standard MySQL client programs andgeneric MySQL files.
参数说明:
Name:软件名
Version:版本信息
Release:发行号
Install Date:包的安装时间
Group:包所在的组
Size:大小
Signature:包的签名信息
Packager:包的制作人
URL:包的源代码程序可以从那里获取到
Summary:包的简要介绍
Relocations:是否被重新定位到其他位置
Vendor:提供商
Build Date:包的构建时间
Build Host:编译包的主机
Source RPM:源rpm包
License:许可证
Description:包的详细介绍
[query-options]选项说明:
1.查询某包的简要信息
rpm -qi
2.查询某包安装生成的文件列表
rpm –ql
示例:显示安装httpd生成的文件列表,
[root@localhost Packages]# rpm -ql httpd /etc/httpd /etc/httpd/conf /etc/httpd/conf.d /etc/httpd/conf.d/README /etc/httpd/conf.d/welcome.conf /etc/httpd/conf/httpd.conf /etc/httpd/conf/magic /etc/httpd/logs /etc/httpd/modules /etc/httpd/run ……生成列表过多,省略部分内容……
3.查询某包安装完成后的所有配置文件
rpm –qc
示例:显示php安装完成之后的配置文件。
[root@localhost ~]# rpm -qc php /etc/httpd/conf.d/php.conf
4.查询某包安装完成后的帮助文件
rpm –qd
[root@localhost ~]# rpm -qd httpd /usr/share/doc/httpd-2.2.15/ABOUT_APACHE /usr/share/doc/httpd-2.2.15/CHANGES /usr/share/doc/httpd-2.2.15/LICENSE /usr/share/doc/httpd-2.2.15/NOTICE /usr/share/doc/httpd-2.2.15/README /usr/share/doc/httpd-2.2.15/VERSIONING /usr/share/man/man8/apachectl.8.gz /usr/share/man/man8/htcacheclean.8.gz /usr/share/man/man8/httpd.8.gz /usr/share/man/man8/rotatelogs.8.gz /usr/share/man/man8/suexec.8.gz
5.查看某包制作时随版本变化的changelog信息,changelog记录了包的每次更新都做了什么改动
rpm –q –changelog
[root@localhost ~]# rpm -q -changelog httpd * Wed Oct 15 2014 Johnny Hughes<[email protected]> - 2.2.15-39.el6.centos - Roll in CentOS Branding * Tue Aug 05 2014 Jan Kaluza <[email protected]>- 2.2.15-39 - mod_proxy: close client connection if the backendcloses connection (#1111410) ……输出内容过多,省略部分内容……
6.查询某包提供的capabilities,
rpm –q –provides
[root@localhost ~]# rpm -q -provides httpd config(httpd) = 2.2.15-39.el6.centos httpd-mmn = 20051115 httpd-suexec = 2.2.15-39.el6.centos mod_actions.so()(64bit) mod_alias.so()(64bit) mod_asis.so()(64bit) mod_auth_basic.so()(64bit) ……输出内容过多,省略部分内容……
7.查询某包所依赖的capabilities
rpm –q –requires
[root@localhost ~]# rpm -q -requires httpd /bin/bash /bin/sh /etc/mime.types /usr/sbin/useradd apr-util-ldap chkconfig config(httpd) = 2.2.15-39.el6.centos httpd-tools = 2.2.15-39.el6.centos ……输出内容过多,省略部分内容……
8.查询某包安装卸载时执行的脚本
rpm –q –scripts
脚本有四类:
preinstall:安装过程开始之前执行的脚本
postinstall:安装过程完成之后执行的脚本
prenuinstall:卸载开始之前执行的脚本
postuninstall:卸载过程完成之后执行的脚本
[root@localhost ~]# rpm -q -scripts httpd preinstall scriptlet (using /bin/sh): #表示安装前脚本 # Add the "apache" user getent group apache >/dev/null || groupadd -g 48-r apache getent passwd apache >/dev/null || useradd -r-u 48 -g apache -s /sbin/nologin -d/var/www -c "Apache" apache exit 0 postinstall scriptlet (using /bin/sh): #表示安装后脚本 # Register the httpd service /sbin/chkconfig --add httpd /sbin/chkconfig --add htcacheclean preuninstall scriptlet (using /bin/sh): #卸载前执行的脚本 if [ $1 = 0 ]; then /sbin/service httpd stop > /dev/null 2>&1 /sbin/chkconfig --del httpd /sbin/service htcacheclean stop > /dev/null 2>&1 /sbin/chkconfig --del htcacheclean fi posttrans scriptlet (using /bin/sh): #卸载完成执行之后执行的脚本 test -f /etc/sysconfig/httpd-disable-posttrans || /sbin/service httpd condrestart >/dev/null2>&1 || :
本文出自 “梅花香自苦寒来” 博客,请务必保留此出处http://ximenfeibing.blog.51cto.com/8809812/1631436
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。