软件包管理, 要做到如何管理软件 ,包括安装 ,卸载, 基本的功能查询,搜索等 重点如何使用rpm包 yum管理 如何编译安装 **软件 运行和编译 ** ABI:Application Binary Interface 操作系统接口标准,调用2进制程序的接口 Windows 与Linux不兼容 ELF(Executable and Linkable Format) PE (Portable Executable) 库级别的虚拟化 Linux:WINE Windows:Cygwin API:Application Programming Interface 库调用,调用库的接口标准 POSIX:Portable OS c语言编程 程序源代码 ---> 预处理 ----> 编译 ---> 汇编 ---> 链接

**预处理**:把其他包含部分读进来,把注释去掉添加行号等,比如在编译过程中出现语法错误会报行号,但是预处理之后的还是文本文件。
**编译**:把处理完的文件编译成汇编文件,进行语义分析,语法分析,生成汇编格式的文本,汇编更接近机器语言
**汇编**:经过汇编生成二进制文件

编译过程有两种 静态编译:.a 把库打包到一起 动态编译:.so 运行时才临时调用库 Java程序运行 编译两次 开始编译一次 在操作系统之前再编译一次(解释器),在各种操作系统上都有相应的解释器,所以能跨平台, 但是语言稳定 ,效率慢 开发语言 系统开发 C C++ 应用级开发 Java Delphi Python 中小公司 go 谷歌开发的 大公司 php perl ruby 包管理器

二进制应用程序的组成部分 二进制文件,库文件,配置文件,帮助文件, 程序包管理器 debian : deb文件, dpkg包管理器 redhat : rpm文件 ,rpm包管理器 rpm: Redhat Package Manager RPM Package Manager

二进制程序依赖系统 ,不同平台开发的不同, 所以网上的包一般是源码文件 二进制文件要安装的编译啊,汇编啊, 等等好麻烦 所以红帽为了广大群众好安装 ,就把复杂的一大堆打包了 我们只要rpm就行 包命名 源代码: name -VERSION.tar.gz|bz2|xz 软件名-版本号-压缩格式 ** VERSION:major.minor.release 主要号码,次要号码,release号码 rpm包命名方式: name-VERSION-release.arch.rpm 包名-版本号-红帽对包的打包次数.rhel7.5-cpu架构.rpm 例:bash-4.2.46-19.el7.x86_64.rpm VERSION:major.minor.release release:release.OS 常见的arch:n 系统构架 x86:i386,i486,i586,i686 x86_64:x64,x86_64,amd64 powerpc:ppc 跟平台无关:noarch

我下载了一个httpd-2.4.33并解压到/root/ 我又统计了一下.c结尾的文件数 这些文件都是c语言开发的 包的切分

比如httpd这个包 第一个是主包 其他的是分支包,像装什么就装什么, tools相关的工具包 manual 说明手册 devel 开发包 但是包和包之间有可能有依赖性 装一个就要装其他的包 解决依赖包管理工具 yum:rpm包管理器的前端工具 apt-get:deb包管理器前端工具 zypper:suse上的rpm前端管理工具 dnf:Fedora 18+ rpm 包管理器前端工具(未来可能用)

(yum:底层调用的是rpm) 库文件 查看二进制程序所依赖的库文件 ldd /PATH/TO/BINARY_FILE 管理及查看本机装载的库文件 ldconfig 加载库文件 /sbin/ldconfig -p:显示本机已经缓存的所有可用库文件名及文件路径映射关系 配置文件:/etc/ld.so.conf, /etc/ld.so.conf.d/*.conf 缓存文件:/etc/ld.so.cache

ldd 只能看到单个文件用到的库 ldconfig -p 看系统中所有加载的库、正在使用 /etc/ld.so.conf 主配置文件,文件想调用库,得知道库路径,通过主配置文件读取库路径 include包含 我们可以把配置文件放在/etc/ld.so.conf下 也可以放在以放在ld.so.conf.d/*.conf下以.conf为后缀的也可以 每一个程序都有自己的.conf文件 程序不想要了把对应的配置文件删了就行