一、RPM包管理程序
centos系統上使用rpm命令管理程序包:
安裝、卸載、升級、查詢、校驗、數據庫維護
RPM包安裝選項:
–test:測試安裝,但不真正執行安裝
–nodeps:忽略依賴關系
–nosignature:不檢查來源合法性
–nodigest:不檢查包完整性
–noscripts:不執行程序包腳本片斷
%pre:安裝前腳本; –nopre
%post:安裝后腳本;–nopost
%preun:卸載前腳本; –nopreun
%postun:卸載后腳本; –nopostun
RPM包升級選項:
upgrade:安裝有舊版程序包,則"升級"
如果不存在舊版程序包,則"安裝"
freshen:安裝有舊版程序包,則"升級"
如果不存在舊版程序包,則不執行升級操作
–oldpackage:降級
–force:強行升級
RPM包查詢選項:
-q:所有包
-f:查看指定的文件由哪個程序包安裝生成
-p rpmfile:針對尚未安裝的程序包文件做查詢操作
–whatprovides CAPABILITY:查詢指定的CAPABILITY由哪個包所提供
-whatrequires CAPABILITY:查詢指定的CAPABILITY由哪個包所依賴
–changelog:查詢rpm包的changelog
-c:查詢程序的配置文件
-d:查詢程序的文檔
-l:查看指定的程序包安裝后生成的所有文件;
–scripts:程序包自帶的腳本片斷
-R:查詢指定的程序包所依賴的CAPABILITY
–provides:列出指定程序包所提供的CAPABILITY
RPM包的校驗
包來源合法性驗證及完整性驗證:
完整性驗證:SHA256
來源合法性驗證:RSA
公鑰加密:
對稱加密:加密、解密使用同一秘鑰:
非對稱加密:秘鑰是成對的
導入所需要的公鑰:
rpm -K|checksig rpmfile 檢查包的完整性和簽名
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
前言:
rpm的前端程序,用來解決軟件包相關依賴性,可以在多個庫之間定位軟件包,如果直接使用rpm直接安裝程序包也可以,但是需要自己手工解決程序包依賴性的問題,可能程序包的依賴性非常復雜,那么直接使用rpm安莊,就會非常麻煩,而使用YUM安裝就會自動解決依賴性的問題。大大簡化了安裝過程。
YUM客戶端配置文件:
/etc/yum.conf:為所有倉庫提供公共配置
/etc/yum.repos.d/*.repo:為倉庫的指向提供配置
倉庫指向的定義:
[repositoryID] (yum倉庫的ID)
name=some name for this repository (yum倉庫的名稱)
baseurl=url://path/to/repository/ (repodata的位置,一般指向上一級目錄)
enabled={1|0} (1為啟用,0為關閉)
gpgcheck={1|0} (是否檢查gpgkey,1為檢查0為不檢查)
gpgkey=URL (gpgkey的路徑)
YUM命令:
顯示倉庫列表:
yum repolist
顯示程序包:
yum list
安裝程序包:
yum install package
升級程序包
yum update
檢查可用升級
yum check-update
卸載程序包:
yum remove package
查看程序包information
yum info [..]
查看指定的特性是由哪個程序包所提供的
yum provides
清理本地緩存:
yum clean {packages|metadata|expire-cache}
構建緩存:
yum makecache
搜索:search string1
以指定的關鍵字搜索程序包名及summary信息
查看指定包所依賴的capabilities:
deplist package1
查看yum事務歷史:
history{info|list|pakages-list|packages-info}
summary {addon-info|redo|undo}
rollback {new|sync|stats}
示例:
yum history
yum history info 6
yum 的日志存儲位置:/var/log/yum.log
yum的命令行選項:
–nogpgcheck:禁止進行gpg check
-y:自動回答為yes
-q:靜默模式
–disablerepo=repoidglob:臨時禁用此處指定的repo
–enablerepo=repoidglob:臨時啟用此處指定的repo
–noplugins:禁用所有插件
yum的repo配置文件中可用的變量:
$releasever:當前OS的發行版的主版本號
$arch:平臺,i386,i486,i586,x86-64等
$basearch:基礎平臺;i386
$YUMO-$YUM9:自定義變量
示例:
http://server/centos/$releasever/$basearch/
創建yum倉庫:
createrepo [options]
作業:
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退出
答案:
一、編寫testsrv.sh
1 #!/bin/bash
2
3 #author:李瑞
4 #modified:
5 #version:1.0
6 #description:
7 #=======================================================
8 start () {
9 local b=/var/lock/subsys/SCRIPT_NAME
10
11 if [ -f $b ];then
12 echo "service is running"
13 else
14 touch /var/lock/subsys/SCRIPT_NAME
15 [ $? -eq 0 ]&&echo "start service successed"||echo "start service falied"
16 fi
17 }
18
19 stop () {
20 local b=/var/lock/subsys/SCRIPT_NAME
21 if [ -f $b ];then
22 rm -fr $b
23 [ $? -eq 0 ]&&echo "stop service successed"||echo "stop service falied"
24 else
25 echo "service has stopped"
26 fi
27 }
28
29 restart () {
30 stop &>/dev/null
31 echo "service has stopped"
32 start &>/dev/null
33 echo "service has restart"
34 }
35
36 status() {
37 local b=/var/lock/subsys/SCRIPT_NAME
38 if [ -f $b ];then
39 echo "SCRIPT_NAME is running…"
40 else
41 echo "SCRIPT_NAME is stopped.."
42 fi
43 }
44
45 read -p "請輸入(start|stop|restart|status):" num
46 case $num in
47 start)
48 start
49 ;;
50 stop)
51 stop
52 ;;
53 restart)
54 restart
55 ;;
56 status)
57 status
58 ;;
59 esac
二、編寫copycmd.sh
1 #########################################################################
2 # File Name: copycmd.sh
3 # Description:
4 # Author: 李瑞
5 # Version 1.0.0:
6 # Created_Time: 2016-08-20 12:26:03
7 # Last modified: 2016-08-20 12:26:1471667163
8 #########################################################################
9 #!/bin/bash
10
11 jiben (){
12 local b=`which $1`
13 local c=`ldd $b|grep -Eo "/[[:alnum:]]+/[^ ]+"`
14 cp $b /mnt/sysroot/bin/
15 cp $c /mnt/sysroot/bin/
16 echo "已將$1和對應的庫文件復制到/mnt/sysroot目錄下"
17 echo "請再次輸入一個命令"
18 }
19
20 kuozhan () {
21 local b=`which $1`
22 local c=`ldd $b|grep -Eo "/[[:alnum:]]+/[^ ]+"`
23 cp $b /mnt/sysroot/usr/bin
24 cp $c /mnt/sysroot/usr/bin/
25 echo "已將$1命令和對應的庫文件復制到/mnt/sysroot/usr目錄下"
26 echo "請再次輸入一個命令"
27 }
28
29 while true
30 do
31
32 read -p "請輸入一個命令" cmd
33
34 [ -z "$cmd" ]&&echo "請至少輸入一個參數"&&continue
35
36 type $cmd &>/dev/null
37 if [ $? -eq 0 ];then
38 ldd `which $cmd`
39
40 b=`which $cmd | sed -r 's@/[^/]+$@@'`
41 case $b in
42 /bin)
43 jiben $cmd
44 ;;
45 /usr/bin)
46 kuozhan $cmd
47 ;;
48 *)
49 echo "error comand dir"
50 esac
51 else
52 [ $cmd == quit ]&&echo "程序正在退出"&&break
53 fi
54 done
原創文章,作者:因為有你,如若轉載,請注明出處:http://www.www58058.com/38808