`

rpm命令完全详解三

阅读更多
通用选项
所谓通用选项,就是不管是安装,升级,卸载还是其它软件包操作,统统适用的选项。

这样的选项主要以下几个:

1.-v:显示附加信息

一般情况下,RPM和不少LINUX命令(如cp,rm,mv等)一样,都本着尽可能少输出信息的原则(除非必要,否则不 要输出),这样做是为了避免浪费CPU资源。所以,当用户使用某个命令后没有什么输出,这就意味着命令执行成功了。如果有什么错误,程序会提示的。RPM 也是这个样子。为了使RPM输出多一点的信息,可以使用-v选项。

如不带此选项安装file包,没有输出:

# rpm -i file-3.26-6.i386.rpm
#

而采用-v选项后安装时输出了包名:

# rpm -i -v file-3.26-6.i386.rpm
file-3.26-6
#

2.-vv:显示调试信息

选用-vv选项,可以使RPM输出更多的信息。这些信息,主要供RPM软件开发者研究使用的,一般用户也可以看看,从中可以知道RPM究竟干些什么。

下面采用此选项安装file包,同时使用管道线(|)将输出数据送nl命令,以带行号输出每行数据。


从执行结果看,输出的信息很多,其中以D:开头的行均是调试信息。现在逐行解释:

第1行:统计要安装的软件包个数;

第2行:RPM找到1个包;

第3行:查看哪些包需要下载(这些要下载的包,都是以FTP或HTTP形式书写的包名);

第4行:下载了0个包;

第5-10行:取包裹文件的文件头信息,算出软件包占用的空间68019(字节),以利检查

系统是否有足够空间。

第11行:打开RPM数据库;

第12行:找到0个源代码包,1个执行代码包;

第13-18行:检查软件包的依赖关系。其依赖(requires)的东西均得到满足(satisfied)。

第19行:准备安装执行代码包;

第20行:取得已安装文件系统的列表;

第21-26行:再度取包裹文件头信息,算出软件包占用空间;

第27-31行:列出包中文件及要执行的操作,第27行的test=0表示不是进行安装测试,

file包中的文件均要执行创建操作(create)。

第32行:如果有安装前执行脚本程序的话,执行它;

第33行:安装软件包file-3.26-6;

第34行:如果有安装后执行脚本程序的话,执行它。

3.root:指定根目录

指定根目录ROOT,其作用在于将系统所有操作限定在指定的目录下面,这样RPM操作的数据库位置变了,软件包的安装位置 也变了。它是通过chroot系统调用实现的。RPM默认的数据库目录是/var/lib/rpm,如果指定根目录为/usr,则RPM的数据库目录将变 为/usr/var/lib/rpm。同样,如果包中有个文件为/etc/zhsoft.txt,则安装后为/usr/etc/zhsoft.txt。

看下面的例子:

# rpm -i --root /usr file-3.26-6.i386.rpm
failed to open /usr/var/lib/rpm/packages.rpm

error: 不能打开 /usr/var/lib/rpm/packages.rpm
#

注:指定RPM根目录为/usr安装file出现错误,RPM打不开/usr/var/lib/rpm /packages.rpm文件,这是因为实际上在/usr/var/lib/rpm目录下没有任何RPM数据库。如果想成功安装,可用初始化RPM数据 库命令来建立RPM数据库,命令是rpm --initdb --root /usr(这些功能将在以后讲到)。

4.rcfile:指定RPM资源配置文件

RPM的资源配置文件里,存放着RPM的默认设置,有编译选项optflags,体系定义arch_canon,兼容定义 arch_compat,宏文件定义macrofiles等。RPM默认的资源配置文件(按读取顺序)为:/usr/lib/rpm/rpmrc, /etc/rpmrc,~/.rpmrc。(后两个文件现在意义不大了,如今一般换作RPM宏文件了。较之资源配置文件,宏文件有更大的灵活性。)

如果想让RPM使用用户指定的资源配置文件,就用--rcfile来设定,可同时设定多个文件,文件间以冒号(:)分隔,如/usr/lib/rpm/rpmrc:/etc/rpmrc:~/.rpmrc这种形式。

5.dbpath:指定RPM数据库目录

本选项不同于--root选项,它仅仅是指定RPM数据库的目录,并不改变安装文件的位置。

 

RPM卸载


RPM卸载软件包,并不是简单地将原来安装的文件逐个删除,那样做的话,可能会出现这样或那样的问题。如,A软件包依靠B软件包做某些工作,若B软件包卸载了,则A软件包就不能正常运行了。RPM为用户安全考虑,会做某些检查,尽可能排除出错的情况。
RPM在卸载软件包时,分步骤进行如下操作:
1. 检查依赖(Denpendency)
检查依赖的目的,在于确保当前没有任何软件包依赖于当前要卸载的软件包。
2. 执行卸载前触发脚本程序(Triggerun)
3. 执行卸载前脚本程序(Preuninstall)
本程序为软件包制作者设定,完成卸载前的一些工作,具体如,要卸载的软件包中某个
程序当前正在运行时,脚本程序必须杀掉它,否则无法正确卸载。
4. 检查配置文件(Configfiles)
RPM卸载软件包前会检查包中的配置文件是否修改了,如果修改了,RPM要换个名字保存
该文件,文件名一般是“原文件名+.rpmsave”。(这是RPM软件包管理的特色之一)
5. 真正卸载
即按照软件包中的文件列表,将文件逐个删除。要注意的是,如果其中有文件属于别的
软件包(即两个软件包拥有一个名字相同的文件),则RPM并不删除。
6. 执行卸载后脚本程序(Postuninstall)
本程序主要是完成卸载的善后工作,如将系统配置文件inetd.conf修改一下,去掉安装
时添加的东西等等。
7. 更新RPM数据库
卸载后,RPM删除该软件包在数据库中的所有信息。
8. 执行卸载后触发脚本程序(Triggerpostun)

命令格式
卸载RPM格式的软件包,可使用如下命令格式:
rpm -e [卸载选项1 卸载选项2...] [软件包标识1 软件包标识2...]

注: 也可使用--erase代替-e,效果相同。

软件包标识
对于已安装的软件包,RPM使用如下格式来唯一标识它:
Name[-Subname]-Version-Release
其中: Name: 指软件名;
Subname : 本项可选,指软件包子包的名字;
Version : 指软件版本号。注意:其中不能含减号(-)字符;
Release : 指软件释出号。
例如: 包裹文件file-3.26-6.i386.rpm安装后,其软件包标识为file-3.26-6。可以用此标识卸载,查询,校验该软件包。在命令行上输 入软件包标识时,可以写全,也可以采用简写的方式。如file-3.26-6,可仅输入file,或file-3.26,或输全。又如: 带有子包的软件包标识XFree86-devel-3.3.6-6,可仅输入XFree86-devel,或XFree86-devel-3.3.6,还 可完全输入。
注意: 软件包标识是大小写敏感的,即大写字母与小写字母表示不同的涵义。如bash-2.03-10标识不能输作Bash-2.03-10,也不能输作bAsh-2.03-10等等。

选项列表


选项详解
通用选项的解释,请参见<<精通RPM之二--安装篇>>,本文不再赘述。
下面对指定用选项做些解释:
1. --test : 卸载测试
RPM的卸载测试做些什么?主要是检查依赖关系,确保系统中没有软件包依赖于要卸载的软件包。如果还有软件包依赖要卸载的软件包,则RPM会提示依赖关系将中断的错误,例如:
# rpm -e --test mktemp
error: removing these packages would break dependencies:
mktemp is needed by autoconf-2.13-5
mktemp is needed by dev-2.7.7-4BP
mktemp is needed by groff-1.11a-10BP
mktemp is needed by gzip-1.2.4-15BP
mktemp is needed by initscripts-4.16-3BP
mktemp is needed by metamail-2.7-21BP
mktemp is needed by rpm-3.0.3-4BP
mktemp is needed by autofs-3.1.3-2
/bin/mktemp is needed by apache-1.3.12-5BP
/bin/mktemp is needed by linuxconf-1.16r1.3-4BP
#


当然,我们通过浏览卸载测试时输出的调试信息就知道得更清楚了。
# rpm -e --test -vv file | nl
1 D: opening database mode 0x0 in //var/lib/rpm/
2 D: getting list of mounted filesystems
3 + echo triggeruninstall
4 triggeruninstall
5 D: will remove files test = 1
6 D:file: /usr/share/magic action: remove
7 D:file: /usr/man/man4/magic.4 action: remove
8 D:file: /usr/man/man1/file.1 action: remove
9 D:file: /usr/bin/file action: remove
10 + echo triggerpostuninstall
11 triggerpostuninstall
12 D: removing database entry


注: 本例进行file包的卸载测试,输出信息送管道交nl列出行号,现逐行解释。(行号后以D:开始的行输出的为调试信息)
第1行: 打开/var/lib/rpm目录下的RPM数据库;
第2行: 取已安装文件系统列表;
第3行: 执行卸载前触发脚本程序;
第4行: 这一行是卸载前触发脚本程序的执行结果;
第5行: RPM提示将要删除文件,其中test=1表明为卸载测试,并非真正删除;
第6-9行: 显示各文件的执行操作--删除;
第10行: 执行卸载后触发脚本程序;
第11行: 本行是卸载后触发脚本程序的执行结果;
第12行: 删除软件包在数据库中的信息。
2. --nodeps : 不检查依赖
RPM管理软件包,不仅管理包中的所有文件,还同时管理着软件包之间的依赖关系。如A依赖于B运行,若B不存在了,则A也就运行不了了。RPM维护着这种 关系,尽量避免破坏,以保证软件的正常运行。上例进行mktemp包的卸载测试时,RPM提示了中断依赖关系的错误。如果使用本选项,不检查依赖,则卸载 测试会顺利完成。
# rpm -e --test --nodeps mktemp
#


需要说明的是,除非用户对软件包有足够了解,否则不要使用本选项,最好让RPM自动维护软件间的依赖关系,确保其能正常运行。
3. --noscripts : 不执行脚本程序
一个RPM软件包中可包含五种脚本程序,即:安装前脚本程序,安装后脚本程序,卸载前脚本程序,卸载后脚本程序和校验脚本程序。卸载时使用--noscripts选项,可禁止卸载前与卸载后脚本程序的执行。
注意: 一般用户不要使用此选项。此选项主要提供给软件包制作者使用的。通过禁止执行脚本程序,可以防止因安装带有BUG的软件包而宕掉整个系统。当软件包去掉了BUG后,此选项就不必使用了。
4. --notriggers : 不执行触发程序
为了软件包间的交互控制,RPM设计了三种触发程序:安装时触发程序,卸载前触发程序和卸载后触发程序。为了防止因某一软件包的卸载而引发卸载前与卸载后 触发程序的执行,可以使用--notriggers选项。通过比较下一例子与第1个选项介绍中的例子的输出,就可看到:选择--notriggers选项 后,卸载前与卸载后触发程序都没有被触发执行。
# rpm -e --test -vv --notriggers file | nl
1 D: opening database mode 0x0 in //var/lib/rpm/
2 D: getting list of mounted filesystems
3 D: will remove files test = 1
4 D:file: /usr/share/magic action: remove
5 D:file: /usr/man/man4/magic.4 action: remove
6 D:file: /usr/man/man1/file.1 action: remove
7 D:file: /usr/bin/file action: remove
8 D: removing database entry
5. --allmatches : 卸载所有匹配的包


RPM可将同一软件的不同版本安装到系统中,这样如果想全部卸载掉,这时仅简单输软件名是不行的,将出现错误,如:
# rpm -q foo
foo-6.0-1
foo-7.0-1
# rpm -e foo
error: "foo" specifies multiple packages
#


注: 本例中先查询foo包,发现有6.0和7.0版两个版本,接着卸载foo包,出现错误: 有多个软件包的名字均为foo。
怎样才能全部卸载呢?
答案之一是一个一个卸载,卸载时输入软件包标识,因为软件名相同,所以最少再输个版本号,这种情况适用于软件版本少的时候。
答案之二是使用--allmatches选项,仅输个软件名即可,指示RPM卸载所有匹配的包,比较方便。
# rpm -e --allmatches foo
# rpm -q foo
package foo is not installed
#


卸载过程没有出现错误,之后再查询foo包,RPM则提示软件包未安装。
6. --justdb : 仅修改数据库
使用本选项后,RPM将只更新其数据库,文件系统不更新,意即如果软件包安装有文件的话,卸载后这些文件照样存在。
# rpm -ql file
/usr/bin/file
/usr/man/man1/file.1
/usr/man/man4/magic.4
/usr/share/magic
# ls -l /usr/bin/file
-rwxr-xr-x 1 root root23948 Mar 23 1999 /usr/bin/file
# rpm -e --justdb file
# ls -l /usr/bin/file
-rwxr-xr-x 1 root root23948 Mar 23 1999 /usr/bin/file
#


注: 本例先用rpm -ql查询得到file包的文件列表,再用ls命令列包中的一个文件/usr/bin/file,能列出信息,故文件存在。然后用rpm -e --justdb卸载file包但只更新数据库,而后再用ls命令列/usr/bin/file,可以看到该文件依然存在。

分享到:
评论

相关推荐

    rpm包安装相关命令

    以下是对rpm命令中涉及的关键操作的深入解析: #### 1. 查询系统中安装的所有RPM包 ``` rpm -qa ``` 这条命令会列出系统中所有已通过rpm安装的软件包名称。例如,使用`rpm -qa | grep x11 | head -3`可以查找包含...

    linux\linux-rpm安装命令

    ### Linux RPM 安装命令详解 在Linux系统中,RPM(Red Hat Package Manager)是一种广泛使用的软件包管理系统,主要用于管理、安装、卸载及升级软件包。通过RPM,用户可以轻松地处理各种类型的软件包,从而简化了在...

    Linux命令详解手册 英文版

    3. 系统管理:这些命令涉及系统启动与关机(如shutdown, reboot)、系统服务管理(如systemctl, service)、用户和权限管理(如useradd, chmod)、磁盘管理(如fdisk, mkfs)等。 4. 进程管理:在Linux系统中,可以...

    yum安装本地rpm软件方案详解

    【yum安装本地rpm软件方案详解】 在无法联网的CentOS系统中,安装RPM软件包可能会变得非常耗时,特别是当软件包带有大量依赖时。使用`rpm`命令单独安装每个依赖可能会成为一项艰巨的任务。为此,我们可以采取一种更...

    FTP-用法命令-详解dos.doc

    12. **chmod mode file-name**:更改远程文件的权限,如`chmod 777 a.out`使文件a.out具有完全权限。 13. **close**:断开与远程服务器的连接。 14. **cr**:ASCII模式下,将回车换行转换为回行。 15. **delete ...

    RPM how-to

    常见的命令包括`rpm -i`用于安装包,`rpm -e`用于卸载包,`rpm -q`用于查询已安装的包等。 #### 五、RPM能做什么? 除了基本的安装、卸载和查询功能外,RPM还能实现更多高级功能: - **版本控制**:通过RPM可以...

    APACHE RPM包的卸载_ .pdf

    ### Apache RPM 包的卸载方法详解 #### 一、引言 在Linux环境中,Apache Web服务器是一款非常流行且功能强大的Web服务器软件。通常情况下,Apache可以通过多种方式安装到Linux系统上,其中一种常用的方式就是通过...

    Linux Polkit 权限提升漏洞(CVE-2021-4034)CentOS 7和Centos 6修复升级的 rpm 离线包

    要修复这个漏洞,用户需要将这些rpm包安装到他们的系统中,通常可以通过以下命令完成: - 对于CentOS 7: ```bash sudo rpm -Uvh polkit-0.112-26.el7_9.1.x86_64.rpm ``` - 对于CentOS 6: ```bash sudo rpm -Uvh ...

    OpenOffice-4.1.6-rpm.tar.gz

    3. 安装所有的RPM文件,按照以下顺序运行命令: - 先安装依赖项(如果有的话): ```bash sudo rpm -Uvh --nodeps &lt;dependency_rpm_file&gt; ``` - 然后安装主要组件: ```bash sudo rpm -Uvh --nodeps ...

    linux常用基本命令

    ### Linux常用基本命令详解 #### 一、磁盘空间与文件系统管理 ##### 1. df - 显示磁盘空间使用情况 - **命令格式**:`df [选项]` - **常见用法**: - `df -h`:以易读的格式显示磁盘空间(如GB、MB等)。 - `df ...

    ubuntu 实用命令

    ### Ubuntu实用命令详解 在Ubuntu系统中,熟练掌握一系列实用命令是提高工作效率、解决系统问题的关键。以下是对标题“ubuntu实用命令”以及描述中提到的Linux命令的详细解析,涵盖目录管理、文件操作、权限设置、...

    libtool_2.4.6.mips64el.rar

    2. 使用`rpm -ivh 文件名.rpm`命令逐一安装这些包,如果出现依赖问题,可以尝试使用`yum install -y 文件名.rpm`命令来自动解决依赖。 3. 如果遇到权限问题,可能需要以root权限运行安装命令,使用`sudo`或者切换到...

    新东方Linux培训教程5

    #### RPM常用命令详解 1. **安装软件包**:`rpm -ivh xxx.i386.rpm`,其中`i`代表安装,`v`表示详细输出,`h`用于显示安装进度。 2. **升级软件包**:`rpm -Uvh xxx.i386.rpm`,用于更新已存在的软件包至最新版本...

    Shell脚本解压rpm软件包

    - **文件提取**:从RPM包中提取特定文件,如配置文件、文档等,而不必完全安装整个包。 - **自动化任务**:作为更大自动化流程的一部分,用于快速处理大量RPM包。 #### 脚本详解 ##### 基础结构 脚本的基本结构...

    redhat5安装oracle10g详解

    虽然官方文档表明 Oracle 10g 并不完全支持 RHEL 5,但通过一定的调整和配置,仍可成功完成安装。为了便于读者理解,本文将详细介绍整个安装过程。 **操作系统版本**:Red Hat Enterprise Linux Server release 5 ...

    MySQL 5.6 5.7 安装详解

    - **RPM包安装**:使用`rpm –ivh mysql-*****.rpm`命令进行安装。 - **Yum安装**:执行`yum install mysql-server`。 - **APT安装**:执行`apt-get install mysql-server`。 - **通用二进制安装包安装**: 1. 创建...

    Rsync备份svn策略详解.docx

    【Rsync备份svn策略详解】 Rsync是一款在Unix和Linux环境下广泛使用的数据镜像备份工具,它具有多种特性,使其成为高效、安全的文件同步和备份解决方案。以下是对Rsync功能和配置的详细解析。 1. **镜像备份**:...

    Linux命令大全(修改版).chm

    #### 三、核心知识点详解 1. **基本文件操作命令**: - `ls`:列出目录内容。 - `cd`:切换当前工作目录。 - `mkdir`:创建目录。 - `rm`:删除文件或目录。 - `mv`:移动文件或重命名文件。 - `cp`:复制...

Global site tag (gtag.js) - Google Analytics