如何实现在linux安装,更新程序。
硬件--内核(系统调用接口)--库调用接口(32位,64位)
API:Application Programming Interface
POSIX:可移植系统,源代码级别各系统都是兼容的。
程序的源代码文件--预处理--编译--汇编--链接
静态编译:不依赖外部环境
共享编译:直接调用lib .so 文件
linux支持elf,windows支持exe,因为ABI不同(应用二进制接口)
库级别虚拟化,WINE 可以在linux跑windows程序,CYWIN在windows跑linux程序
应用及开发(java,python,php,perl,rubby)和系统及开发(c,c++)
二进制应用程序的组成部分:
二进制文件,库文件,配置文件,帮助文件
程序包管理器:
debian:deb包,包管理器dpt
rehat:rpm ,redhat package manager
gentoo
archlinux
源代码:name-VERSION.tar.gz
rpm包命名方式(使用源代码制作而成)name-VERSION-ARCH.(指定平台)rpm
常见的arch
x86:i386,i486,i586,i686
x86_64:x86_64,amd64
powerpc:ppc
跟平台无关:noarch
yum rpm包管理器前端安装工具
apt-get :deb包管理器前端工具
zypper:suse上的rpm包前端管理工具
dnf:Fedora22+ rpm包管理器前端管理工具
查看二进制程序所依赖的库文件 ldconfig(/erc/id.so.conf)
ldd /path/to/binary
程序包管理
功能:将编译好的应用程序的各个组成文件打包成一个或几个程序包文件,从而方便快捷的实现程序包的安装,卸载,查询升级和校验等管理操作。
1程序的组成清单(每个包独有)
文件清单
安装或卸载运行的脚本
2数据库(公共)
程序包名称及版本
依赖关系
功能说明
安装生成的个文件的文件路径及校验码信息
管理程序包的方式
使用包管理器工具:rpm
使用前端工具:yum,dnf
rpm
1系统发版的光盘或官方服务器
centos镜像http://mirrors.aliyun.com ,https://mirrors.sohu.com,https://morrors.163.com
项目官方:
第三方组织:Fedora-EPEL
搜索引擎:https://rpmfind.net http://pkgs.org
centos rpm 命令管理程序包
安装,卸载,升级,查询,校验,数据库维护
安装:
rpm {-i|--install} [install-options] PACKAGE_FILE ...
-i 安装install
-h 以#显示程序包管理执行进度,每个#表示是2%进度
-v 显示安装详细信息
[]install -option]
--test 测试安装,单不真实执行,dry run
--nodeps:忽略依赖关系(循环依赖)
--relacepkgs 重新安装
升级:
rpm {-U|--upgrade} [install-options] PACKAGE_FILE ...
rpm {-F|--freshen} [install-options] PACKAGE_FILE ...
upgrade: 安装有旧版程序包,则‘升级’,如果不存在旧版程序包则安装
freeshen:安装有旧版程序包,则升级,如果不存在旧版程序包,则不执行操作
rpm -Uvh package
rpm -Fvh package
注意:1不要对内核做升级操作,linux支持多内核版本并存,因此,对直接安装新版本内核
2如果原程序包的配置文件安装后曾被修改,升级时,新版本的提供的同一个配置文件并不会
直接覆盖老版本的配置文件,而把新版本的文件重命名(.rpmnew)后保留
查询:rpm {-q|--query} [select-options] [query-options]
select-options
-a 所有包
-f 查询指定的文件有哪个包安装生成
-p /path/to/package_file 针对尚未安装的程序包文件做查询
--what'provide 查询指定的文件由哪个包提供
--whatrequire 查询指定的文件被哪个包所依赖
[query-options]
--changelog 查询rpm包的changelog
-c 查询配置文件
-d 查询帮助文档
-i 简要信息
-l 显示安装生成的所有文件
-R 查询指定程序依赖
--provides 列出指定程序包所提供的capability