您好,登錄后才能下訂單哦!
程序包的升級:
升級rpm包:
格式:rpm{-U|--upgrade} [install-options] PACKAGE_FILE ...
選項:
-U:表示升級或安裝
-F:僅是升級
升級來講額外的常用選項:
--oldpackage:降級;
(為什么要降級?
當一個程序包升級之后發現各種不兼容,發現各種不好用,因此這時我們就進行回滾操作。將程序在還原至原來的版本。)
--force:強制升級;
(為什么要強制升級?
有些時候我們升級到較新的版本時,因為依賴關系的問題,很有可能存在這樣的現狀,老版本的程序包被其他的程序包所依賴,但是新的程序包不能滿足此前的依賴關系,因為他依賴的功能較老程序有,新版本中程序中沒有了,給換了,所以現在升級會出現沖突,甚至會報錯,因為升級之后可能會影響到依賴的完整性,這時候我們如果要想忽略這個歷依賴關系強制升級,那么我們就需要強制升級。)
升級rpm軟件包的真正的用法:
rpm -Uvh PACKAGE_FILE...... //后面的省略號表示可以同時安裝多個包
或
rpm -Fvh [PACKAGE_FILE......
注意:上面的兩個選項-U和-F之間的區別就是,-U是當程序包沒有則執行安裝操作,有則執行升級操作;而選項-F是原來的程序包有就執行升級,沒有則不進行任何操作。
注意:
(1)不要對內核進行升級操作;
(比方說,就想內核4.0的版本,在升級之前必須要重啟系統,所以我們一旦對內核進行升級操作,意味著我們就需要重啟系統,才能啟用新內核,或者是我們即便是現在不重啟,那么下一次重啟也會啟用新內核,萬一新內核與我們的版本不兼容怎么辦?是不是啟動不了了?這么這個時候我們應該怎樣辦呢?我們就需要進入救援模式了。所以不建議對內核進行升級操作。那么不升級,我有希望測試新版本怎么辦?
那么有一個辦法,linux支持多內核版本并存,因此我們打算升級內核的時候,我們可以直接進行安裝新內核。)
(2)如果某原程序包的配置文件安裝后曾被修改過,那么新版本的程序提供的同一個配置文件不會覆蓋原有版本的配置文件,而是把新版本的配置文件重命名后提供保存,重命名的格式:FILENAME.rpmnew這個表示:原來的文件名字后面跟上“.rpmnew”
升級程序包的演示操作:(在centos7上)
(1)我們去阿里云的鏡像網站上下載一個程序包,我們就升級上次安裝的zsh他的版本是zsh-4.3.11-4.el6.centos.2.x86_64.rpm,查看現在安裝的程序版本,我們可以在命令行中使用命令“rpm -ql 程序前一個字符”然后tab鍵補全,我們就能查看我們安裝的某程序的版本。
我們進入“mirrors.aliyun.com”這個網站,然后進入下面的目錄:
http://mirrors.aliyun.com/centos/7.2.1511/updates/x86_64/Packages/找到zsh的最新版本進行下載。
(2)我們通過Xshell這個遠程連接工具將這個程序包復制到linux系統上。
我們將這個程序包復制到root用戶的家目錄。
第二當我們的系統是linux系統,我們在將“zsh”程序下載后,然后如果是需要將這個程序從一個主機發送到另一個主機上進行安裝,那么我們需要使用Xshell工具,在命令行中執行一下命令:
[root@centos6 ~]# scp /root/zsh-5.0.2-14.el7_2.2.x86_64.rpm 192.168.178.131:/root/
The authenticity of host '192.168.178.131(192.168.178.131)' can't be established.
RSA key fingerprint is64:8c:31:ff:e7:e2:58:31:1e:b7:b6:f2:75:fc:e0:8a.
Are you sure you want to continueconnecting (yes/no)? y
Please type 'yes' or 'no': yes
Warning: Permanently added'192.168.178.131' (RSA) to the list of known hosts.
root@192.168.178.131's password: 需要輸入對方的主機的密碼
zsh-5.0.2-14.el7_2.2.x86_64.rpm 100% 2434KB 2.4MB/s 00:00
[root@centos6 ~]#
如果是我們將這個程序包拷貝到對方主機上的某個普通用戶的家目錄下:則對方主機IP前面需要加上這個普通用戶的名稱,并用@連接,復制普通用戶的家目錄,我們要注意是/home/USERNAME
[root@centos6 ~]# scp zsh-5.0.2-14.el7_2.2.x86_64.rpm dong@192.168.178.131:/home/dong
dong@192.168.178.131's password:
zsh-5.0.2-14.el7_2.2.x86_64.rpm 100% 2434KB 2.4MB/s 00:00
[root@centos6 ~]#
(3)升級zsh
[root@centos7 ~]# rpm -Uvh zsh-5.0.2-14.el7_2.2.x86_64.rpm
警告:zsh-5.0.2-14.el7_2.2.x86_64.rpm: 頭V3 RSA/SHA256Signature, 密鑰 ID f4a80eb5: NOKEY
準備中... ################################# [100%]
正在升級/安裝...
1:zsh-5.0.2-14.el7_2.2 ################################# [ 50%]
正在清理/刪除...
2:zsh-5.0.2-14.el7 ################################# [100%]
[root@centos7 ~]# rpm -q zsh
zsh-5.0.2-14.el7_2.2.x86_64
[root@centos7 ~]#
卸載rpm包:
格式:rpm{-e|--erase} [--allmatches] [--nodeps] [--noscripts] [--notriggers] [--test]PACKAGE_NAME ...
大多數情況下選項“-e”都能完成卸載操作。
注意:我們在安裝,升級和查詢的時候后面是PACKAGE_FILE,這是時安裝程序包的路徑;但是卸載的時候是PACKAGE_NAME這是代表程序包的名稱。
選項:
--allmatches:表示卸載所有匹配指定名稱的程序包的各版本;
--nodeps:忽略依賴關系
--test:測試卸載,dry run干跑模式;
查詢:是一個非常重要的功能
格式:
rpm {-q|--query} [select-options][query-options]
rpm -q 后面跟上[select-options]或[query-options]的子選項
有兩類選項:
注意下面的各個選項都要與“-q”選項結合使用
(1)[select-options]的常用選項:
PACKAGE_NAME:查詢時,直接指明程序包名。這表示查詢指定的程 序包是否已經安裝及其版本。
-a,--all:查詢所有已經安裝過的包,這是就不需要給包了。
(當我們想查詢一個包是否已經安裝,但是我們只記得其中 的幾個字符,那么這個“-a”選項就特別有用,我們就可以 結合“grep”命令來進行查找。)
-f,--file后面跟上一個文件路徑:這表示查詢指定文件是由哪個程序 包生成的。
-g,--group:表示查詢指定的包組中,包含了那些程序包。
-p,--package:表示對未安裝的程序包進行查詢操作,一般查詢什么, 他需要跟 [query-options][select-options]中的選項結合 起來使用。
--whatprovidesCAPABILITY:查詢指定的功能,是由哪個程序包安裝。
--whatrequiresCAPABILITY:查詢指定的功能,被誰所依賴。
(2)[query-options]常用選項:
--changelog:查詢rpm包的changelog;
-l,--list:程序安裝生成的所有文件列表;
-i.info:程序包相關的信息,版本號,大小,所屬的包組,等;
-c, --configfiles:查詢指定的程序包配置文件;
-d, --docfiles:查詢指定的程序包提供的文檔;
--provides:列出指定的程序包提供的所有的CAPABILITY(功能)
-R, --requires:表示查詢指定程序包的依賴關系;
--scripts:查詢指定的程序包自帶的腳本片段;
用法:
-qi PACKAGE, -qf FILE, -qc PACKAGE, -ql PACKAGE, -qd PACKAGE.
-qpi PACKAGE_FILE, -qpl PACAGE_FILE, -qpc PACKAGE_FILE,.......
演示:“--provides”和“whatprovides”選項的用法:
[root@centos7 ~]# rpm -q --provides bash
/bin/bash
/bin/sh
bash = 4.2.46-19.el7
bash(x86-64) = 4.2.46-19.el7
config(bash) = 4.2.46-19.el7
[root@centos7 ~]# rpm -q --whatprovides bash
bash-4.2.46-19.el7.x86_64
[root@centos7 ~]# rpm -q --whatprovides 'config(bash)' //因為括號在shell中有特殊 的意義,所以使用單引號引起來 表示強引用。
bash-4.2.46-19.el7.x86_64
[root@centos7 ~]#
校驗:
格式:
rpm{-V|--verify} [select-options] [verify-options]
執行校驗操作時,他們表現的意義是什么?
--verify test:
S file Size differs //表示文件大小發生改變
M Mode differs (includes permissions and file type) //表示文件權限發生改變
5 digest (formerly MD5 sum) differs //表示MD5碼發生了改變
D Device major/minor number mismatch //表示主次設備號不匹配
L readLink(2) path mismatch
U User ownership differs //表示屬主改了
G Group ownership differs //表示屬組改了
T mTime differs //表示最近的時間戳發生改變
P caPabilities differ //表示開發功能改了。
[root@centos7 ~]# rpm -ivh zsh-5.0.2-14.el7_2.2.x86_64.rpm
警告:zsh-5.0.2-14.el7_2.2.x86_64.rpm: 頭V3 RSA/SHA256Signature, 密鑰 ID f4a80eb5: NOKEY
準備中... ################################# [100%]
正在升級/安裝...
1:zsh-5.0.2-14.el7_2.2 ################################# [100%]
[root@centos7 ~]# rpm -V zsh //校驗時我們用大寫“-V”選項,校驗沒有任何信息輸 出,說明我們這個程序包安裝成功
[root@centos7 ~]#
[root@centos7 ~]# rpm -ql zsh //查看zsh安裝了多少個文件
[root@centos7 ~]# file /usr/share/zsh/5.0.2/functions/zfparams //隨便找一個文件看看是什 么格式
/usr/share/zsh/5.0.2/functions/zfparams: ASCII text
[root@centos7 ~]# vim /usr/share/zsh/5.0.2/functions/zfparams //編輯這個文件,然后在里 面僅僅是加一個#
[root@centos7 ~]# rpm -V zsh //再次進行校驗,發現就報錯了
S.5....T. /usr/share/zsh/5.0.2/functions/zfparams // S.5....T. 這里面的每一個點表示這一個屬性,點表示這個屬性沒有被修改過,如果這個屬性被更改了就表示這個屬性的特性,或者那個字符,S就表示大小的意思,S出現了就表示大小發生變化了,沒出現就表示大小沒有發生變化,比方說我們加了一個字符,就表示大小發生變化了,如果是我們僅僅是改了一個字符呢,就可能是大小沒有改變,但是任何信息改了,那么他的MD5碼就發生改變了,這個5就表示數據指紋信息,
(通過上面的演示例子我們發現,校驗的作用:當我們安裝一個程序包時,我們發現某個文件被修改了,但是我們自己確認,我們從來沒有改過,其實我們到現在為止我們應該知道,在linux中有一個重要的法則,沒有消息就是最好的消息。他沒有告訴我們有任何錯,這表示我們再安裝一些程序是成功了,但如果不是加“-v小寫”出現的信息,我就要看一下,通常必須引起注意,)
包來源合法性驗證和完整性驗證:
來源合法性驗證:
完整性驗證:
獲取并導入信任 的包制作者的秘鑰:
(其實這個公鑰文件我們也可以去目錄“/etc/pki/rpm-gpg”下找,因為這個在我們安裝安裝系統后,會自動將秘鑰復制到這個目錄下,)
對于cenots發行版來講:導入文件:
rpm --import /etc/pki/rpm-gpg/ RPM-GPG-KEY-CentOS-7
驗證:
(1)安裝次組織簽名的程序時,會自動執行驗證:
(2)手動驗證:rpm -K PACKAGE_FILE
所有的數字簽名都是用自己的私鑰去加密自己程序包對應的數字特征碼。
數字簽名可以實現兩個功能:
(1)來源合法性進行驗證
(2)包的完整性進行驗證
我們也發現,單向加密和私鑰加密并不是對文件進行保密。
(我們現在拿到一個程序包,那么怎樣去驗證這個程序包是合法的?
首先這個程序包的制作者首先要信任他,這是第一點,那么這個信任的機構做了程序包以后,要在這個程序包上加蓋自己的印簽,在程序上這就叫數字簽名,)
數字簽名:
(那么數字簽名是怎樣實現的呢?
我們之前講過一個加密方式叫非對稱加密,就是他的秘鑰是成對出現,一個叫公鑰一個叫私鑰,公鑰加密的只能使用與之配對的私鑰解密,反之亦然,那么一個組織或個人在制作一個程序包以后,用自己的私鑰去簽名,放在這個包后面,公鑰就是公開的,所以我們拿著這個公鑰能夠解密出來,就可以說這就是,那我們加密的是什么數據呢?我們不能加密整個文件,這樣人們就看不見這個文件了,這里純粹就是簽名,我們加密的是程序包的校驗碼,什么是校驗碼?校驗碼就是我們先利用單向加密將這個程序包的特征碼算出來,我們知道特征碼是固定的長度,不管我們的包有多大,特征碼都那么長,
所以包的制作者先用單向加密將包的特征碼計算出來,定長輸出,然后再用自己的私鑰去加密這個特征碼,這就叫數字簽名,并把這個特征碼附加在包后面,
那誰能解密?拿到公鑰去解密,所以這里的私鑰不是處于加密目的的,而是驗證目的的,用公鑰加密是做來源身份驗證的,那公鑰解密出來的數據有用嗎?
當然有用,我們可以用同樣的算法去計算這個文件的特征碼,然后跟這個解密出來的特征碼進行比對,一樣就表示包沒有被別人改過。
這里其實我們要明白,當我們只做的程序包,用單向加密算出特征碼后,然后再用我們的私鑰要將這個特征碼進行加密,那么第三者是可以使用我們的公鑰將我們的加密的特征碼進行解密的,第三者可以更改我們的程序包,并且他也可以更改我們的特征碼,但是為什么一般不會改呢,因為一旦改了特征碼,他在加密只能使用他自己的私鑰進行加密,那么我們的客戶用我們的公鑰去解密時,就發現這個包不是我們發的,所以就不使用我們的包了,所以很簡單一般特征碼是不被改變的。)
合法獲得公鑰其實是最重要的一步:
其實這一步很難,世界上沒有萬無一失的安全性,互聯網上其實是通過CA來實現的,CA叫簽證機構,或者叫第三方證書頒發機構,我們現在秩序知道我們需要假設通過一個合法的途徑來拿到公鑰。至于怎樣拿到在后面細講。
完整性驗證:
如果只是對rpm包進行驗證的話,我們只需將rpm包的公鑰導入進去即可,對于光盤上rpm包的公鑰就在光盤上,我們切換到光盤的掛載目錄下,ls命令會看到一個文件“ RPM-GPG-KEY-CentOS-7”
那么只需將這個文件導入rpm 包后,以后在安裝程序包時就不會出現應該說“NOKEY”了
演示操作:
[root@centos7 ~]# rpm -ivh zsh-5.0.2-14.el7_2.2.x86_64.rpm
警告:zsh-5.0.2-14.el7_2.2.x86_64.rpm: 頭V3 RSA/SHA256Signature, 密鑰 ID f4a80eb5: NOKEY
準備中... ################################# [100%]
正在升級/安裝...
1:zsh-5.0.2-14.el7_2.2 #################################[100%]
[root@centos7 ~]# rpm -e zsh
[root@centos7 ~]# rpm --import /media/RPM-GPG-KEY-CentOS-7 //導入用“--import”選項
[root@centos7 ~]# rpm -ivh zsh-5.0.2-14.el7_2.2.x86_64.rpm //再次安裝就不會出現NOKEY
準備中... #################################[100%]
正在升級/安裝...
1:zsh-5.0.2-14.el7_2.2 ################################# [100%]
[root@centos7 ~]#
上面是自動進行校驗操作,下面我們也可以進行手動校驗操作:
[root@centos7 ~]# rpm -K zsh-5.0.2-14.el7_2.2.x86_64.rpm //用選項大寫“-K”
zsh-5.0.2-14.el7_2.2.x86_64.rpm: rsa sha1(md5) pgp md5 確定 //pgp:來源合法性;MD5包 完整性認證之前要將公鑰 導入
[root@centos7 ~]#
數據庫重建:
這個數據庫是不能隨便破壞或者手動進行測試的。
我們知道使用命令“rpm -qa”會顯示我們安裝了那些程序包,或者使用“rpm -ql 程序名”會顯示這個程序安裝時產生的文件,那么我們就想,他是怎樣知道我們的程序安裝了那些文件,這個rpm正是通過本地的記錄的一個數據庫來定義的。
對于rpm這個命令來講他的數據庫就是“/var/lib/rpm”
rpm管理器數據庫路徑:/rpm/lib/rpm
查詢操作:通過此處的數據庫進行。
獲取幫助:
CentOS6:man rpm
CentOS7:man rpmdb
以CentOS7為例:
rpm {--initdb|--rebuilddb} [-v] [--dbpathDIRECTORY] [--root DIRECTORY]
--initdb:初始化數據庫,當前無任何數據庫可初始化創建一個新的;當前 有時不執行任何操作;
--rebuilddb:重新構建,通過讀取當前系統上所有已經安裝的程序包進行重 新創建;
--dbpath DIRECTORY:表示地址創建數據庫的路徑
演示在指定的路徑下創建rpm數據庫
[root@centos7 ~]# mkdir /tmp/rpm
[root@centos7 ~]# rpm --initdb --dbpath=/tmp/rpm
[root@centos7 ~]# ls /tmp/rpm/
Basenames __db.002 Group Obsoletename Requirename Triggername
Conflictname __db.003 Installtid Packages Sha1header
__db.001 Dirnames Name Providename Sigmd5
[root@centos7 ~]#
[root@centos7 ~]# rpm --rebuilddb --dbpath=/tmp/rpm
[root@centos7 ~]# ls /tmp/rpm/ //重建后我們發現__db.002,__db.003,__db.001這些 文件沒有了,其實這些文件是進行事物操作的。
Basenames Group Obsoletename Requirename Triggername
Conflictname Installtid Packages Sha1header
Dirnames Name Providename Sigmd5
[root@centos7 ~]#
博客作業:rpm包管理功能全解;
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。