如何在Linux上列出已安装的RPM包
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"中创建了一些子目录。
我们现在可以将其复制到原始位置。