现状

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

我今天遇到一个情况,在安装一个工具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. consul discovery prefer-ip-address

    spring.cloud.consul.discovery.prefer-ip-address: 'true'

  2. 龙哥量化:macd背离量化的细节问题(图解)

    如果您需要代写技术指标公式, 请联系我. 龙哥QQ:591438821 龙哥微信:Long622889 读完本篇,通过解决背离标准量化不清的问题,可以规范背离的使用时机,同时准确过滤假信号,找到真正的 ...

  3. [转]如何将 PDF 批量导入到iPhone或iPad?| 技能Get!

    电脑上没看完的 PDF,想在移动端继续阅读? 问题来了!如何随身携带大量PDF文档?如何将电脑上的 PDF 文档快速导入到你的 iPhone 和 iPad 呢?链接数据线已经 out 了,现在告诉大家 ...

  4. Python中的包、模块和源码的组织关系

  5. 即时通讯技术文集(第22期):IM安全相关文章(Part1) [共13篇]

    ​为了更好地分类阅读 52im.net 总计1000多篇精编文章,我将在每周三推送新的一期技术文集,本次是第22 期. [- 1 -] 即时通讯安全篇(一):正确地理解和使用Android端加密算法 ...

  6. 可扩展系统——基于SPI扩展

    一.我们为什么讨论SPI? 为具有悠久历史的大型项目(屎山)添加新功能时,我们常常不太好评估变更的影响范围.因为原系统不具备良好的扩展性,导致修改整体发散,且不易单测.此时可以考虑使用接口来描述业务逻 ...

  7. 配置Ubuntu上的NFS

    $sudo apt-get install nfs-kernel-server nfs-common 配置 $sudo vim /etc/exports#添加#/home/pi/project/roo ...

  8. 监听sessionStorage中值的变化

    应用场景:将登录接口所返回的用户信息存入sessionStorage,在其他地方需要使用到用户信息,但不知道什么时候接口请求完,此时可以监听sessionStorage中值的变化. 应用:Event自 ...

  9. 注册表判断是否安装微软Edge浏览器

    自己摸索的,注册表判断是否安装微软Edge浏览器: bool checkInstalledMsEdge() { try { using(var ieKey = Registry.LocalMachin ...

  10. biancheng-Spring Boot框架

    目录http://c.biancheng.net/spring_boot/ 1Spring Boot是什么2创建Spring Boot项目3Spring Boot starter4YAML5Sprin ...