rpm命令的使用
什么是RPM?
rpm:RPM Package Manager (原Redhat Package Manager) Linux 軟件包管理工具
特定的程序由應用程序組成;
GPL:源碼
glibs:標準的C庫
常見Linux發行版的軟件包管理器:
Debian:.deb dpkg
RadHat: .rpm(perl編寫),rpm(RadHat Package Manager)
rpm:RPM is Package Manager
SUSE : rpm
軟件運行環境
API:Application Programming Interface 意味開發庫兼容,因此,源代碼可跨平臺
遵循POSIX規范:Portable Openratin System 可跨平臺調用
程序的過程:預編譯、編譯、匯編、鏈接
編譯:源代碼翻譯成cpu指令集的過程
靜態鏈接:將庫包含在程序中
動態鏈接:so(shared object)(相當于windows系統的.dll文件)
庫為函數,function
庫:可執行程序,本身不能作為程序執行入口,但可以被調用是編譯好的二進制格式
ABI:Application Binary Interface 編譯后的程序可以跨平臺
注意:1.os平臺:編譯好的應用程序必須為特定平臺所支持的版本(linux和windows平臺不兼容)
2.硬件平臺:應用程序為特定的cpu所支持
包的組成部分
二進制程序:/bin,/sbin /usr/sbin,/usr/local.bin,/usr/local/sbin
自身庫文件:/lib /lib64 /usr/lib /usr/lib64 /usr/local/lib /usr/local/lib64
開發時調用API,運行時調用ABI
通過調整 /etc/ld.so.conf /etc/ld.so.conf.d/*.conf
配置文件: /etc,無須額外配置
幫助文件: man文件,info文件,README,INSTALL,ChangeLog
man COMMAND
到某路徑下查找與命令名同名的通常以。gz結尾的壓縮文件的名字
/usr/share/man
包命名格式:
源代碼:
name-VERSION.tar.gz|bz2|xz
VERSION:major.minor.release
rpm包命名方式:
name-VERSION-release.arch.rpm
例如:bash-4.2.46-19.el7.x86_64.rpm
VERSION: major.minor.release
release:release.OS,通常包含rpm的只做發行號,還包含使用的OS
例如:el6:redhat enterprise linux6
常見的arch:
x86: i386, i486, i586, i686
x86_64: x64, x86_64, amd64
ppc:powerpc
noarch:跟平臺無關
包分類:
Application-VERSION-ARCH.rpm: 主包
Application-devel-VERSION-ARCH.rpm 開發子包
Application-utils-VERSION-ARHC.rpm 其它子包
Application-libs-VERSION-ARHC.rpm 其它子包
軟件包之間可能存在依賴關系,甚至循環依賴
解決依賴包管理工具:
yum:rpm包管理器的前端工具
apt-get:deb包管理器前端工具
zypper: suse上的rpm前端管理工具
dnf: Fedora 18+ rpm包管理器前端管理工具
庫文件
查看二進制程序所依賴的庫文件:
ldd [options] 二進制文件
ldd /PATH/TO/BINARY_FILE
管理及查看本機裝載的庫文件:
ldconfig
/sbin/ldconfig -p: 顯示本機已經緩存的所有可用庫文件名及文件路徑映射關系
配置文件:/etc/ld.so.conf, /etc/ld.so.conf.d/*.conf
緩存文件:/etc/ld.so.cache
包管理器
程序包管理器:
功能:將編譯好的應用程序的各組成文件打包一個或幾個程序包文件,從而方便快捷地實現程序包的安裝、卸載、查詢、升級和校驗等管理操作
1、包文件組成(每個包獨有)
RPM包內的文件清單
RPM的元數據,如名稱,版本,依賴關系,功能性描述等
安裝或卸載時運行的腳本
2、數據庫(公共)
程序包名稱及版本
依賴關系
功能說明
包安裝后生成的各文件路徑及校驗碼信息
程序包的來源
管理程序包的方式:
使用包管理器:rpm
使用前端工具:yum, dnf(這個可能是未來版本)
獲取程序包的途徑:
(1) 系統發版的光盤或官方的服務器;
CentOS鏡像:
https://www.centos.org/download/
http://mirrors.aliyun.com
http://mirrors.sohu.com
http://mirrors.163.com
(2) 項目官方站點
(3) 第三方組織:
EPEL:Extra Packages for Enterprise Linux
(4) 自己制作
注意:檢查其合法性:來源合法性,程序包的完整性
rpm包管理
CentOS系統上使用rpm命令管理程序包基本功能:
安裝、卸載、升級、查詢、校驗、數據庫維護
安裝:
rpm {-i|–install} [install-options] PACKAGE_FILE…
-i –install:安裝
-v:顯示安裝信息
-vv:二級詳細
-vvv:三級詳細
-h:hash 以#的個數顯示安裝進度,一個#表示2%的進度
安裝選項[install-options]
–test: 測試安裝,但不真正執行安裝;dry run模式
–nodeps:忽略依賴關系
–replacepkgs| replacefiles 重新安裝
原來的配置文件不會被覆蓋,新安裝的配置文件將會重命名為以.rpmnew為后綴的文件
–nosignature: 不檢查來源合法性
–nodigest:不檢查包完整性
–noscipts:不執行程序包腳本片斷
%pre: 安裝前腳本;–nopre
%post: 安裝后腳本;–nopost
%preun: 卸載前腳本;–nopreun
%postun: 卸載后腳本;–nopostun
示例:rpm -ivh PACKAGE_FILE …
升級:
rpm {-U|–upgrade} [install-options] PACKAGE_FILE…
rpm {-F|–freshen} [install-options] PACKAGE_FILE…
upgrade:安裝有舊版程序包,則“升級”
如果不存在舊版程序包,則“安裝”
freshen:安裝有舊版程序包,則“升級”
如果不存在舊版程序包,則不執行升級操作
–oldpackage:降級
–force: 強行升級
例如:rpm -Uvh PACKAGE_FILE …
例如:rpm -Fvh PACKAGE_FILE …
升級注意項
(1) 不要對內核做升級操作;Linux支持多內核版本并存,因此,對直接安裝新版本內核
(2) 如果原程序包的配置文件安裝后曾被修改,升級時,新版本的提供的同一個配置文件并不會直接覆蓋老版本的配置文件,而把新版本的文件重命名(FILENAME.rpmnew)后保留
示例:用centos6.8的內核升級到centos7.2的內核,但是失敗了,原因是沒有安裝相關的依賴文件
如果一定要升級,就需要安裝相關依賴的文件
添加 –nodeps忽略依賴包的選項強行升級測試
升級完內核以后,發現內核掛了,請小伙伴謹慎操作
查詢:
rpm {-q|–query} [select-options] [query-options]
[select-options]
-q: 查詢某單個包是否安裝
-qa: 查詢所有已安裝的包
-qf: 查看指定的文件由哪個程序包安裝生成
-p:查詢尚未安裝的rpm包文件的相關信息
-qpl rpm_file:針對尚未安裝的程序包文件做查詢操作;
–whatprovides CAPABILITY:查詢指定的CAPABILITY由哪個包所提供
–whatrequires CAPABILITY:查詢指定的CAPABILITY被哪個包所依賴
rpm2cpio 包文件|cpio–itv :預覽包內文件
rpm2cpio 包文件|cpio–id “*.conf” :釋放包內文件
查詢選項(配合-q)[query-options]
-qc: 查詢安裝后生成的配置文件
-qd: 查詢包安裝后生成的幫助文檔
-qi: 查詢包的描述信息
-qR: 查詢指定的程序包所依賴的CAPABILITY;
–provides: 列出指定程序包所提供的CAPABILITY;
–changelog:查詢rpm包的changelog
-q –scripts:查詢包相關的腳本
preinstall 安裝前腳本
postinstall 安裝后腳本
preuninstall 卸載前腳本
postuninstall 卸載后腳本
卸載:
rpm {-e|–erase} [–allmatches] [–nodeps] [–noscripts] [–notriggers] [–test] PACKAGE_NAME …
例如:rpm -e package_name
如果卸載被其他程序所依賴的包
1、把依賴者一同卸載
2、忽略依賴關系:–nodeps
3、不在卸載
校驗:檢查包安裝后生成的文件是否被修改過
rpm {-V|–verify} [select-options] [verify-options]
S 大小 file Size differs
M 頭文件 Mode differs (includes permissions and file type)
5 MD5 digest (formerly MD5 sum) differs
D 設備錯誤 Device major/minor number mismatch
L 鏈接 readLink(2) path mismatch
U 屬主 User ownership differs
G 主組改變 Group ownership differs
T 修改時間 mTimediffers
P 能力改變 capabilities differ
包來源合法性驗正及完整性驗正:
包完整性:通過單向加密機制(MD5|sha1)
來源合法性:通過公鑰加密機制(RSA)
公鑰加密:
對稱加密:加密、解密使用同一密鑰;
非對稱加密:密鑰是成對兒的
public key: 公鑰,公開所有人
secret key: 私鑰, 不能公開
導入所需要公鑰:
rpm -K|checksig rpmfile 檢查包的完整性和簽名
–nosigeature:不檢查來源合法性
–nodigest:不檢查包完整性
rpm –import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 導入以后再做驗證
CentOS 7發行版光盤提供:RPM-GPG-KEY-CentOS-7
rpm -qa gpg-pubkey*
示例:導入公鑰以后,查詢包的時候,我們會發現沒有提示信息了,這是因為默認沒有校驗包的公鑰,所以系統會對所有的包對提示報錯的信息
rpm數據庫
數據庫重建:
/var/lib/rpm
rpm {–initdb|–rebuilddb}
initdb: 初始化
如果事先不存在數據庫,則新建之,否則,不執行任何操作
rebuilddb:重建
無論當前存在與否,直接重新創建數據庫
yum命令的使用
CentOS前端工具: yum, dnf
yum: YellowdogUpdate Modifier,rpm的前端程序,用來解決軟件包相關依賴性,可以在多個庫之間定位軟件包,up2date的替代工具
yum repository: yum repo,存儲了眾多rpm包,以及包的相關的元數據文件(放置于特定目錄repodata下)
文件服務器:通過yum所支持的文件共享機制將各rpm包通過文件服務共享
ftp ftp://server/path/to/repo
http http://server/path/to/repo
nfs nfs://servr/nfs_path
file file:///path/to/path
yum客戶端作用
1.配置文件:指定各可用的yum倉庫;
2.緩存元數據:yum會到各可用yum倉庫獲取元數據,并緩存至本地
3.分析元數據:根據具體的操作請求完成元數據分析,可能包括依賴關系、文件列表等信息
4.執行具體操作
yum客戶端配置文件:
要使用yum管理應用程序,首先得配置其可用的yum倉庫,保存在配置文件中
/etc/yum.conf:為所有倉庫提供公共配置
/etc/yum.repos.d/*.repo:為倉庫的指向提供配置
配置文件格式:由兩段組成。類似window的ini配置文件
[main]:主配置段
[repo]:倉庫配置段
倉庫指向的定義:
[repositoryID] 倉庫ID
name=Some name for this repository 倉庫名
baseurl=url://path/to/repository/ 倉庫的訪問路徑
enabled={1|0} 1,表示啟用,0表示不啟用
gpgcheck={1|0} 1,校驗gpg,0表示不驗證
gpgkey=URL 公鑰地址(可以是本地,也可以是服務器端路徑)
enablegroups={1|0}
failovermethod={roundrobin|priority} 默認為:roundrobin,意為隨機挑選;
cost= 定義此倉庫開銷,默認為1000
yum-config-manager 命令
–add-repo= URL 添加倉庫
–disable “倉庫名” 禁用倉庫
–enable “倉庫名” 啟用倉庫
示例:創建一個倉庫
yum命令的用法:
yum [options] [command] [package …]
顯示倉庫列表:
repolist[all|enabled|disabled]
顯示程序包:
list
# yum list [all | glob_exp1] [glob_exp2] […]
# yum list {available|installed|updates} [glob_exp1] […]
示例yum list 支持通配符。由于里面的安裝包太多。所以這里用通配符只看部分
安裝程序包:
install package1 [package2] […]
reinstall package1 [package2] […] (重新安裝)
升級程序包:
update [package1] [package2] […]
downgrade package1 [package2] […] (降級)
檢查可用升級:
check-update
卸載程序包:
remove | erase package1 [package2] […]
查看程序包information:
info […]
查看指定的特性(可以是某文件)是由哪個程序包所提供:
provides | whatprovidesfeature1 [feature2] […]
清理本地緩存:一般來說,除非倉庫出了問題或者使用新的倉庫,否則一般情況下面不需要清理緩存
clean [ packages | metadata | expire-cache | rpmdb| plugins | all ]
構建緩存:
makecache
搜索:search string1 [string2] […]
以指定的關鍵字搜索程序包名及summary信息
查看指定包所依賴的capabilities:
deplist package1 [package2] […]
查看yum事務歷史:
history [info|list|packages-list|packages-info|
summary|addon-info|redo|undo|
rollback|new|sync|stats]
yum history
yum history info 6
yum history undo 6
查看指定yum歷史的操作
撤銷指定歷史操作
日志存放位置:
/var/log/yum.log
安裝及升級本地程序包:
localinstallrpmfile1 [rpmfile2] […]
(用install替代)
localupdaterpmfile1 [rpmfile2] […]
(用update替代)
包組管理的相關命令:
group install group1 [group2] […]
group update group1 [group2] […]
group list[hidden] [groupwildcard] […] 加hidden可以顯示隱藏文件
group remove group1 [group2] […]
group info group1 […]
注意:包組需要用group install安裝
如何使用光盤當作本地yum倉庫:
(1) 掛載光盤至某目錄,例如/media/cdrom
# mount /dev/cdrom/media/cdrom
(2) 創建配置文件
[CentOS7]
name=
baseurl=
gpgcheck=
enabled=
示例:centos7的cdrom當作倉庫配置,注意的是,得先手動配置掛載光盤到該目錄,由于centos7不支持自動掛載,可以把掛載的命令寫入到/etc/profile.d里面以實現開機自動掛載cdrom
示例:centos6建立yum的光盤倉庫
yum的命令行選項:
–nogpgcheck:禁止進行gpgcheck
-y: 自動回答為“yes”
-q:靜默模式
–disablerepo=repoidglob:臨時禁用此處指定的repo
–enablerepo=repoidglob:臨時啟用此處指定的repo
–noplugins:禁用所有插件
yum倉庫
yum的repo配置文件中可用的變量:
$releasever: 當前OS的發行版的主版本號
$arch: 平臺,i386,i486,i586,x86_64等
$basearch:基礎平臺;i386
$YUM0-$YUM9:自定義變量
示例:
http://server/centos/$releasever/$basearch/
http://server/centos/7/x86_64
http://server/centos/6/i384
示例:系統自帶的倉庫里面的url的鏈接均是變量,這樣的話,在生產環境中,如果是有大量的服務器,因為服務器的系統版本很可能不一樣,這樣配置的話,系統可以自動識別版本號,以免安裝錯了其他系統發行版的包導致出其他問題。
自己創建yum倉庫:
createrepo[options] <directory>
示例:在/root/treedir下面創建一個倉庫,并且把一個tree的安裝包放在里面
可以跟cd里面的repodata目錄對比一下基本是一樣的
編輯/etc/yum.repos.d/base.repo文件,啟動treedir的倉庫,并且關閉其他倉庫
安裝tree命令,并且成功,可以查看到tree命令是在tree的倉庫里面安裝的。
思考問題
刪除kernel包后,系統無法啟動,怎么恢復?
一言不合就把內核干掉了O.O
重啟以后發現內核真的掛了,怎么辦怎么辦?T_T
此時我們可以把安裝光盤放進去服務器,然后選擇cd-rom啟動
點擊進去Rescue installed system救援模式
選擇系統語言
選擇默認鍵盤格局。在天朝都是us的
是否啟用網絡,這一個可以選擇no,因為我們是用光盤的,無需聯網
問你是否繼續,選擇Continue
這里提示如果你需要用root環境的權限可以輸入chroot /mnt/sysimage
這里會提示你的系統已經掛載到/mnt/sysimage這個目錄下面
此時選擇Start shell,然后救援模式就開始了..
因為是內核不小心卸載掉了(實際上是故意的),所以我們只需要從光盤里面安裝一個內核即可,我們把光盤掛載到一個空的文件夾里面。
注意,千萬不要直接掛載/dev/sr0到/mnt下面,不然會出錯的,出錯以后只能重啟又重復這個操作。
掛載完光盤以后,輸入rpm -ivh kernel-2.6.32-642.el6.noarch.rpm –root=/mnt/sysimage
等待安裝完畢以后,重啟電腦
重啟電腦可能會看見這樣的提示,意味著你要等一個很長的時間才能進入系統,這個就慢慢等一下吧
漫長的等待,看見可以正常進入系統了,并且登陸正常,ok,內核已經修復完
原創文章,作者:~微風~,如若轉載,請注明出處:http://www.www58058.com/38918