本章主要介紹使用rpm對軟件包進行管理
- 使用rpm查詢軟件的信息
- 使用rpm安裝及卸載軟件
- 使用rpm對軟件進行更新
- 使用rpm對軟件進行驗證
rpm 全稱是redhat package manager,后來改成rpm package manager,這是根據源 碼包編譯出來的包。先從光盤中拷貝一個包,并看它是如何命名的
先掛載光盤,然后拷貝vsftpd這個包
[root@redhat8 ~]# mount /dev/cdrom /mnt/
mount: /mnt: WARNING: device write-protected, mounted read-only.
[root@redhat8 ~]# cp /mnt/AppStream/Packages/vsftpd-3.0.3-34.el8.x86_64.rpm .
[root@redhat8 ~]# ll vsftpd-3.0.3-34.el8.x86_64.rpm
-r--r--r-- 1 root root 185184 12月 11 10:19 vsftpd-3.0.3-34.el8.x86_64.rpm
[root@redhat8 ~]#
這里字段的含義如下:
(1)vsftpd:包的名稱
(2)3.0.3:版本,即version
(3)33.el8:小版本號,即release,其中el8指的是此包適用于RHEL8系統
(4)x86_64:指的是架構,到底是32位還是64位的包,x86_64表示是64位的。rpm的安 裝命令是“rpm -ivh 安裝包”。安裝rpm
[root@redhat8 ~]# rpm -ivh vsftpd-3.0.3-34.el8.x86_64.rpm
警告:vsftpd-3.0.3-34.el8.x86_64.rpm: 頭V3 RSA/SHA256 Signature, 密鑰 ID fd431d51: NOKEY
Verifying... ################################# [100%]
準備中... ################################# [100%]
正在升級/安裝...1:vsftpd-3.0.3-34.el8 ################################# [100%]
[root@redhat8 ~]#
這樣把vsftpd-3.0.3-33.el8.x86_64.rpm 安裝好了。如果是第一次接觸 Linux 會感覺到奇怪,怎么不像 Windows一樣讓我們通過瀏覽來指定路徑,那么這個包安裝到哪里了呢?
相信大家在Windows中都安裝過 Chrome瀏覽器,基本上是秒安裝,也沒有指定路徑,因為這個安裝包中已經定義好安裝路徑了。同理,rpm 安裝時也已經指定了安裝路徑,把這個rpm打開,先拷貝到/opt目錄中
[root@redhat8 ~]# cp vsftpd-3.0.3-34.el8.x86_64.rpm /opt/
[root@redhat8 ~]# cd /opt/
[root@redhat8 opt]# ls
vsftpd-3.0.3-34.el8.x86_64.rpm
[root@redhat8 opt]#
解壓此包
[root@redhat8 opt]# rpm2cpio vsftpd-3.0.3-34.el8.x86_64.rpm | cpio -id
714 塊
[root@redhat8 opt]# ls
etc usr var vsftpd-3.0.3-34.el8.x86_64.rpm
[root@redhat8 opt]#
可以看到,生成了3個目錄
[root@redhat8 opt]# tree
.
├── etc
│?? ├── logrotate.d
│?? │?? └── vsftpd
│?? ├── pam.d
│?? │?? └── vsftpd
│?? └── vsftpd
│?? ├── ftpusers
│?? ├── user_list
│?? ├── vsftpd.conf
│?? └── vsftpd_conf_migrate.sh
├── usr
│?? ├── lib
│?? │?? └── systemd
│?? │?? ├── system
│?? │?? │?? ├── vsftpd.service
│?? │?? │?? ├── vsftpd@.service
│?? │?? │?? └── vsftpd.target
│?? │?? └── system-generators
│?? │?? └── vsftpd-generator
...輸出信息...
├── var
│?? └── ftp
│?? └── pub
└── vsftpd-3.0.3-34.el8.x86_64.rpm27 directories, 48 files
[root@redhat8 opt]#
可以看到,當我們安裝rpm包時,它就會把包中的內容按照這個結構拷貝到系統,所以安 裝的路徑都是安排好了的
1.1 rpm查詢
如果要查詢已經安裝過的軟件包的信息, rpm的第一個選項需要使用-q,表示查詢的意思。查詢系統安裝的所有軟件包用 rpm-qa命令
[root@redhat8 ~]# rpm -qa
查詢系統是否安裝了某個軟件包用“rpm -qa 包名”命令。例如,要查詢是否安裝了 vsftpd
[root@redhat8 ~]# rpm -qa vsftpd
vsftpd-3.0.3-34.el8.x86_64
[root@redhat8 ~]#
但是這種用法,在寫包名時多一個或少一個字符都查詢不出來
[root@redhat8 ~]# rpm -qa vsftp
[root@redhat8 ~]#
所以,更建議使用管道和grep進行過濾
[root@redhat8 ~]# rpm -qa | grep vsf
vsftpd-3.0.3-34.el8.x86_64
[root@redhat8 ~]#
查詢安裝某軟件包之后所生成的文件用“rpm -ql 包名”命令,這里q后面是字母1。例 如,要查詢vsftpd所生成的文件
[root@redhat8 ~]# rpm -ql vsftpd
/etc/logrotate.d/vsftpd
/etc/pam.d/vsftpd
/etc/vsftpd
/etc/vsftpd/ftpusers
......
這樣就可以看到 vsftpd安裝到哪里了
查看軟件包生成的配置文件用“rpm -qc包名”命令
[root@redhat8 ~]# rpm -qc vsftpd
/etc/logrotate.d/vsftpd
/etc/pam.d/vsftpd
/etc/vsftpd/ftpusers
/etc/vsftpd/user_list
/etc/vsftpd/vsftpd.conf
[root@redhat8 ~]#
查看包的信息用“rpm-qi包名”
[root@redhat8 ~]# rpm -qi vsftpd
Name : vsftpd
Version : 3.0.3
Release : 34.el8
Architecture: x86_64
Install Date: 2023年12月11日 星期一 10時43分50秒
Group : System Environment/Daemons
Size : 355692
License : GPLv2 with exceptions
Signature : RSA/SHA256, 2021年04月21日 星期三 20時42分12秒, Key ID 199e2f91fd431d51
Source RPM : vsftpd-3.0.3-34.el8.src.rpm
Build Date : 2021年04月20日 星期二 22時28分24秒
Build Host : x86-vm-15.build.eng.bos.redhat.com
Relocations : (not relocatable)
Packager : Red Hat, Inc. <http://bugzilla.redhat.com/bugzilla>
Vendor : Red Hat, Inc.
URL : https://security.appspot.com/vsftpd.html
Summary : Very Secure Ftp Daemon
Description :
vsftpd is a Very Secure FTP daemon. It was written completely from
scratch.
[root@redhat8 ~]#
當我們安裝軟件包時會產生許多文件,反過來想查詢某個文件是由哪個軟件包安裝出來的用rpm -qf /path/file命令
[root@redhat8 ~]# rpm -qf /etc/vsftpd/vsftpd.conf
vsftpd-3.0.3-34.el8.x86_64
[root@redhat8 ~]#
可以看到,/etc/vsfipd/vsfipd.conf是由 vsftpd這個包產生的
[root@redhat8 ~]# rpm -qf /etc/passwd
setup-2.12.2-6.el8.noarch
[root@redhat8 ~]#
可以看到,/etc/passwd是由setup這個包生成的
以上這些都是針對已經安裝了的軟件包進行查詢,如果要查詢安裝包,則需要加上p選項
[root@redhat8 ~]# rpm -qcp vsftpd-3.0.3-34.el8.x86_64.rpm
警告:vsftpd-3.0.3-34.el8.x86_64.rpm: 頭V3 RSA/SHA256 Signature, 密鑰 ID fd431d51: NOKEY
/etc/logrotate.d/vsftpd
/etc/pam.d/vsftpd
/etc/vsftpd/ftpusers
/etc/vsftpd/user_list
/etc/vsftpd/vsftpd.conf
[root@redhat8 ~]#
當然,在RHEL8/CentOS8中不加p選項也可以,之前的系統是不行的
1.2 rpm安裝及卸載
前面已經介紹了用“rpm -ivh 安裝包”命令安裝軟件,且 vsftpd已經安裝完成
卸載軟件包的命令是“rpm -e 軟件包”,現在要把vsftpd卸載掉
[root@redhat8 ~]# rpm -e vsftpd
[root@redhat8 ~]# rpm -qa | grep vsftpd
[root@redhat8 ~]#
可以看到,現在vsftpd已經不存在了,再次把這個包安裝上去
[root@redhat8 ~]# rpm -ivh vsftpd-3.0.3-34.el8.x86_64.rpm
警告:vsftpd-3.0.3-34.el8.x86_64.rpm: 頭V3 RSA/SHA256 Signature, 密鑰 ID fd431d51: NOKEY
Verifying... ################################# [100%]
準備中... ################################# [100%]
正在升級/安裝...1:vsftpd-3.0.3-34.el8 ################################# [100%]
[root@redhat8 ~]#
有時需要強制安裝軟件,例如,某個包已經安裝過了,現在想重新安裝
[root@redhat8 ~]# rpm -ivh vsftpd-3.0.3-34.el8.x86_64.rpm
警告:vsftpd-3.0.3-34.el8.x86_64.rpm: 頭V3 RSA/SHA256 Signature, 密鑰 ID fd431d51: NOKEY
Verifying... ################################# [100%]
準備中... ################################# [100%]軟件包 vsftpd-3.0.3-34.el8.x86_64 已經安裝
[root@redhat8 ~]#
這里提示包已經安裝過了,無法再次安裝。此時加上--force選項強制安裝即可
一般情況下,用于某個文件丟失了,想通過強制重新安裝來找回此文件
[root@redhat8 ~]# rm -rf /etc/vsftpd/vsftpd.conf
[root@redhat8 ~]# ls /etc/vsftpd/
ftpusers user_list vsftpd_conf_migrate.sh
[root@redhat8 ~]#
這里把/etc/vsftpd/vsftpd.conf刪除,然后開始強制安裝
[root@redhat8 ~]# rpm -ivh vsftpd-3.0.3-34.el8.x86_64.rpm --force
警告:vsftpd-3.0.3-34.el8.x86_64.rpm: 頭V3 RSA/SHA256 Signature, 密鑰 ID fd431d51: NOKEY
Verifying... ################################# [100%]
準備中... ################################# [100%]
正在升級/安裝...1:vsftpd-3.0.3-34.el8 ################################# [100%]
[root@redhat8 ~]#
然后再次查看文件
[root@redhat8 ~]# ls /etc/vsftpd/
ftpusers user_list vsftpd.conf vsftpd_conf_migrate.sh
[root@redhat8 ~]#
這里又重新生成了被刪除的文件,其他文件原來即使做了修改也不會被覆蓋替換
1.3 軟件包的更新
所謂更新,就是卸載舊版本的軟件包,然后安裝新版本的軟件包。假設原來系統已經安裝了1.0版本的軟件包,現在要安裝2.0版本的軟件包,如果兩個版本的包安裝路徑不一樣,則可以共存;如果兩個版本的包安裝路徑一樣,則會產生沖突
先卸載已經安裝了的vsftpd
[root@redhat8 ~]# rpm -e vsftpd
[root@redhat8 ~]#
?然后從RHEL8.0的系統上烤貝一個版本稍低的 vsftpd的安裝包
[root@redhat8 ~]# ls -l vsftpd*
-rw-r--r-- 1 root root 183844 12月 11 11:15 vsftpd-3.0.3-28.el8.x86_64.rpm
-r--r--r-- 1 root root 185184 12月 11 10:19 vsftpd-3.0.3-34.el8.x86_64.rpm
[root@redhat8 ~]#
上面ls后面的選項是數字1,不是字母l,這里一個版本稍低,一個版本稍高。先把低版本的包安裝上去
[root@redhat8 ~]# rpm -ivh vsftpd-3.0.3-28.el8.x86_64.rpm
警告:vsftpd-3.0.3-28.el8.x86_64.rpm: 頭V3 RSA/SHA256 Signature, 密鑰 ID fd431d51: NOKEY
Verifying... ################################# [100%]
準備中... ################################# [100%]
正在升級/安裝...1:vsftpd-3.0.3-28.el8 ################################# [100%]
[root@redhat8 ~]#
這里已經安裝了一個3.0.3-28的包,然后安裝一個更高版本的3.0.3-33包
[root@redhat8 ~]# rpm -ivh vsftpd-3.0.3-34.el8.x86_64.rpm
警告:vsftpd-3.0.3-34.el8.x86_64.rpm: 頭V3 RSA/SHA256 Signature, 密鑰 ID fd431d51: NOKEY
Verifying... ################################# [100%]
準備中... ################################# [100%]file /etc/vsftpd/vsftpd.conf from install of vsftpd-3.0.3-34.el8.x86_64 conflicts with file from package vsftpd-3.0.3-28.el8.x86_64file /usr/lib/systemd/system/vsftpd.service from install of vsftpd-3.0.3-34.el8.x86_64 conflicts with file from package vsftpd-3.0.3-28.el8.x86_64file /usr/lib/systemd/system/vsftpd.target from install of vsftpd-3.0.3-34.el8.x86_64 conflicts with file from package vsftpd-3.0.3-28.el8.x86_64file /usr/lib/systemd/system/vsftpd@.service from install of vsftpd-3.0.3-34.el8.x86_64 conflicts with file from package vsftpd-3.0.3-28.el8.x86_64file /usr/sbin/vsftpd from install of vsftpd-3.0.3-34.el8.x86_64 conflicts with file from package vsftpd-3.0.3-28.el8.x86_64file /usr/share/man/man5/vsftpd.conf.5.gz from install of vsftpd-3.0.3-34.el8.x86_64 conflicts with file from package vsftpd-3.0.3-28.el8.x86_64
[root@redhat8 ~]#
因為安裝路徑一樣,所以這里提醒產生了沖突導致沒有安裝成功。如果用更新的方法來安裝是可以的,更新的用法是“rpm -Uvh安裝包”
[root@redhat8 ~]# rpm -Uvh vsftpd-3.0.3-34.el8.x86_64.rpm
警告:vsftpd-3.0.3-34.el8.x86_64.rpm: 頭V3 RSA/SHA256 Signature, 密鑰 ID fd431d51: NOKEY
Verifying... ################################# [100%]
準備中... ################################# [100%]
正在升級/安裝...1:vsftpd-3.0.3-34.el8 ################################# [ 50%]
正在清理/刪除...2:vsftpd-3.0.3-28.el8 ################################# [100%]
[root@redhat8 ~]#
可以看到,現在已經更新成功
[root@redhat8 ~]# rpm -qa | grep vsftpd
vsftpd-3.0.3-34.el8.x86_64
[root@redhat8 ~]#
可以看到,這里安裝的是3.0.3-34版本的包
對于內核來說,不同版本的安裝路徑是不一樣的,所以可以同時安裝多個版本的不會產生沖突。因此,更新內核時建議使用rpm -ivh命令而不是rpm -Uvh命令。因為rpm -Uvh命 令會卸載舊版本的內核,如果新版本的內核有問題就無法正常進入系統了。如果使用rpm -ivh 命令,包括舊版本的內核同時存在,先用新版本的內核引導系統,如果沒問題再卸載舊版本 的內核也不遲,如果有問題還可以使用舊版本的內核引導系統
1.4 rpm驗證
當我們安裝了一個軟件包之后會產生許多文件,要是想判斷這些文件是否被修改過,可以用rpm -V(大寫字母V)命令,例如,我們剛剛安裝了vsftpd,并沒有修改任何配置文件
[root@redhat8 ~]# rpm -V vsftpd
[root@redhat8 ~]#
沒有任何輸出,說明此vsftpd所生成的文件沒有被修改,現在用vim編輯器修改一下/etc/vsfipd/vsftpd.conf,隨便增添刪減一些內容(最好是修改注釋后面的內容,否則影響vsftpd啟動),然后再次判斷
[root@redhat8 ~]# rpm -V vsftpd
S.5....T. c /etc/vsftpd/vsftpd.conf
[root@redhat8 ~]#
再次檢查可以看到/etc/vsftpd/vsftpd.conf被修改過
S指的是大小
5指的是md5值
T指的是時間
c指的是此文件是vsftpd 的配置文件
這樣就可以看到哪些文件被修改過了。只修改時間
[root@redhat8 ~]# touch /etc/vsftpd/ftpusers
[root@redhat8 ~]# rpm -V vsftpd
.......T. c /etc/vsftpd/ftpusers
S.5....T. c /etc/vsftpd/vsftpd.conf
[root@redhat8 ~]#
可以看到,/etc/vsftpd/ftpusers的時間發生了改變
紅帽發行的每一個數據包都對它做了數據簽名,以證明這個包是紅帽官方的。需要在本機用紅帽的公鑰來進行驗證。首先驗證機器上是否安裝了紅帽的公鑰
[root@redhat8 ~]# rpm -qa | grep pubkey
[root@redhat8 ~]#
沒有任何輸出,說明沒有導人紅帽的公鑰。使用如下命令導入公鑰
[root@redhat8 ~]# rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release
[root@redhat8 ~]#
或者導入存儲在光盤中的公鑰
[root@redhat8 vv]# rpm --import /mnt/RPM-GPG-KEY-redhat-release
[root@redhat8 vv]#
再次檢查公鑰的信息
[root@redhat8 vv]# rpm -qa | grep pubkey
gpg-pubkey-fd431d51-4ae0493b
gpg-pubkey-d4082792-5b32db75
[root@redhat8 vv]#
可以看到,已經成功導入了。下面驗證如下兩個vsftpd包
[root@redhat8 ~]# rpm -K vsftpd-3.0.3-34.el8.x86_64.rpm
vsftpd-3.0.3-34.el8.x86_64.rpm: digests signatures 確定
[root@redhat8 ~]#
這個包是一開始從光盤中拷貝過來的,可以看到驗證通過
[root@redhat8 ~]# rpm -K vsftpd-3.0.3-28.el8.x86_64.rpm
vsftpd-3.0.3-28.el8.x86_64.rpm: digests signatures 確定
[root@redhat8 ~]#
這個包也是從光盤中拷貝過來的,只是其他版本的光盤,所以可以看到也是驗證通過的