RPM命令及软件包详解
Linux 学习 2010-06-28 22:29:16 阅读25 评论0 字号:大 中 小
1. 如何安装 rpm 软件包
rmp 软 件包的安装可以使用程序 rpm 来完成。执行下面的命令
rpm -i your-package.rpm
其中 your-package.rpm 是 你要安装的 rpm 包的文件名,一般置于当前目录下。
安装过程中可能出现下面的警告或者提示:
... conflict with ... 可能是要安装的包里有一些文件可能会覆盖现有
的文件,缺省时这样的情况下是无法正确安装的可以用
rpm --force -i 强制安装即可
... is needed by ...
... is not installed ... 此包需要的一些软件你没有安装可以用
rpm --nodeps -i 来忽略此信息
也就是说, rpm -i --force --nodeps 可以忽略所有依赖关系和文件问题,什么包
都能安装上,但这种强制安装的软件包不能保证完全发挥功能
2. 如何安装 .src.rpm 软件包
有些软件包是以 .src.rpm 结尾的,这类软件包是包含了源代码的 rpm 包,在安装时
需要进行编译。这类软件包有两种安装方法,
方法一:
1. 执 行 rpm -i your-package.src.rpm
2. cd /usr/src/redhat/SPECS
3. rpmbuild -bp your-package.specs 一个和你的软件包同名的 specs 文 件
4. cd /usr/src/redhat/BUILD/your-package/ 一个和你的软件包同名的目录
5. ./configure 这一步和编译普通的源码软件一样,可以加上参数
6. make
7. make install
方法二 :
1. 执 行 rpm -i you-package.src.rpm
2. cd /usr/src/redhat/SPECS
前两步和方法一相同
3. rpmbuild -bb your-package.specs 一个和你的软件包同名的 specs 文 件
这时,在 /usr/src/redhat/RPM/i386/ (根据具体包的不同,也可能是 i686,noarch 等等 )
在这个目录下,有一个新的 rpm 包, 这个是编译好的二进制文件。
执行 rpm -i new-package.rpm 即可安装完成。
3. 如何卸载 rpm 软件包
使用命令 rpm -e 包名,包名可以 包含版本号等信息,但是不可以有后缀 .rpm
比如卸载软件包 proftpd-1.2.8-1 ,可以使用下列格式:
rpm -e proftpd-1.2.8-1
rpm -e proftpd-1.2.8
rpm -e proftpd-
rpm -e proftpd
不可以是下列格式 :
rpm -e proftpd-1.2.8-1.i386.rpm
rpm -e proftpd-1.2.8-1.i386
rpm -e proftpd-1.2
rpm -e proftpd-1
有时会出现一些错误或者警告 :
... is needed by ... 这说明这个软件被其他软件需要 , 不能随便卸载
可以用 rpm -e --nodeps 强制卸载
4. 如何不安装但是获取rpm 包 中的文件
使用工具 rpm2cpio 和 cpio
rpm2cpio xxx.rpm | cpio -vi
rpm2cpio xxx.rpm | cpio -idmv
rpm2cpio xxx.rpm | cpio --extract --make-directories
参数 i 和 extract 相同,表示提取文件。 v 表示指 示执行进程
d 和 make-directory 相同,表示根据包中文件原来的路径建立目录
m 表示 保持文件的更新时间。
5. 如何查看与 rpm 包相关的文件和其他信息
下面所有的例子都假设使用软件包 mysql-3.23.54a-11
1. 我 的系统中安装了那些 rpm 软件包
rpm -qa 讲列出所有安装过的包
如果要查找所有安装过的包含某个字符串 sql 的 软件包
rpm -qa |grep sql
2. 如何获得某个软件包的文件全名
rpm -q mysql 可以获得系统中安装的 mysql 软 件包全名,从中可以获得
当前软件包的版本等信息。这个例子中可以得到信息 mysql-3.23.54a-11
3. 一个 rpm 包中的文件安装到那里去了?
rpm -ql 包名
注意这里的是不包括 .rpm 后 缀的软件包的名称
也就是说只能用 mysql 或 者 mysql-3.23.54a-11 而不是 mysql-3.23.54a-11.rpm 。
如果只是想知道可执行程序放到那里去了,也可以用 which ,比如
which mysql
4. 一个 rpm 包中包含那些文件
一个没有安装过的软件包,使用 rpm -qlp ****.rpm
一个已经安装过的软件包,还可以使用 rpm -ql ****.rpm
5. 如何获取关于一个软件包的版本,用途等相关信息?
一个没有安装过的软件包,使用 rpm -qip ****.rpm
一个已经安装过的软件包,还可以使用 rpm -qi ****.rpm
6. 某个程序是哪个软件包安装的,或者哪个软件包包含这个程序
rpm -qf `which 程序名 ` 返回软件包的全名
rpm -qif `which 程序名 ` 返回软件包的有关信息
rpm -qlf `which 程序名 ` 返回软件包的文件列表
注意,这里不是引号,而是 ` ,就是 键盘左上角的那个键。
也可以使用 rpm -qilf ,同时输出软件包信息和文件列表
7. 某个文件是哪个软件包安装的,或者哪个软件包包含这个文件
注意,前一个问题中的方法,只适用与可执行的程序,而下面的方法,不仅可以
用于可执行程序,也可以用于普通的任何文件。前提是知道这个文件名。
首先获得这个程序的完整路径,可以用 whereis 或者 which ,然后使用 rpm -qf 例如:
# whereis ftptop
ftptop: /usr/bin/ftptop /usr/share/man/man1/ftptop.1.gz
# rpm -qf /usr/bin/ftptop
proftpd-1.2.8-1
# rpm -qf /usr/share/doc/proftpd-1.2.8/rfc/rfc0959.txt
proftpd-1.2.8-1
总结:
获得软件包相关的信息用 rpm -q , q 表示查询 query , 后面可以跟其他选项,比如
i 表 示 info ,获得软件包的信息;
l 表 示 list ,获得文件列表;
a 表 示 all ,在所有包中执行查询;
f 表 示 file ,根据文件进行相关的查询;
p 表 示 package ,根据软件包进行查询
需要的查询条件可以使用 grep 产 生,或者从 "` `" 中的命令行产生
6. 关于rpm 软 件包的一些相关知识
1. 什么是 rpm
rpm 即 RedHat Package Management ,是 RedHat 的发明之一
2. 为什么需要 rpm
在一个操作系统下,需要安装实现各种功能的软件包。这些软件包一般都有各自的
程序,但是同时也有错综复杂的依赖关系。同时还需要解决软件包的版本,以及安装,
配置,卸载的自动化问题。为了解决这些问题, RedHat 针对自己的系统提出了一个
较好的办法来管理成千上百的软件。这就是 RPM 管 理系统。在系统中安装了 rpm 管理系统
以后,只要是符合 rpm 文 件标准的打包的程序都可以方便的安装,升级,卸载
3. 是不是所有的 linux 都使用 rpm
任何系统都需要包管理系统,因此很多 linux 都使用 rpm 系统。但 rpm 系 统是为 RH 专门
但是 TL,Mandrake 等系统也都 使用 rpm 。由于 rpm 的源程序可以在别的系统上 进行编译,
所以有可能在别的系统上也使用 rpm
除了 rpm ,其他一些系统也有自己的软 件包管理程序,例如 debian 的 deb 包,
slakware 也都有自己的包管理系统
4.rpm 包的文件名为什么那么长
rpm 包 的文件名中包含了这个软件包的版本信息,操作系统信息,硬件要求等等。
比如 mypackage-1.1-2TL.i386.rpm ,其中 mypackage 是在系统中登记 的软件包的名字
1.1 是 软件的版本号, 2 是发行号, TL 表示 用于 TL 操作系统,还可能是 RH 等。 i386 表示
用于 intel x86 平台,还可能是 sparc 等。
5. 软件包文件名中的 i386,i686 是什么意思
rpm 软 件包的文件名中,不仅包含了软件名称,版本信息,还包括了适用的硬件架构
的信息。
i386 指 这个软件包适用于 intel 80386 以上的 x86 架构的计算机 (AI32)
i686 指 这个软件包适用于 intel 80686 以上 ( 奔腾 pro 以上 ) 的 x86 架构的计算机 (IA32)
noarch 指这个软件包于硬件架构无关,可以通用。
i686 软 件包的程序通常针对 CPU 进行了优化,所以,向后兼容比较用以, i386 的 包在
x86 机 器上都可以用。向前一般不兼容。不过现在的计算机,奔腾 pro 以下的 CPU 已经很少
用,通常配置的机器都可以使用 i686 软 件包
6. 不同操作系统发行的 rpm 包可否混用?
对于已经编译成二进制的 rpm 包, 由于操作系统环境不同,一般不能混用。
对于以 src.rpm 发行的软件包,由于 需要安装时进行本地编译,所以通常可以在不同
系统下安装。
7. 使用 rpm 时遇到的一些特殊问题
Q 我 用 rpm -e **.rpm 无法删除 rpm 包
A 包 名不要包括 rpm ,
rpm -e 包名,可以包含版本号等信息,但是不可以有后缀 .rpm
Q 在 MS 的系统下有没有读 RPM 文 件的工具?
A wincmd with rpm plugins.....
Q 是否可以通过 ftp 安装安装升级 rpm 包?
A 可 以。 rpm -ivh ftp://xxxxxxxx/PATH2SomeRPM
Q rpm 安装时已有的包版本过高怎么办?
A 有 时由于安装的软件包太老,而系统中相关的软件包版本比较新,所以可能需要
安装的包依赖的一些文件会找不到。这时有两种解决办法,
第一是在系统文件中找到和需要的文件功能相同或相似的文件,做一个符号链接到
需要的目录下。
第二是下载安装新版本的软件包。
END
强制卸载rpm包:rpm -e --nodeps *.rpm