linux基础命令_rpm

蛋蛋 2022年10月10日 74 0

rpm

CentOS7主要有rpm和yum这两种包软件的管理。两种包的管理各有用处,其中主要区别是:YUM使用简单但需要联网,YUM会去网上的YUM包源去获取所需要的软件包。而RPM的需要的操作经度比较细,需要我们做的事情比较多。

redhat包管理器rpm。英文是redhat package manager ,redhat 软件包的管理。

rmp原本是Red Hat Linux发行版专门用来管理Linux各项套件的程序,由于它遵循GPL规则且功能强大方便,因而广受欢迎。逐渐受到其他发行版的采用。RPM套件管理方式的出现,让Linux易于安装,升级,间接提升了Linux的适用度。

rpm是以一种数据库记录的方式来将所需要的套件安装在Linux主机的一套管理程序。也就是说Linux系统中存在一个关于rpm的数据库,它记录了安装的包与包之间的依赖相关性。rpm包是预先在Linux主机上编译好并打包的文件,安装起来非常快捷。

要安装rpm包,首先需要下载对应包,可用的下载链接:

http://rpmfind.net/
http://www.rpmseek.com/index.html
http://rpm.pbone.net/

以tree命令对应的rpm包为例,下载界面可能是这样的:

可以看到,有许多不同版本的rpm包,那么我们在确定应该下载哪个前,需要先了解rpm包的包名含义。

rpm包名详解

rpm包以.rpm结尾,而源码包以.src.rpm结尾。RPM软件包命令规则:

name-version-arch.rpm
name-version-arch.src.rpm

以tree-2.0.2-1.2.x86_64.rpm为例

  • name,如:tree,是软件的名称
  • version,如:2.0.2-1.2,是软件的版本号,版本号格式通常为“主版本号.次版本号.修正号”。
  • arch,如:x86_64,是表示包适用的硬件平台,目前rpm支持的平台有:i386,i586,i686,sparc和alpha
  • rpm和.src.rpm,是rpm包类型后缀,rpm是编译好的二进制包,.src.rpm是源码包
  • 特殊名称:
    (1)el*:表示发行商的版本,el6表示这个软件包是在rhel6.x/centos6.x下使用;rpm包有个特点,centOS7的rpm包一般只能装到CentOS7的系统里,CentOS6的软件包只能装到CentOS6的系统里。
    (2)devel:表示这个rpm包是软件的开发包
    (3)noarch:说明这样的软件包可以在任何平台安装和运行,不需要特定的硬件平台
    仅了解包名定义还无法帮助我们准确的找到我们需要的包,因为arch这一项我们还不太解

常用命令合集

-ivh:安装显示安装进度--install--verbose--hash
-Uvh:升级软件包--Update;
-qpl: 列出RPM软件包内的文件信息[Query Package list];
-qpi:列出RPM软件包的描述信息[Query Package install package(s)];
-qf:查找指定文件属于哪个RPM软件包[Query File];
-Va:校验所有的 RPM软件包,查找丢失的文件[View Lost];
-e:删除包

rpm -q samba		#查询程序是否安装
rpm -ivh /media/cdrom/RedHat/RPMS/samba-3.0.10-1.4E.i386.rpm		#按路径安装并显示进度
rpm -ivh --relocate /=/opt/gaim gaim-1.3.0-1.fc4.i386.rpm		#指定安装目录
rpm -ivh --test gaim-1.3.0-1.fc4.i386.rpm		#用来检查依赖关系;并不是真正的安装;
rpm -qa | grep httpd		#[搜索指定rpm包是否安装]--all搜索*httpd*
rpm -ql httpd		#[搜索rpm包]--list所有文件安装目录
rpm -qpi Linux-1.4-6.i368.rpm		#[查看rpm包]--query--package--install package信息
rpm -qpf Linux-1.4-6.i368.rpm		#[查看rpm包]--file
rpm -qpR file.rpm		#[查看包]依赖关系
rpm -ivh file.rpm  #[安装新的rpm]--install--verbose--hash
rpm -ivh http://mirrors.kernel.org/fedora/core/4/i386/os/Fedora/RPMS/gaim-1.3.0-1.fc4.i386.rpm
rpm -Uvh file.rpm		#[升级一个rpm]--upgrade
rpm -Uvh --oldpackage gaim-1.3.0-1.fc4.i386.rpm		#新版本降级为旧版本/低版本
rpm -e file.rpm		#[删除一个rpm包]--erase

参数

-i, --install install package(s)
-v, --verbose provide more detailed output
-h, --hash print hash marks as package installs (good with -v)
-e, --erase erase (uninstall) package
-U, --upgrade=+ upgrade package(s)
--replacepkge 无论软件包是否已被安装,都强行安装软件包
--test 安装测试,并不实际安装
--nodeps 忽略软件包的依赖关系强行安装
--force 忽略软件包及文件的冲突
-a, --all query/verify all packages
-p, --package query/verify a package file
-l, --list list files in package
-d, --docfiles list all documentation files
-f, --file query/verify package(s) owning file

如何查看安装的包有什么执行命令或命令是哪个rpm包安装的

linux系统上有对应的命令,怎么查看命令是哪个rmp包安装的,例如openeuler

# which ls
/usr/bin/ls
# rpm -qf /usr/bin/ls
coreutils-9.0-12.oe2203sp3.x86_64

linux设备上没有这个命令,怎么查看命令是哪个rmp包安装的

# yum provides *bin/ls
coreutils-9.0-12.oe2203sp3.x86_64 : A set of basic GNU tools commonly used in shell scripts
Repo        : @System
Matched from:
Provide    : /bin/ls

coreutils-9.0-12.oe2203sp3.x86_64 : A set of basic GNU tools commonly used in shell scripts
Repo        : OS
Matched from:
Provide    : /bin/ls
......

# repoquery --whatprovides *bin/ls
......
coreutils-0:9.0-12.oe2203sp3.x86_64

已安装命令,有rpm包,通过rpm包查询

# rpm -ql nginx-1.2.0-0.x86_64.rpm | grep 'bin/'
或
# file /usr/bin/example-command /usr/local/bin/example-command /usr/sbin/example-command /usr/local/sbin/example-command

未安装命令,有rpm包,通过rpm包查询

# rpm -qlp nginx-1.2.0-0.x86_64.rpm | grep 'bin/'
或
# rpm2cpio nginx-1.2.0-0.x86_64.rpm |cpio -dimv
# file ./usr/bin/example-command ./usr/local/bin/example-command ./usr/sbin/example-command ./usr/local/sbin/example-command

rpm -qlp example-package.rpm | grep '/bin/'

linux提取rpm包,不安装提取rpm包里的文件

rpm2cpio nginx-1.2.0-0.x86_64.rpm |cpio -dimv

根据软件名查看部署文件及目录

# rpm -ql lrzsz
/etc/ima/digest_lists.tlv/0-metadata_list-compact_tlv-lrzsz-0.12.20-46.oe2203.x86_64
/etc/ima/digest_lists/0-metadata_list-compact-lrzsz-0.12.20-46.oe2203.x86_64
/usr/bin/rb
/usr/bin/rx
/usr/bin/rz
/usr/bin/sb
/usr/bin/sx
/usr/bin/sz
/usr/share/doc/lrzsz
/usr/share/doc/lrzsz/COPYING
/usr/share/doc/lrzsz/README
/usr/share/locale/de/LC_MESSAGES/lrzsz.mo
/usr/share/man/man1/rz.1.gz
/usr/share/man/man1/sz.1.gz

rpm获取软件版本

# 已安装软件包中获取
rpm -q --queryformat '%{VERSION}\n' 包名

# 从rpm包中获取
rpm -qp --queryformat '%{VERSION}\n' 包文件.rpm

# 提取其他信息
rpm -qp --queryformat 'Name: %{NAME}\nVersion: %{VERSION}\nRelease: %{RELEASE}\n' example.rpm

rpm库重建

#!/bin/bash
export SYSTEMCTL_SKIP_REDIRECT=1

egrep -q "release [6-7]" /etc/redhat-release 2>/dev/null
if [[ $? -ne 0 ]];then
	com="/usr/share/doc/bash-*/scripts/timeout -9 10s"
else
	com="/usr/bin/timeout -s 9 10"
fi
${com} rpm -q bash >/dev/null 2>&1
if [ $? -ne 0 ] ;then
	[ "`ps aux |egrep 'rpm[q]? -' |grep -v grep`"X != ""X ] && ps aux |egrep 'rpm[q]? -' |grep -v grep |awk '{print $2}' |xargs kill -9
	rm -f /var/lib/rpm/__db.00*
	rpmdb --rebuilddb
	${com} rpm -q bash >/dev/null 2>&1
	if [ $? -ne 0 ] ;then
		[ "`ps aux |egrep 'rpm[q]? -' |grep -v grep`"X != ""X ] && ps aux |egrep 'rpm[q]? -' |grep -v grep |awk '{print $2}' |xargs kill -9
		rm -f /var/lib/rpm/__db.00*
		rm -f /var/lib/rpm/.dbenv.lock
		rm -f /var/lib/rpm/.rpm.lock
		rpmdb --rebuilddb
	fi
	${com} rpm -q bash && exit 0 || exit 1
fi
  1. 删除当前系统中已损坏的RPM数据库,执行如下命令:
rm -f /var/lib/rpm/_db.*
  1. 重建 RPM 数据库,执行如下命令:
rpm -rebuilddb

命令合集:

rm -f /var/lib/rpm/_db.*; rpm -rebuilddb

warning: waiting for transaction lock on /var/lib/rpm/.rpm.lock

解决办法:删除/var/lib/rpm/.rpm.lock即可,之后重建正常。

rm -f /var/lib/rpm/.rpm.lock
rpm --rebuilddb

也可通过fuser /var/lib/rpm/.rpm.lock查看占用的进程,之后ps aux |grep processid找到对应程序,杀死即可。

参考:
http://t.zoukankan.com/jjzd-p-6513011.html

Last Updated: 2025/06/16 16:35:33
linux基础命令_dpkg linux性能调优_bcc-tools