linux中如何判断一个rpm是手动安装还是通过yum安装的
现状
对于一个不熟悉的服务器或者是虽然是自己的服务器,但历史比较久远,对于上面安装了的一些软件包,我们记忆都慢慢模糊了。
我今天遇到一个情况,在安装一个工具x2openEuler时,安装失败,提示依赖冲突:
[root@VM-0-6-centos x2openeuler]# yum install x2openEuler-core-3.0.0-20250104.x86_64.rpm
...


我在网上都没发现别人有遇到这个问题,后面咨询了下ai,说可能是因为系统里安装了mysql的原因,这个工具会在系统中安装mariadb-server,安装时检查依赖,就发现和系统中的mysql有冲突。
判断mysql是源码安装还是rpm
在linux中,一个软件可能有多种安装方式。
- 源码编译安装
- 网上下载rpm,上传到服务器上rpm -ivh安装
- yum方式安装
如果要卸载这个冲突的mysql,首先还得知道,当初是怎么安装的。
我先通过rpm查询,判断是通过rpm安装的,还是源码编译安装的。
[root@VM-0-6-centos x2openeuler]# rpm -qa |grep mysql
mysql-community-common-5.7.36-1.el7.x86_64
mysql-community-libs-compat-5.7.36-1.el7.x86_64
zabbix-server-mysql-5.0.18-1.el7.x86_64
mysql-community-libs-5.7.36-1.el7.x86_64
mysql-community-server-5.7.36-1.el7.x86_64
rh-php72-php-mysqlnd-7.2.24-1.el7.x86_64
zabbix-web-mysql-scl-5.0.18-1.el7.noarch
mysql57-community-release-el7-9.noarch
mysql-community-client-5.7.36-1.el7.x86_64
输出有结果,那就是rpm方式安装的。
下面这个命令,还可以看到时间。
[root@VM-0-6-centos x2openeuler]# rpm -qa --last|grep mysql
zabbix-web-mysql-scl-5.0.18-1.el7.noarch Sat 18 Dec 2021 04:16:33 PM CST
rh-php72-php-mysqlnd-7.2.24-1.el7.x86_64 Sat 18 Dec 2021 04:16:31 PM CST
zabbix-server-mysql-5.0.18-1.el7.x86_64 Sat 18 Dec 2021 04:11:05 PM CST
mysql-community-libs-compat-5.7.36-1.el7.x86_64 Sun 28 Nov 2021 02:15:46 PM CST
mysql-community-server-5.7.36-1.el7.x86_64 Sun 28 Nov 2021 02:15:45 PM CST
mysql-community-client-5.7.36-1.el7.x86_64 Sun 28 Nov 2021 02:15:24 PM CST
mysql-community-libs-5.7.36-1.el7.x86_64 Sun 28 Nov 2021 02:15:21 PM CST
mysql-community-common-5.7.36-1.el7.x86_64 Sun 28 Nov 2021 02:15:21 PM CST
mysql57-community-release-el7-9.noarch Sun 28 Nov 2021 02:12:07 PM CST
接下来的问题是,这些rpm是直接通过从网上下载了rpm包并上传,然后执行rpm -ivh安装呢,还是通过yum install的方式安装的呢?
判断是rpm ivh还是yum安装
方法1
我在以前发现了如下命令:
yum history

这个命令,可以看到最近的20条yum安装,但是20条之外的,就看不到了。
如果你想看到20条之外的,可以使用如下命令:
yum history list all

这次,可以显示这个服务器的所有记录了。但是,你们可能发现了,第二列那里,竟然显示的是root啥的,不是具体的安装命令了。
不要着急,修改下如下配置:
# edit file "/etc/yum.conf" ==>>> and add this line somewhere in it
# 修改 /etc/yum.conf,增加如下行
history_list_view=cmds
然后重新执行,就正常了。如果只是临时生效,可以:
sudo yum --setopt=history_list_view=commands history list all
我这边搜了下mysql相关的,果然找到了,应该是第二条,第一行是这个yum事务的id,为56:
[root@VM-0-6-centos x2openeuler]# yum history list all |grep mysql
59 | install zabbix-web-mysql | 2021-12-18 16:16 | Install | 33 >
56 | install mysql-server | 2021-11-28 14:15 | I, O | 6 ><
接下来,就看下这个56号事务的详情:
yum history info 56

现在就确定了,就是这个事务,安装了mysql。
方法2
我们也可以通过其他命令,来找到对应的事务id。
[root@VM-0-6-centos x2openeuler]# yum history package-list \*mysql\*

这里看到一个数字为56,我们通过查看 yum history info 56,确定了就是这个事务id。
通过事务id,回滚对应的安装
yum history undo 事务id
结果我这里不知道为啥,卸载失败了:
[root@VM-0-6-centos x2openeuler]# yum history undo 56
Undoing transaction 56, from Sun Nov 28 14:15:20 2021
Obsoleted mariadb-libs-1:5.5.65-1.el7.x86_64 @os
Dep-Install mysql-community-client-5.7.36-1.el7.x86_64 @mysql57-community
Dep-Install mysql-community-common-5.7.36-1.el7.x86_64 @mysql57-community
Obsoleting mysql-community-libs-5.7.36-1.el7.x86_64 @mysql57-community
Obsoleting mysql-community-libs-compat-5.7.36-1.el7.x86_64 @mysql57-community
Install mysql-community-server-5.7.36-1.el7.x86_64 @mysql57-community
Error: No package(s) available to install
还是手动卸载吧:
rpm -e mysql-community-server-5.7.36-1.el7.x86_64
rpm -e mysql-community-client-5.7.36-1.el7.x86_64
rpm -e mysql-community-libs-compat-5.7.36-1.el7.x86_64
rpm -e mysql-community-libs-5.7.36-1.el7.x86_64
rpm -e mysql-community-common-5.7.36-1.el7.x86_64
参考文档
linux中如何判断一个rpm是手动安装还是通过yum安装的的更多相关文章
- linux中内核的一个不错的参数somaxconn
导读:在linux中,/proc/sys/net/core/somaxconn这个参数,linux中内核的一个不错的参数somaxconn 看下其解析: 对于一个TCP连接,Server与Client ...
- C#中怎么判断一个数组中是否存在某个数组值
(1) 第一种方法: ,,}; ); // 这里的1就是你要查找的值 ) // 不存在 else // 存在 (2) 第二种方法: string[] strArr = {"a",& ...
- [python语法]python中如何判断一个集合是另一个集合的子集?
问:python中如何判断一个集合是另一个集合的子集? 答:用issubset()方法 语法: A.issubset(B) 返回: True 如果A是B的子集. False 如果A不是B的子集. 样例 ...
- 在Linux中要修改一个文件夹或文件的权限
在Linux中要修改一个文件夹或文件的权限我们需要用到linux chmod命令来做,下面我写了几个简单的实例大家可参考一下. 语法如下: chmod [who] [+ | - | =] [mode] ...
- Oracle中如何判断一个字符串是否含有汉字
看到网友问,怎么查询表中某个字段数据是不是包含了全角字符啊? 这个问题涉及到几个函数:to_single_byte.length和lengthb,我之前做开发的时候研究的是如何判断一个字符串中是否包含 ...
- 【转】shell中如何判断一个变量是否为空
判断一个脚本中的变量是否为空,我写了一个这样的shell脚本: #!/bin/sh #filename: test.sh para1= if [ ! -n $para1 ]; then echo &q ...
- js中如何判断一个字符串包含另外一个字符串?
js中判断一个字符串包含另外一个字符串的方式比较多? 比如indexOf()方法,注意O是大写. var test="this is a test"; if(test.indexO ...
- Linux中如何开启一个定时任务
Linux的定时任务是基于cron驱动做到的 安装 Ubantu系统下安装crontab 正常情况下需要先执行:apt-get upgrade 进行升级 安装:apt-get install cron ...
- Linux中如何恢复rm命令误删除的文件之extundelete编译安装及使用
1.下载extundelete包,安装依赖 我用的是Centos系统,在安装extundelete之前需要安装e2fsprogs,e2fsprogs-libs,e2fsprogs-devel. yum ...
- linux安装mysql使用yum安装
安装MySQL 安装mysql客户端: yum install mysql 安装mysql 服务器端: yum install mysql-server 至此我就可以使用Yum简单地管理MySQL更新 ...
随机推荐
- ERROR: manifest for hyperledger/fabric-orderer:latest not found
In docker command # pull to local before using itdocker pull hyperledger/fabric-orderer:x86_64-1.0.0 ...
- MySQL said: Authentication plugin 'caching_sha2_password' cannot be loaded
OUTLINE问题描述解决方案问题描述在mac下,用sequel pro连接数据库,出现以下问题: MySQL said: Authentication plugin 'caching_sha2_pa ...
- Qt/C++原创推流工具/支持多种流媒体服务/ZLMediaKit/srs/mediamtx等
一.前言 1.1 功能特点 支持各种本地视频文件和网络视频文件. 支持各种网络视频流,网络摄像头,协议包括rtsp.rtmp.http. 支持将本地摄像头设备推流,可指定分辨率和帧率等. 支持将本地桌 ...
- 思维导图学《Java性能权威指南》
目录 性能测试 Java 性能调优工具箱 JIT 编译器 垃圾收集 原生内存 线程与同步的性能 Java API 技巧 GitHub LeetCode 项目 目录 YANO SPACE 2021 计划 ...
- 聊一聊 C#异步中的Overlapped是如何寻址的
一:背景 1. 讲故事 前段时间训练营里的一位朋友提了一个问题,我用ReadAsync做文件异步读取时,我知道在Win32层面会传 lpOverlapped 到内核层,那在内核层回头时,它是如何通过这 ...
- .NET 中管理 Web API 文档的两种方式
前言 在 .NET 开发中管理 Web API 文档是确保 API 易用性.可维护性和一致性的关键.今天大姚给大家分享两种在 .NET 中管理 Web API 文档的方式,希望可以帮助到有需要的同学. ...
- Nginx-总结列表
Nginx配置详解 Nginx实现前后端分离,反向代理.负载均衡 Nginx 专为性能优化而开发,性能是其最重要的考量,实现上非常注重效率 .它支持内核 Poll 模型,能经受高负载的考验,有报告表明 ...
- Spring IOC实现原理,源码深度剖析!
Spring容器高层视图 Spring 启动时读取应用程序提供的Bean配置信息,并在Spring容器中生成一份相应的Bean配置注册表,然后根据这张注册表实例化Bean,装配好Bean之间的依赖关系 ...
- javaIO类--File类
-------------------- File类 是对文件系统中文件以及目录(文件夹)进行封装的对象,可以通过面向对象的思想来操作文件和目录(文件夹).File类保存文件或目录的各种元素的信息,包 ...
- Winform-耗时操作导致界面渲染滞后
原因: 某些耗时操作阻塞了主线程. 理解上述原因,需先搞清楚Winform线程机制.主要有以下2点特性:1.单线程模型:2.依赖消息循环. 1.单线程模型 Winform 默认是单线程.通常,所有的U ...