Linux rpm命令介绍
rpm命令是Red Hat Package Manager(红帽软件包管理器)的缩写,它是一种用于在Linux系统中安装、卸载、升级、查询和验证软件包的工具。rpm命令可以处理以.rpm为扩展名的文件,这些文件是一种二进制格式的压缩文件,包含了软件包的元数据和实际的程序文件。rpm命令可以让用户方便地管理系统中的软件包,避免了手动解压、编译和配置的麻烦。
适用的Linux版本
rpm命令主要适用于基于Red Hat的Linux发行版,如Fedora、CentOS、RHEL等。其他一些发行版,如SUSE、Mandriva、Mageia等,也支持rpm命令,但可能有一些差异。对于不支持rpm命令的发行版,如Debian、Ubuntu等,用户可以使用alien命令来将.rpm文件转换为.deb文件,然后使用dpkg或apt命令来安装。例如,要将foo.rpm转换为foo.deb并安装,可以执行以下命令:
[linux@bashcommandnotfound.cn ~]$ sudo alien -d foo.rpm
[linux@bashcommandnotfound.cn ~]$ sudo dpkg -i foo.deb
Linux rpm命令的基本用法
rpm命令的语法格式如下:
rpm [选项] [参数]
选项可以指定rpm命令要执行的操作,如安装、卸载、查询等。参数可以是一个或多个.rpm文件的名称,或者是一个或多个已安装软件包的名称。
Linux rpm命令的常用选项说明
rpm命令有很多选项,可以根据不同的操作来选择使用。以下是一些常用选项的说明:
选项 | 说明 |
---|---|
-i | 安装一个或多个软件包 |
-e | 卸载一个或多个软件包 |
-U | 升级一个或多个软件包,如果软件包不存在,则安装 |
-F | 升级一个或多个软件包,如果软件包不存在,则忽略 |
-q | 查询一个或多个软件包的信息 |
-v | 显示详细的操作信息 |
-h | 显示操作进度条 |
--test | 测试操作,不实际执行 |
--nodeps | 忽略依赖关系检查 |
--force | 强制执行操作 |
Linux rpm命令的实例
以下是一些使用rpm命令的实例:
如何安装一个软件包
要安装一个软件包,例如foo.rpm,可以使用-i选项,并指定文件名作为参数:
[linux@bashcommandnotfound.cn ~]$ sudo rpm -i foo.rpm
如果要安装多个软件包,可以一次指定多个文件名作为参数:
[linux@bashcommandnotfound.cn ~]$ sudo rpm -i foo.rpm bar.rpm baz.rpm
如果要显示安装过程的详细信息和进度条,可以使用-v和-h选项:
[linux@bashcommandnotfound.cn ~]$ sudo rpm -ivh foo.rpm
如果要测试安装操作是否会成功,而不实际执行安装,可以使用--test选项:
[linux@bashcommandnotfound.cn ~]$ sudo rpm -ivh --test foo.rpm
如果要忽略软件包的依赖关系检查,可以使用--nodeps选项:
[linux@bashcommandnotfound.cn ~]$ sudo rpm -ivh --nodeps foo.rpm
如果要强制安装一个软件包,即使它与已安装的软件包有冲突,可以使用--force选项:
[linux@bashcommandnotfound.cn ~]$ sudo rpm -ivh --force foo.rpm
如何卸载一个软件包
要卸载一个软件包,例如foo,可以使用-e选项,并指定软件包名作为参数:
[linux@bashcommandnotfound.cn ~]$ sudo rpm -e foo
如果要卸载多个软件包,可以一次指定多个软件包名作为参数:
[linux@bashcommandnotfound.cn ~]$ sudo rpm -e foo bar baz
如果要显示卸载过程的详细信息和进度条,可以使用-v和-h选项:
[linux@bashcommandnotfound.cn ~]$ sudo rpm -evh foo
如果要测试卸载操作是否会成功,而不实际执行卸载,可以使用--test选项:
[linux@bashcommandnotfound.cn ~]$ sudo rpm -evh --test foo
如果要忽略软件包的依赖关系检查,可以使用--nodeps选项:
[linux@bashcommandnotfound.cn ~]$ sudo rpm -evh --nodeps foo
如果要强制卸载一个软件包,即使它是其他软件包的依赖,可以使用--force选项:
[linux@bashcommandnotfound.cn ~]$ sudo rpm -evh --force foo
如何升级一个软件包
要升级一个软件包,例如foo.rpm,可以使用-U选项,并指定文件名作为参数:
[linux@bashcommandnotfound.cn ~]$ sudo rpm -U foo.rpm
如果要升级多个软件包,可以一次指定多个文件名作为参数:
[linux@bashcommandnotfound.cn ~]$ sudo rpm -U foo.rpm bar.rpm baz.rpm
如果要显示升级过程的详细信息和进度条,可以使用-v和-h选项:
[linux@bashcommandnotfound.cn ~]$ sudo rpm -Uvh foo.rpm
如果要测试升级操作是否会成功,而不实际执行升级,可以使用--test选项:
[linux@bashcommandnotfound.cn ~]$ sudo rpm -Uvh --test foo.rpm
如果要忽略软件包的依赖关系检查,可以使用--nodeps选项:
[linux@bashcommandnotfound.cn ~]$ sudo rpm -Uvh --nodeps foo.rpm
如果要强制升级一个软件包,即使它与已安装的软件包有冲突,可以使用--force选项:
[linux@bashcommandnotfound.cn ~]$ sudo rpm -Uvh --force foo.rpm
如何查询一个软件包的信息
要查询一个已安装的软件包的信息,例如foo,可以使用-q选项,并指定软件包名作为参数:
[linux@bashcommandnotfound.cn ~]$ rpm -q foo
这将显示软件包的名称、版本、发布号和架构。例如:
foo-1.0-1.x86_64
如果要查询一个未安装的软件包的信息,例如foo.rpm,可以使用-q和-p选项,并指定文件名作为参数:
[linux@bashcommandnotfound.cn ~]$ rpm -qp foo.rpm
这将显示与已安装的软件包相同的信息。
如果要显示更多的信息,可以使用-q和一些其他的选项。以下是一些常用的选项:
选项 | 说明 |
---|---|
-a | 查询所有已安装的软件包 |
-i | 显示软件包的描述信息 |
-l | 显示软件包中的文件列表 |
-c | 显示软件包中的配置文件列表 |
-d | 显示软件包中的文档文件列表 |
-s | 显示软件包中的文件状态 |
-R | 显示软件包的依赖关系 |
例如,要显示foo软件包的描述信息,可以执行以下命令:
[linux@bashcommandnotfound.cn ~]$ rpm -qi foo
这将显示类似于以下的信息:
Name : foo
Version : 1.0
Release : 1
Architecture: x86_64
Install Date: Mon 23 Oct 2023 10:00:00 AM CST
Group : Applications/Utilities
Size : 1234567
License : GPL
Signature : RSA/SHA256, Tue 10 Oct 2023 12:00:00 PM CST, Key ID abcdef1234567890
Source RPM : foo-1.0-1.src.rpm
Build Date : Tue 10 Oct 2023 11:00:00 AM CST
Build Host : buildhost.example.com
Relocations : (not relocatable)
Packager : Foo Bar <foo@bar.com>
Vendor : Foo Inc.
URL : http://www.foo.com/
Summary : A sample foo package
Description :
This is a sample foo package that does nothing useful.
要显示foo软件包中的文件列表,可以执行以下命令:
[linux@bashcommandnotfound.cn ~]$ rpm -ql foo
这将显示类似于以下的信息:
/usr/bin/foo
/usr/lib64/foo.so.1.0
/usr/lib64/foo.so.1 -> foo.so.1.0
/usr/share/doc/foo-1.0/LICENSE
/usr/share/doc/foo-1.0/README.md
/usr/share/man/man1/foo.1.gz
要显示foo软件包中的配置文件列表,可以执行以下命令:
[linux@bashcommandnotfound.cn ~]$ rpm -qc foo
这将显示类似于以下的信息:
/etc/foo.conf
要显示foo软件包中的文档文件列表,可以执行以下命令:
[linux@bashcommandnotfound.cn ~]$ rpm -qd foo
这将显示类似于以下的信息:
/usr/share/doc/foo-1.0/LICENSE
/usr/share/doc/foo-1.0/README.md
/usr/share/man/man1/foo.1.gz
要显示foo软件包中的文件状态,可以执行以下命令:
[linux@bashcommandnotfound.cn ~]$ rpm -qs foo
这将显示类似于以下的信息:
normal /usr/bin/foo
normal /usr/lib64/foo.so.1.0
normal /usr/lib64/foo.so.1 -> foo.so.1.0
normal /usr/share/doc/foo-1.0/LICENSE
normal /usr/share/doc/foo-1.0/README.md
normal /usr/share/man/man1/foo.1.gz
要显示foo软件包的依赖关系,可以执行以下命令:
[linux@bashcommandnotfound.cn ~]$ rpm -qR foo
这将显示类似于以下的信息:
libc.so.6()(64bit)
libm.so.6()(64bit)
rpmlib(CompressedFileNames) <= 3.0.4-1
rpmlib(FileDigests) <= 4.6.0-1
rpmlib(PayloadFilesHavePrefix) <= 4.0-1
如何验证一个软件包的完整性
要验证一个已安装的软件包的完整性,即检查软件包中的文件是否被修改或损坏,可以使用-V选项,并指定软件包名作为参数:
[linux@bashcommandnotfound.cn ~]$ rpm -V foo
这将显示一些字母和符号,表示文件的属性是否与软件包中的元数据一致。以下是一些常见的字母和符号的含义:
字母或符号 | 说明 |
---|---|
S | 文件大小不一致 |
M | 文件模式(权限和类型)不一致 |
5 | 文件MD5校验和不一致 |
D | 设备号不一致 |
L | 符号链接路径不一致 |
U | 文件所有者不一致 |
G | 文件所属组不一致 |
T | 文件修改时间不一致 |
P | 功能不一致 |
例如,如果显示以下信息:
S.5....T. c /etc/foo.conf
这表示文件/etc/foo.conf的大小、MD5校验和和修改时间与软件包中的元数据不一致。
如果要验证一个未安装的软件包的完整性,即检查.rpm文件是否被修改或损坏,可以使用-V和-p选项,并指定文件名作为参数:
[linux@bashcommandnotfound.cn ~]$ rpm -Vp foo.rpm
这将显示类似于已安装的软件包的验证信息。
Linux rpm命令的注意事项
在使用rpm命令时,有以下几点需要注意:
- 在安装、卸载或升级软件包时,最好先使用--test选项来测试操作是否会成功,避免出现意外的错误或冲突。
- 在安装、卸载或升级软件包时,尽量遵循软件包的依赖关系,不要随意使用--nodeps或--force选项,否则可能导致系统不稳定或损坏。
- 在查询软件包的信息时,可以使用多个选项来显示更多的细节,也可以使用通配符来匹配多个软件包。例如,要显示所有以foo开头的软件包的描述信息,可以执行以下命令:
[linux@bashcommandnotfound.cn ~]$ rpm -qi foo*
- 在验证软件包的完整性时,如果发现有文件被修改或损坏,可以尝试重新安装或升级该软件包来修复问题。也可以使用--verify选项来安装、卸载或升级软件包,并同时进行验证。例如,要安装并验证foo.rpm,可以执行以下命令:
[linux@bashcommandnotfound.cn ~]$ sudo rpm -Uvh --verify foo.rpm
Linux rpm命令相关的快捷键
在使用rpm命令时,有以下几个快捷键可以提高效率:
- Tab键:可以自动补全文件名或软件包名。
- 上下箭头键:可以在历史命令中切换。
- Ctrl+C:可以中断当前的操作。
- Ctrl+Z:可以暂停当前的操作,并将其放入后台。
- Ctrl+R:可以搜索历史命令。
评论区