1、软件运行环境
软件运行和编译
ABI:Applicationn Binary Interface 应用二进制接口,调用内核功能
windows与linux 不兼容
ELF:Executable and Linkable Format ------linux接口
PE :Portable Executable ------windows接口
库级别的虚拟化:
linux:wine
windows:cygwin
API:Application programming interface 应用程序接口,调用ku
POSIX:Portable OS
程序源代码 ---> 预处理 ----> 编译 ----> 汇编 ---> 链接
静态编译: .a
动态编译: .so
静态链接 和 动态链接:
链接主要作用是吧哥哥模块之间相互引用的部分处理好,能够正确的衔接,分为静态链接和动态链接。
静态链接:
把程序对应的依赖库复制一份到包
libxxx.a
嵌入程序包
升级难,需要重新编译
占用较多空间,迁移容易
动态链接:
只把依赖加做一个动态链接
libxxx.so
连接指向
占用空间少,升级方便
2、包管理器:
二进制应用程序的组成部分:
二进制文件,库文件,配置文件,帮助文件
程序包管理器:
debian:deb文件,dpkg包管理器
redhat: rpm文件,rpm包管理器
rpm:redhat package manager / RPM package manager
3、包命名:
源代码:name-version。tar.gz| bz2 | xz
version: major.minor.release
rpm包命名:
name-version-release.arch.rpm
version: major.minor.release
release: release.os
常见的arch:
x86 : i386 i486 i586 i686
X86_64 :x64, x86_64 amd64
跟平台无关:noarch
4、包命名和工具
包:分类和拆包
application-version-arch.rpm :主包
application-devel-version-arch.rpm 开发子包
utils 工具包
libs 库包
包之间:可能存在依赖关系,甚至循环依赖
解决依赖包管理工具‘
yum: rpm 包管理器的前端工具
apt-get:deb包管理器前端工具
zypper: suse上的rpm前端管理工具
dnf:Fedora 18 + rpm包管理器前端管理工具
5、库文件:
查看二进制程序所以来的库文件:
ldd /PATH/TO/BINARY_FILE
管理及查看本机装在的库文件:
ldconfig 加载库文件
/sbin/ldconfig -p :显示本机已经缓存的所有可用库文件名及文件路径映射关系
配置文件: /etc/ld.so.conf /etc/ld.so.conf.d/*.conf
缓存文件:/etc/ld.so.cache
5、包管理器
程序包管理器:
功能:将编译号的应用程序的各组成文件打包一个或几个程序包文件,从而方便快捷地实现程序包的安装,卸载,查询,升级和校验等管理操作。
包文件组成(每个包独有)
rpm 包内的文件
rpm的元数据,如名称,版本,依赖性,描述等
安装或卸载时运行的脚本
数据库(公共):/var/lib/rpm
程序包名称及版本
依赖关系
功能说明
包安装后生成的格纹见路劲及校验码信息。
6、程序包的来源
管理程序包的方式
使用包管理器:rpm
使用前端工具:yum,dnf
获取程序包的途径:
系统发版的光盘或官方的服务器
项目官方站点
第三方组织:
fedora-epel
自己制作
7、rpm包管理:
centos系统上使用rpm命令管理程序包
安装,卸载,升级,查询,校验,数据库维护
安装:rpm -ivh PACKAGE
h:显示进度
--test:测试安装,不是真正安装
--nodeps:忽略依赖性
升级:rpm -U [ install-options ] PACKAGE
rpm -F [ install-options ] PACKAGE
upgrade:安装有旧版程序包,则 “升级”, 不存在,就安装
freshen:有旧版本,就升级,没有就不执行
rpm -Uvh / rpm -Fvh
--force:强制安装
注意:
1、不要对内核做升级操作,内核支持多把版本共存,直接安装新版本内核就行。
2、如果源程序包的配置文件安装后被修改过,升级时 ,新版本的提供的同一个配置文件并不会直接覆盖老版本的配置文件,而 把新版本的文件重命名后保留(name.rpmnew
包查询:
rpm -q| --query [select-options] [ query-options]
select-options:
-a:所有包
-f:查看制定的文件由哪个程序包安装生成
-p rpmfile :针对尚未安装的程序包文件做查询操作
query-options:
-c:查询程序的配置文件
-d:查询程序的文档
-i:信息
-l:查看制定的程序包安装后生成的所有文件。
包卸载:rpm -e
包校验:rpm -V
rpm数据库:
数据库重建:/var/lib/rpm
rpm --initdb | --rebuilddb
initdb:初始化,如果事先不存在数据库,则新建,否则不执行
rebuilddb:重建已安装的包头的数据库索引目录
8、yum
centos:yum, dnf
YUM:rpm的前端程序,可以解决软件包相关依赖性,可在多个库之间定位软件包,up2date的替代品
yum repository: yum repo,存储了众多的rpm包,以及包的相关的元数据文件,放在特定的repodata下
文件服务器:http:// https:// file:/// ftp://
yum源:
阿里云repo文件:
http://mirrors.aliyun.com/repo/
CentOS系统的yum源
阿里云:https://mirrors.aliyun.com/centos/$releasever/os/x86_64/
清华大学:https://mirrors.tuna.tsinghua.edu.cn/centos/$releasever/os/x86_64/
EPEL的yum源:
阿里云:https://mirrors.aliyun.com/epel/$releasever/x86_64
升级:yum update,
降级:yum downgrade
检查可用升级:yum check-update
卸载:yum remove
查看程序包:yum info
查看指定的特性是由那些程序包所提供:yum provides
清理本地缓存:yum clean
/var/cache/yum/$basearch/$releasever
构建缓存:
yum makecache
包组管理:
yum groupinstall group1.。。。。
groupupdate
grouplist
groupremove
groupinfo
编译安装后的配置:
1、二进制程序目录导入至PATH环境变量中,
编译/etc/profile.d/NAME.sh
export PATH=/PATH/TO/BIN:$PATH
2、导入库文件路径:
编辑/etc/ld.so.conf.d/NAME.conf
添加新的库文件所在目录至此文件中
让系统重新生成缓存
ldocnfig
3、导入头文件
基于链接的方式的实现
ln -sv
4、导入帮助手册
编辑/etc/man_db.conf文件
添加一个MANPATH
来源:https://www.cnblogs.com/JerryZao/p/10589995.html