如何在Linux上列出已安装的RPM包

时间:2020-03-05 15:27:29  来源:igfitidea点击:

RPM命令是使用基于RPM的发行版,如CentOS,Fedora,OpenSuse和Rhel。
现代Linux Distrs使用yum和dnf包管理器具有更多功能。

本教程解释了可以添加到rpm命令(redhat包管理器)的选项,以列出Linux中的包。

1)列出所有已安装的软件包

要查询整个RPM数据库,我们将使用"-qa"选项(查询全部)来列出Linux中的所有已安装的软件包。

# sudo rpm -qa
Output
grub2-tools-extra-2.02-0.65.el7.centos.2.x86_64
ncurses-base-5.9-14.20130511.el7_4.noarch
libpipeline-1.2.3-3.el7.x86_64
kbd-misc-1.15.5-13.el7.noarch
tuned-2.9.0-1.el7.noarch
bash-4.2.46-30.el7.x86_64
info-5.1-5.el7.x86_64
...

2)列表已安装的特定包

我们可以使用grep命令过滤rpm -qa结果来列出特定的包。

以下命令将列出与"ssh"相关的特定包。

# rpm -qa | grep ssh
sample output
openssh-clients-7.4p1-16.el7.x86_64
openssh-7.4p1-16.el7.x86_64
openssh-server-7.4p1-16.el7.x86_64
libssh2-1.4.3-10.el7_2.1.x86_64

使用以下命令查找特定包的安装日期

# rpm -q --last openssh
openssh-5.3p1-118.1.el6_8.x86_64              Wed 01 Mar 2016 08:30:12 PM UTC

3)列出有关包的详细信息

要列出有关版本,发布,安装日期大小和签名等包的详细信息,请使用qi选项。
例如,让我们检查'OpenSSH'包的详细信息

# rpm -qi openssh

4)通过查询文件列出已安装的包

我们从"OpenSSH-Server-5.3p1-84.1.el6.x86_64"包装中安装了"ssh`。
我们可以在配置文件上使用"-qf"选项(查询文件)使用rpm命令。

以下示例将列出与文件相关的包名('/etc/ssh/sshd_config')提到了命令:

# rpm -qf /etc/ssh/sshd_config
output
openssh-server-7.4p1-16.el7.x86_64

5)显示包安装的所有文件

我们将使用带有rpm命令的-ql选项来显示系统上安装的所有文件的文件。

# rpm -ql openssh-server-7.4p1-16.el7.x86_64
output
/etc/pam.d/sshd
/etc/ssh/sshd_config
/etc/sysconfig/sshd
/usr/lib/systemd/system/sshd-keygen.service
/usr/lib/systemd/system/sshd.service
/usr/lib/systemd/system/sshd.socket
/usr/lib/systemd/system/[email protected]
/usr/lib64/fipscheck/sshd.hmac
/usr/libexec/openssh/sftp-server
/usr/sbin/sshd
/usr/sbin/sshd-keygen
/usr/share/man/man5/moduli.5.gz
/usr/share/man/man5/sshd_config.5.gz
/usr/share/man/man8/sftp-server.8.gz
/usr/share/man/man8/sshd.8.gz
/var/empty/sshd

6)仅列出包的配置文件

我们将使用"rpm"命令"的"-QC""选项来显示与包相关的配置文件。

# rpm -qc openssh-server-7.4p1-16.el7.x86_64
output
/etc/pam.d/sshd
/etc/ssh/sshd_config
/etc/sysconfig/sshd

7)仅列出包的文档文件

我们将使用使用rpm命令的-qd选项(查询文档)仅列出文档文件。

# rpm -qd openssh-server-7.4p1-16.el7.x86_64
output
/usr/share/man/man5/moduli.5.gz
/usr/share/man/man5/sshd_config.5.gz
/usr/share/man/man8/sftp-server.8.gz
/usr/share/man/man8/sshd.8.gz

8)计算安装包的总数

在Linux中,我们可以使用WC命令来计算,因此我们可以将其引导rpm查询命令用于获取已安装软件包的总数。

# rpm -qa | wc -l
222

如果我们使用的是YUM或者DNF包管理器,则使用以下命令:

# yum list installed | wc -l
# dnf list installed | wc -l
# repoquery -a --installed | wc -l

9)使用repoquery命令列出所有已安装的包

在新版本的CentOS,RHEL和Fedora IT支持使用RepoQuery命令列出所有已安装的软件包。
如果我们使用的是DNF包管理器,则安装"DNF-Utils"和Yum Package Manager安装'yum-utils'以使用repoquery。

# dnf install dnf-utils
# yum install yum-utils

使用repoquery命令运行以下命令列出所有已安装的包:

# repoquery -a --installed

10)列出特定存储库的已安装软件包

我们可以列出从RHEL或者CentOS 7或者CentOS 8 Distrs上的特定存储库列出已安装的软件包。

以下命令列出从"epel"存储库中安装的所有包:

# yum list installed | grep @epel

YUMDB是另一个可用于从特定Repo的安装软件包的另一个命令。
YUMDB配有'yum-utils'包,因此确保安装它。

以下YumDB命令将显示"epel"repo的所有已安装的软件包:

# yumdb search from_repo epel

11)如何从RPM包恢复配置文件

如果由于某种原因文件已被损坏或者从系统删除,我们可以从"RPM -QF"查询选项开始,以从文件源自该包中查找。
下一个使用"rpm2cpio | CPIO -DIDMV" 将从包中提取文件。
考虑SSH示例:

假设已删除/etc/ssh/sshd_config文件,我们可能不希望重新安装SSH,因此我们将使用以下步骤恢复文件。

  • 下面的命令显示该文件来自openssh-server-7.4p1-16.el7.x86_64包。
# rpm -qf /etc/init.d/sshd
  • 从源头下载openssh rpm
  • openssh-server-7.4p1-16.el7.x86_64包文件复制到/tmp目录或者我们选择的任何其他目录。
  • 使用rpm2cpio | CPIO -DIDMV提取包。

我们在上述步骤中使用的命令在"/tmp"中创建了一些子目录。
我们现在可以将其复制到原始位置。