包管理器
二进制应用程序的组成部分
二进制文件,配置文件,说明文档,库文件
程序包管理器
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.178linux.com/37722
评论列表(1条)
文章对rpm包管理器相关知识总结的很详细,建议字体不要用斜体,这样在网站上看起来特别凌乱的感觉。