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

浙公網安備 33010602011771號