现状

对于一个不熟悉的服务器或者是虽然是自己的服务器,但历史比较久远,对于上面安装了的一些软件包,我们记忆都慢慢模糊了。

我今天遇到一个情况,在安装一个工具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啥的,不是具体的安装命令了。

不要着急,修改下如下配置:

https://serverfault.com/questions/851717/yum-how-to-show-command-line-column-in-yum-history-list-all-output

# 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

可参考:https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/6/html/deployment_guide/sec2-yum-transaction_history-reverting#sec2-Yum-Transaction_History-Reverting

参考文档

https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/6/html/deployment_guide/sec-yum-transaction_history#sec2-Yum-Transaction_History-Listing

https://serverfault.com/questions/851717/yum-how-to-show-command-line-column-in-yum-history-list-all-output

linux中如何判断一个rpm是手动安装还是通过yum安装的的更多相关文章

  1. linux中内核的一个不错的参数somaxconn

    导读:在linux中,/proc/sys/net/core/somaxconn这个参数,linux中内核的一个不错的参数somaxconn 看下其解析: 对于一个TCP连接,Server与Client ...

  2. C#中怎么判断一个数组中是否存在某个数组值

    (1) 第一种方法: ,,}; ); // 这里的1就是你要查找的值 ) // 不存在 else // 存在 (2) 第二种方法: string[] strArr = {"a",& ...

  3. [python语法]python中如何判断一个集合是另一个集合的子集?

    问:python中如何判断一个集合是另一个集合的子集? 答:用issubset()方法 语法: A.issubset(B) 返回: True 如果A是B的子集. False 如果A不是B的子集. 样例 ...

  4. 在Linux中要修改一个文件夹或文件的权限

    在Linux中要修改一个文件夹或文件的权限我们需要用到linux chmod命令来做,下面我写了几个简单的实例大家可参考一下. 语法如下: chmod [who] [+ | - | =] [mode] ...

  5. Oracle中如何判断一个字符串是否含有汉字

    看到网友问,怎么查询表中某个字段数据是不是包含了全角字符啊? 这个问题涉及到几个函数:to_single_byte.length和lengthb,我之前做开发的时候研究的是如何判断一个字符串中是否包含 ...

  6. 【转】shell中如何判断一个变量是否为空

    判断一个脚本中的变量是否为空,我写了一个这样的shell脚本: #!/bin/sh #filename: test.sh para1= if [ ! -n $para1 ]; then echo &q ...

  7. js中如何判断一个字符串包含另外一个字符串?

    js中判断一个字符串包含另外一个字符串的方式比较多? 比如indexOf()方法,注意O是大写. var test="this is a test"; if(test.indexO ...

  8. Linux中如何开启一个定时任务

    Linux的定时任务是基于cron驱动做到的 安装 Ubantu系统下安装crontab 正常情况下需要先执行:apt-get upgrade 进行升级 安装:apt-get install cron ...

  9. Linux中如何恢复rm命令误删除的文件之extundelete编译安装及使用

    1.下载extundelete包,安装依赖 我用的是Centos系统,在安装extundelete之前需要安装e2fsprogs,e2fsprogs-libs,e2fsprogs-devel. yum ...

  10. linux安装mysql使用yum安装

    安装MySQL 安装mysql客户端: yum install mysql 安装mysql 服务器端: yum install mysql-server 至此我就可以使用Yum简单地管理MySQL更新 ...

随机推荐

  1. 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 ...

  2. Linux 管理面板云帮手、APPNODE与宝塔哪个好

    阿里云服务器推荐购买99元 由于用作服务器的 Linux 主机通常都没有图形化界面,与日常使用的 Windows .MAC有着很大的差别,一些必备组件的安装或更新就很费时间,后期维护也费神.服务器管理 ...

  3. Qt编写安防视频监控系统31-onvif设备搜索

    一.前言 做视频监控系统,绕不过onvif这玩意,这玩意主要就是为了统一一个大概的标准,能够对各个厂家的监控设备进行常用的一些操作,比如搜索.获取信息.云台控制.事件订阅.抓拍图片等,如果没有这个规范 ...

  4. Windows7-64环境中部署OpenLayers6.4.3详细步骤

    注意:OL5以后,OpenLayers采用ES6,以前OL4那种简单的加库的方法已经不适用了. Windows7-64环境中部署OpenLayers6.4.3详细步骤: 1.官方教程(英文版) 2.中 ...

  5. 基于开源IM即时通讯框架MobileIMSDK:RainbowChat v8.3版已发布

    关于MobileIMSDK MobileIMSDK 是一套专门为移动端开发的开源IM即时通讯框架,超轻量级.高度提炼,一套API优雅支持UDP .TCP .WebSocket 三种协议,支持iOS.A ...

  6. kubernetes系列(八) - 控制器的资源清单定义

    1. ReplicaSet 1.1 ReplicaSet资源清单 1.2 selector 2. Deployment 2.1 Deployment资源清单 2.2 其他相关操作 2.2.1 应用ya ...

  7. 让我看看有多少人不知道Vue3中也能实现高阶组件HOC

    前言 高阶组件HOC在React社区是非常常见的概念,但是在Vue社区中却是很少人使用.主要原因有两个:1.Vue中一般都是使用SFC,实现HOC比较困难.2.HOC能够实现的东西,在Vue2时代mi ...

  8. Redis 学习笔记之基础

    一.Redis 是什么 Redis 是一个使用 C 语言写成的,开源的.key-value 结构的.非关系型数据库.它支持存储的 value 类型相对更多,包括 String(字符串).List(列表 ...

  9. 链路追踪 Sleuth 和 Zipkin

    微服务的链路追踪概述: 分布式链路追踪(Distributed Tracing),就是将一次分布式请求还原成调用链路,进行日志记录,性能监控并将一次分布式请求的调用情况集中展示.比如各个服务节点上的耗 ...

  10. Symbolic pg walkthrough Intermediate window 利用302进行文件csrf

    nmap nmap -p- -A -sS -T4 192.168.239.177 Starting Nmap 7.95 ( https://nmap.org ) at 2025-01-15 03:39 ...