程序安装之前,来认识下程序的组成部分:
二进制程序
库文件
配置文件
帮助文件(手册、文档)
。。。
二进制程序:/bin,/sbin,/user/bin,/user/sbin,/usr/local/bin,/usr/local/sbin,/opt/bin,/opt/sbin
库文件:/lib,/lib64,/usr/lib,/usr/lib64,/usr/local/lib,/usr/local/lib64,/opt/lib,/opt/lib64
配置文件:/etc/,/etc/DIR,/usr/local/{etc,conf}。。
帮助文件:/usr/share/man,/usr/share/doc,/usr/local/share/man,/usr/local/doc
注:有些特殊的程序会将执行文件放置于libexec目录;
编译之前:源代码
编译之后:
程序包管理器
安装、卸载、升级、查询
实现应用程序打包,有特定格式
对兼容的程序包进行管理
注:制作成的二进制格式程序与平台有相关性,故通常需要制作各种流行平台所兼容的版本
编译:
源代码(文本) --> 预处理 --> 编译 --> 汇编 --> 链接
编译时,根据是否将被调用的库文件直接打包进生成的二进制程序文件,编译方式可分为两类:
动态链接:不将被调用的库文件打包进来,而是运行时去装载它
静态链接:将被调用的库文件打包进来,将来运行时,可自己完全独立运行,而无需外部库文件支持运行
c程序包;
程序包:
appneme-VERSION-RELEASE.ARCH.rpm
源代码:appnema-VERSION.tar.gz,appname-VERSION.tar.gz2,appname-VERSION.tar.xz
包管理器(rpm)格式:
常见的包管理器:
deb:Debian
rpm:Red hat Package Manager,RPM is Package Manager
rpm包命名格式:
VERSION:
RELEASE:包自身的修订号,有时会有适用于os的信息
ARCH:使用的平台
major:主版本号
minor:次版本号
release:发型号
x86:i386,i486,i586,i686
x86_64:amd64,x86_64
powerpc:ppc
noarch:与平台无关
appname-VERSION-RELEASE.ARCH.rpm
分包机制:
核心包,主包:命名与源项目名称一致;
子包(支包):命名为源项目名称后附加支包中的文件提供的功能组成
获取包途径:
来源合法
包的完整性
教室:http://172.16.xx.xx/fedora-epel/6/
光盘挂载
lrwxrwxrwx 1 root root 3 Apr 9 2015 cdrom -> sr0
lrwxrwxrwx 1 root root 3 Apr 9 2015 dvd -> sr0
光盘放入光驱
mkdir /media/cdrom
mount -o ro -t iso9660 /dev/cdrom /media/cdrom
系统的发型光盘镜像或官方站点(或站点镜像服务器)
程序包的官方站点
第三方组织:epel
搜索引擎
建议:安装前验证其合法性
CentOS系统上程序rpm包管理:
安装、升级、卸载、查询、检验
通过rpm命令完成
安装
--relocate
--force
--replacepkgs 相关配置文件就没了=.=!
副作用:能安装成功,未必可以成功运行
由众多目的单一的小程序组成,结果程序包之间存在相关性,甚至有循环依赖
rpm {-i|--install } [install-options]
-h:hash,以#来表示安装进度。100个#表示安装完成
-v,--verbose:显示安装过程中的详细信息
安装时常用的组合:-ivh,-ivvh
--test,测试安装。不执行真正的安装过程,仅报告依赖关系及冲突信息等
程序包之间存在的依赖关系:
忽略依赖关系:--nodeps
覆盖安装:重新安装并覆盖原有文件
强制安装:
重新定位程序包的安装位置
升级:
一定不要对内核进行升级(兼容性)。Linux允许多内核共存,故可直接安装多个不同版本内核
若程序包的配置文件安装后曾被修改,升级时,新版本的配置文件不会覆盖老版本的配置文件,而把新版本的配置文件重命名(加后缀.rpmnew)后保存
-U:升级或安装。没有安装会安装目标程序
rpm {-U|--upgrade} [install-options] PACKAGE_FILE ...
rpm {-F|--freshen} [install-options] PACKAGE_FILE ...
--test
--nodepkgs
--force
--oldpackage:降级
注:
卸载:移除已安装的包
rpm {-e|--erase} [--allmatches] [--nodeps] [--noscripts]
[--notriggers] [--test] PACKAGE_NAME ...
简单用法:rpm -e PACKAGE_NAME
--nodeps:忽略依赖关系
--test:仅做测试卸载:dry-run模式
--allmatches:如果一个程序包同时安装多个版本,则此选项一次全部卸载之
注:
如果程序包的配置文件安装后曾被修改,卸载时,此文件通常不会删除,而是被重命名(加后缀.rpmsave)后保存
查询:
rpm {-q|--query} [select-options] [query-options]
[select-options]:
[query-options]:
rpm -qf /etc/fstab
rpm -qa
rpm -q PACKAGE_NAME
rpm -q --scripts PACKAGE_NAME
rpm -q --requires PACKAGE_NAME
rpm -q --provides PACKAGE_NAME
rpm -q --changelog PACKAGE_NAME
rpm -qd PACKAGE_NAME
rpm -qc PACKAGE_NAME
rpm -ql PACKAGE_NAME
rpm -qi PACKAGE_NAME
查询某包是否已经安装,以及检查安装的所有包,还可以查看特定包的详细信息
rpm -qpi PACKAGE_FILE
查询某包或某些包是否安装:
查询已安装的所有包
查询某文件是由哪个包安装生成:
查询尚未安装的包文件的相关信息;
preinstall:安装过程开始之前执行的脚本
postinstall:安装过程完成后执行的脚本‘
preuninstall:卸载开始之前执行的脚本
postuninstall:下载过程完成之后执行的脚本
脚本有四类:
查询某包的简要说明信息:
查询某包安装后生成的文件列表:
查询某包安装后生成的配置文件:
查询某包安装后生成的帮助文件:
查看某包制作时随版本变化的changelog信息:
查询某包提供的capabilities(包和其他功能):
查询某包所依赖的capabilities:
查询某包安装或卸载时会执行的脚本;
rpm {-V|--verify} [select-options] [verify-options]
常见用法:rpm -V PACKAGE_NAME
S file Size differs
M Mode differs (includes permissions and file type)
5 digest (formerly MD5 sum) differs
D Device major/minor number mismatch
L readLink(2) path mismatch
U User ownership differs
G Group ownership differs
T mTime differs
P caPabilities differ
查询安装之后生成的文件是否发生了改变(被改动)
rpm --import /PATH/TO/RPM-GPG-KEY-GILE
验证:rpm {-K|--checksig} PACKAGE_FILE
--nosignature:不检查来源合法性
--nodigest:不检查完整性
包未被二次修改,完整性校验成功
依赖于:制作者提供的程序特征码
验证方式:安装者用同样的特征码提取算法提取程序包的特征码,并与原作者提供的相比较
由信任的制作者提供
依赖于:制作者的数字签名:签名是作者使用自己的私钥加密程序包的特性码进行的
来源合法
内容合法
验证其光盘中程序包的来源及完整性
rpm {--initdb|--rebuilddb} [-v] [--dbpath DIRECTORY]
--initdb:初始化数据库,即数据库完全不存在时,可新建之
--rebuild:无论当前数据存在与否,都会直接重建此库
本文出自 “运维狗” 博客,请务必保留此出处http://yunweigou.blog.51cto.com/6299641/1632014
原文地址:http://yunweigou.blog.51cto.com/6299641/1632014