一、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.178linux.com/38808