包管理器
二進制應用程序的組成部分
二進制文件,配置文件,說明文檔,庫文件
程序包管理器
Debian deb文件 dpkg包管理器
Redhat rpm文件 rpm包管理器
庫文件lib
查看二進制程序以來的庫文件
ldd /path/binary_file
查看本機裝載的庫文件
ldconfig –p 顯示本機已經緩存的所有可用的庫文件名及文件路徑映射關系
配置文件 /etc/ld.so.conf /etc/ld.so.conf.d/*.conf
緩存文件 /etc/ld.so.cache
程序包管理器
將編譯好的應用程序的各組成文件打包成一個程序包文件,從而方便快捷的實現程序包的安裝,卸載,查詢,升級和校驗等管理操作
1.包文件組成
l RPM包內的文件
l RPM的元數據,如名稱,版本,依賴性,描述等
l 安裝或卸載時運行的腳本
2.數據庫(公共)
l 程序包名稱及版本
l 依賴關系
l 功能說明
l 安裝后生成的各文件路徑和校驗碼信息
RPM包管理
rpm {-i|–install} [install-options] package
-v verbose
-vv 更加詳細的信息
-h 顯示程序包執行的進度
[install-options]
n –test 測試安裝,僅僅只是測試,不安轉
n –nodeps 忽略依賴關系
n –replacepkgs | replacefiles
replacepkgs 安裝包,即使包已經安裝也會再次安裝
replacefiles 安裝包,即使包中的一些文件已經被其他包安裝過,也會再次覆蓋安裝
n –nosignature 不檢查來源合法性
n –nodigest 不檢查包完整性
n –noscripts 不執行包中腳本片段
%pre 安裝前腳本 –nopre
%post 安裝后腳本 –nopost
%preun 卸載前腳本 –nopreun
%postun 卸載后腳本 –nopostun
RPM升級
rpm {-U|–upgrade} [install-options] package
rpm {-F | –freshen} [install-options] package
upgrade 安裝有舊版本程序,則”升級”
安裝前不存在舊版本程序,則“安裝”
freshen 安裝有舊版本程序,則”升級”
安裝前不存在舊版本程序,則不執行操作
–oldpackage 降級
–force 強行升降級
RPM包查詢
rpm {-q|–query} [select-options] [query-options]
[select-options]
u -a 所有包
u -f 查看指定文件有哪個程序包生成
u -p rpmfile 針對未安裝的包進行查詢操作
u –whatprovides capability 查詢指定capability由哪個包提供
u –whatrequires capability 查詢指定capability被哪些包依賴
rpm2cpio 包文件| cpio –itv 預覽包內文件
rpm2cpio 包文件| cpio –id 釋放包內文件(當某個程序文件被誤刪,可以使用此命令進行恢復)
[query-options]
l –changelog 查詢rpm包的changelog
l -c 查詢程序的配置文件
l -d 查詢程序的文檔
l -i 查詢information
l -l查看指定程序包生成的所有文件
l –scripts 程序包自帶的腳本片段
l -R 查詢指定程序包所依賴的capability
l –provides 列出指定程序包所提供的capability
RPM包的校驗
rpm {-V|–verity} [select-options] [verity-options]
n S file size differs
n M mode differs
n 5 digest differs
n D device major/minor number mismatch
n L readLink path mismatch
n U user ownership differs
n G group ownership differs
n T mtime differs
n P capability differ
rpm –K|chechsig rpmfile 檢查包的完整性和簽名
rpm –import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
導入的是一個gpg加密的文件,通過檢驗安裝包內的簽名與該文件中的簽名是否一致,來確定來源的合法性
RPM數據庫
/var/lib/rpm
rpm {–initdb|–rebuilddb}
initdb 初始化
如果事先不存在,則新建
否則,不執行草走
Rebuilddb 重建
無論存在還是不存在,都重建數據庫
YUM:yellowdog update modifier
Yum用來解決軟件包之間的依賴關系,可以在多個庫之間定位軟件包
yum repository:yum repo 存儲了眾多的rpm包,以及包的相關的元數據文件(放置在特定目錄repodata下)
yum客戶端配置文件
/etc/yum.conf 為所有的倉庫提供公共配置
/etc/yum.repo.d/*.repo 為倉庫的指向提供配置
YUM-CONFIG-MANAGER
yum-config-manager –disable ”倉庫名“ 禁用倉庫
yum-config-manager –enable ”倉庫名“ 啟用倉庫
顯示倉庫列表
repolist [all|enabled|disable]
顯示程序包
list
安裝程序包
install package1 [package2] […] 最多一次支持5個
reinstall package1 [package2] […] 重新安裝
升級程序包
update [package1] [package2] […]
downgrade package1 [package2] [… ] 降級
檢查可用升級
check-update
卸載程序包
remove | erase package1 [package2] […]
查看程序包信息
Info […]
查看指定的特性(可以是文件)是由哪個程序包提供
provides | whatprovides feature1 [feature2] […]
清楚本地緩存
clean [ package|metadata |expire-cache | rpmdb | plugins | all ]
構建緩存
makecache
搜索 search string1 [string2] […]
查看指定包所依賴的capability
deplist package1 [package2] […]
查看YUM事務歷史
History [info| list|package-list|package-info |summary | addon-info| redo |undo ]
日志
/var/log/yum.log
YUM的命令行選項
–nogpgcheck 禁止進行gpg check
-y 自動回答yes
-q 靜默模式
–disablerepo=repoidglob 臨時禁用此處指定的repo
–enablerepo=repoidglob 臨時啟用此處指定的repo
–noplugins 禁用所有插件
SHELL編程之SELETE
selete循環與菜單:主要用于創建菜單,按數字數序排列的菜單項將顯示在標準錯誤上, 并顯示PS3提示符,等待用戶輸入,用戶輸入菜單列表中的某個數字, 執行相應的命令,用戶輸入被保存在內置變量REPLY中。
函數FUNCTION
Function是由若干個shell命令組成的語句塊,實現代碼的重用和模塊化的編程,它與shell程序形式上是相似的,不同的是它不是一個單獨的進程,必能獨立運行,而是shell一部分
函數與shell區別在于:
shell程序在sehll中運行
shell函數在當前shell中運行
函數定義
函數由兩部分組成:函數名和函數體
1.
function name {
函數體
}
2.
function name () {
函數體
}
3.
name () {
函數體
}
習題
1、1、編寫服務腳本/root/bin/testsrv.sh,完成如下要求
(1) 腳本可接受參數:start, stop, restart, status
(2) 如果參數非此四者之一,提示使用格式后報錯退出
(3) 如是start:則創建/var/lock/subsys/SCRIPT_NAME, 并顯示“啟動成功”
考慮:如果事先已經啟動過一次,該如何處理?
(4) 如是stop:則刪除/var/lock/subsys/SCRIPT_NAME, 并顯示“停止完成”
考慮:如果事先已然停止過了,該如何處理?
(5) 如是restart,則先stop, 再start
考慮:如果本來沒有start,如何處理?
(6) 如是status, 則如果/var/lock/subsys/SCRIPT_NAME文件存在,則顯示“SCRIPT_NAMEis running…”
如果/var/lock/subsys/SCRIPT_NAME文件不存在,則顯示“SCRIPT_NAME is stopped…”
其中:SCRIPT_NAME為當前腳本名
2、編寫腳本/root/bin/copycmd.sh
(1) 提示用戶輸入一個可執行命令名稱;
(2) 獲取此命令所依賴到的所有庫文件列表
(3) 復制命令至某目標目錄(例如/mnt/sysroot)下的對應路徑下;
如:/bin/bash ==> /mnt/sysroot/bin/bash
/usr/bin/passwd==> /mnt/sysroot/usr/bin/passwd
(4) 復制此命令依賴到的所有庫文件至目標目錄下的對應路徑下:
如:/lib64/ld-linux-x86-64.so.2 ==> /mnt/sysroot/lib64/ld-linux-x86-64.so.2
(5)每次復制完成一個命令后,不要退出,而是提示用戶鍵入新的要復制的命令,并重復完成上述功能;直到用戶輸入quit退出
3、漢諾塔(又稱河內塔)問題是源于印度一個古老傳說。大梵天創造世界的時候做了三根金剛石柱子,在一根柱子上從下往上按照大小順序摞著64片黃金圓盤。大梵天命令婆羅門把圓盤從下面開始按大小順序重新擺放在另一根柱子上。并且規定,在小圓盤上不能放大圓盤,在三根柱子之間一次只能移動一個圓盤。
利用函數,實現N片盤的漢諾塔的移動步驟
原創文章,作者:Stupid_L,如若轉載,請注明出處:http://www.www58058.com/37722
文章對rpm包管理器相關知識總結的很詳細,建議字體不要用斜體,這樣在網站上看起來特別凌亂的感覺。