rpm包及yum
包查詢
rpm -q –query 搭配別的選項可用來包查詢
-a
-f
-p rpmfile:針對尚未安裝的程序包文件做查詢操作
-p 選項參數為文件名(一定要指定路徑)
例子:
rpm -qpl /media/Packages/zsh-4.3.11-4.el6.centos.2.x86_64.rpm
可用來模擬安裝, 模擬安裝成功后查看在系統中產生的文件
–whatprovides CAPABILITY : 可用來查看某種功能是由哪個包提供
rpm -q –whatrequires CAPABILITY 查詢指定的CAPABILITY被哪個包所依賴
解壓rpm包:
rpm2cpio 包文件 | cpio -itv 預覽包內文件
rpm2cpio 包文件 | cpio -id "*.conf" 釋放包內文件
包查詢
–changelog 查詢rpm包的changelog
-c 查看程序的配置文件
-d 查看程序的文檔
-i inforation
-l 所有的系統文件
–scripts : 程序包自帶的腳本片段
-R : 查看指定的程序包所依賴的CAPABILITY
–provides 列出指定程序包所提供的CAPABILITY
卸載包:
rpm -e 包名
rpm -e 是不可以直接xxx, xxx是沒有.rpm后綴的。
包校驗:
rpm -V 包名
用來校驗包只安裝后, 系統中的文件的變化。
包來源合法性驗證及完整性驗證:
完整性驗證: 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包是否導入公鑰
rpm數據庫
/var/lib/rpm
rpm –initdb | –rebuilddb
initdb: 初始化 有許多文件
如果事先不存在數據庫, 則新建之
否則, 不執行任何操作
–rebuilddb:重建 只有Packages文件夾
無論當前存在與否, 直接重新創建數據庫。
yum dnf
yum的工作的方式是C/S模式。 yum的服務端其實是文件服務器。
yum只支持三種文件服務器
yum客戶端的配置文件:
/etc/yum.conf
/etc/yum.repos.d/*.repo
[repositoryID] 唯一性
name=xxxxxxxxxxxx
baseurl=xxxxxxxxx
enabled=
gpgcheck=
gpgkey=
enablegroups
failovermethod={roundrobin|priority}
默認: roundrobin 意外隨記挑選;
cost= 默認為1000 開銷
while 循環的特殊用法(遍歷文件的每一行):
Shell編程模塊
while read line;do
循環體
done < /PATH/FROM/SOMEFILE
for(()) 適合于數字循環
select 循環與菜單(使用與交互式的建立)
select variable in list
do
循環體指令
done
加入list為{a,b,c}
這會產生一個的界面
1>a
2>b
3>c
用戶可以使用1 2 3 進入相應的模塊功能, 而不是a b c
select 循環主要用于創建菜單,按數字順序排列的
菜單項將顯示在標準錯誤上,并顯示 PS3 提示符,
等待用戶輸入
用戶輸入菜單列表中的某個數字,執行相應的命令
量 用戶輸入被保存在內置變量 REPLY 中。
for 與 select 后面都可以沒有循環列表, 而可以使用位置變量。
函數是不能單獨使用, 而應該被調用使用。 被調用的函數與依附的shell程序是一個整體, 沒有父子進程之說。
定義函數的三種方式:
1>. function myfun1 {}
2>. myfun2() {}
3>. function myfun3() {}
{ 必須和函數名隔開或則是直接從下一行開始。
和C、java都非常相似, 函數的退出狀態碼:
(1). 取決于函數中執行的最后一條命令的退出狀態碼
(2). 自定義退出狀態碼, 其格式為:
return 從函數中退出, 由最后命令的狀態決定返回值
return 0 無錯誤返回
return 1-255 有錯誤返回
return是用于函數中的, 而不是不用于自己編寫的腳本程序中, 用來返回返回以值并且終止函數。
如果在自己寫的腳本中想要終止的話, 使用exit退出當前shell就ok了。
set 查看變量和函數
unset 取消變量和函數
函數可以接受參數:
傳遞參數給函數:調用參數時,在函數名后面以空白分隔給定參數列表即可;例如"testfunc arg1 arg2 …"
函數體內部的參數, 是函數本身的參數, 而函數為參數則是整個shell腳本的參數。
add(){
((sum=$1+$2)) 函數內部的參數
echo "sum=$sum"
}
add $1 $2 而這兩個參數則是函數外部的參數
函數變量:
壞境變量: 當前shell和子shell有效
export a=1
echo $a
aa(){
a=2
}
aa
echo $a
本地變量: 只在當前shell進程有效,為執行腳本會啟動
專用子shell進程;因此,本地變量的作用范圍是當前shell腳本
程序文件,包括腳本中的函數。
局部變量:函數的生命周期;函數結束時變量被自動銷毀
注意:如果 函數中有局部變量,如果其名稱同本地變量, 使用局部變量。
局部變量只能作用于函數中, 這樣僅僅自己使用, 不影響函數外部的與其同名的名字
a=1
echo $a
aa(){
local a=2
}
aa
echo $
執行結果:
[root@centos7 0819]# bash export.sh
1
1
遞歸:
1>. 自己調用自己
2>. 告訴自己什么時候就停下來不調用了
3>. 遞歸是由層數限制的。
#!/bin/bash
#
fact(){
if [ $1 -eq 0 -o $1 -eq 1 ];then
echo 1
else
sum=$[$1*$(fact $[$1-1])]
echo $sum
fi
}
fact 5
如何判斷輸入的參數為
expr xxx + 0 只有整數才能參加運算, 通過命令的返回結果來判斷xxx是否為整數。
作業: 斐波拉契數列遞歸
feibolaqi.main
feibo() {
if [ $1 -eq 0 ];then
echo "0"
elif [ $1 -eq 1 ];then
echo "1"
else
echo "$[$(feibo $[$1-1])+$(feibo $[$1-2])]"
fi
}
feibolaqi.sh
while true;
do
read -p "please input one zheng interger:" int
if ! expr $int + 0 >> /dev/null;then
echo "please input one integer!!!"
elif [ $int -lt 0 ];then
echo "please input one zheng integer!!!"
else
. ./feibolaqi.main
feibo $int
exit
fi
done
原創文章,作者:458813466,如若轉載,請注明出處:http://www.www58058.com/38770