应用程序:程序=数据+指令 应用程序运行时称为进程,运行过程申请CPU和内存资源
源代码--编译--链接--运行
编译:生成二进制文件(可执行文件),匹配底层架构
链接:
库:静态库和动态库 .so(shared object)
静态链接过程:把库文件集成到应用程序中,把程序要使用的模块链接到程序
动态链接过程:库文件和应用程序分开的,做链接
程序装入内存时内存地址空间分布:
text:存放指令
data+BSS : data存放数据, BSS(block system of symbol)存放初始化为0的变量
栈:stack存放应用程序的变量和函数等
堆:heap存放运行中临时文件
应用程序中包含的文件:
二进制文件(可执行程序):通常在/bin /sbin /usr/bin /usr/sbin目录下存放
库:modules .so文件
配置文件:.conf文件
帮助文件:一般放在/usr/share中
注:由于应用程序中的二进制文件、库存放在/bin /sbin /etc这些目录下,因此这几个目录不能单独分区 ;而/usr/bin /usr/sbin存放的是第三方的应用程序文件;而/ust/local 这个目录又是独立的
软件包管理器的核心功能:
1、制作软件包;
2、安装、卸载、升级、查询、校验;
RPM功能:安装、查询、卸载、升级、校验、数据库的重建、验正数据包等工作;
软件包中存在依赖关系:
A--->B--->C:安装软件先安装被依赖软件包,卸载软件包时,先卸载依赖的软件
解决依赖关系:
前端工具:yum, apt-get,自行解决依赖关系
后端工具:RPM, DPT
RPM包:经过源代码编译后的软件包
.tar.gz:源码包,没有经过编译
RPM与DPT:
Redhat、SUSE使用 RPM
Redhat Package Manager
PRM is Package Manager
Debian使用 DPT
RPM: RPM是以一种数据库记录的方式将所需要的软件安装到Linux主机的一套管理程序,最大的特点是将要安装的软件先编译并打包,通过包装好的软件中默认的数据库记录,记录这个软件在安装的时候需要的依赖属性模块,在用户的Linux主机安装时,RPM会先根据软件里的记录数据,查询Linux主机的依赖属性软件是否满足,若满足则予以安装,不满足则不安装。安装的时候将该软件的信息全部写入RPM的数据库中以便将来的查询、验证与卸载。
RPM包命名格式:
name-version-arch.rpm
name-version-arch.src.rpm
说明
- name:软件包名称。
- version:带有主、次和修订的软件包版本。
- arch:硬件平台。硬件平台包括了:i386、i486、i586、i686、x86_64、ppc、sparc、alpha
- src.rpm:源代码包。
主版本号:功能重大改进修改主版本号
次版本号:某个子功能发生重大变化
发行号:修正了部分bug,调整了一点功能
RPM优点:
1:RPM软件包中包含了编译过的程序与配置文件,用户不用重新编译
2:RPM在安装之前,首先会检查硬盘容量,操作系统版本等,避免错误安装
3:RPM使用RPM数据库管理,数据中记录应用程序的参数,便于升级,卸载,查询等,RPM数据库(/var/lib/rpm)
4:RPM本身会提供应用程序版本信息,相关属性,软件名称,用途等,便于用户了解软件
RPM工具的使用:
1:安装:rpm [options] name.rpm
-i:安装软件包
-h:以#显示进度;每个#表示2%;
-v:显示详细过程
-vv:更详细的信息
--nodeps:忽略依赖关系,可能导致软件包安装不完整
--replacepkgs:重新安装,替换原有安装;
--force:强行安装,可以实现重装或降级;
2、查询
rpm [options] [PACKAGE_NAME]
-q:查询指定的包是否已经安装
-qa:查询已经安装的所有包
-qi:查询指定包的说明信息;
-ql:查询指定包安装后生成的文件列表;
-qc:查询指定包安装的配置文件;
-qd:查询指定包安装的帮助文件;
-qf file_path:查询指定的文件是由哪个rpm包安装生成的;
-q --scripts:查询指定包中包含的脚本
脚本:包含软件包安装前(preinstall)、安装后(postinstall)、卸载前(preuninstall)、卸载后(postuninstall)执行的脚本
如果某rpm包尚未安装,我们需查询其说明信息、安装以后会生成的文件;
rpm -qpi /PATH/TO/PACKAGE_FILE:查看未安装软件包信息
rpm -qpl :查看未安装软件包列表
3、升级
rpm -Uvh RPM_path : 如果装有老版本的,则升级;否则,则安装;
rpm -Fvh 用于更新或降级的包:如果装有老版本的,则升级;否则,退出;
--oldpackage: 降级
4、卸载(erase)
rpm -e Programe_name(如:httpd、vsftpd)
--nodeps:卸载时忽略依赖关系
5、校验软件的完整性
rpm -V Programe_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
6、重建数据库
rpm
--rebuilddb: 重建数据库,一定会重新建立;
--initdb:初始化数据库,没有才建立,有就不用建立;
7、检验来源合法性,及软件包完整性;
# ls /etc/pki/rpm-gpg/
RPM-GPG-KEY-redhat-release
rpm -K rpm_path
rsa, gpg: 验正来源合法性,也即验正签名;可以使用--nosignature,略过此项
sha1, md5: 验正软件包完整性;可以使用--nodigest,略过此项
不合法解决办法:
rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release: 导入密钥文件