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.178linux.com/38770