标签:linux
内核不提供特定的功能:功能由程序提供
程序的格式,ABI
Windows:EXE
Linux:ELF
程序编译的过程:
源程序 --> 编译 --> 汇编代码 --> 汇编 --> 二进制程序 --> 链接
编译的分类:
静态编译: 将程序运行时依赖的库编译进程序
动态编译:编译后需要链接库,在程序运行时,依据链接找到共享的库
程序跨平台运行
1、库虚拟化,虚拟出对应平台的库和ABI;程序运行在库之上
1)、Linux上运行WINE程序,即可虚拟出Linux程序运行所依赖的库和ABI。Windows程序即可跨平台运行。
2)、Windows上运行Cywins程序,即可虚拟出Windows程序运行所依赖的库和ABI。Linux程序即可跨平台运行。
3)、不稳定
2、java虚拟机:不用考虑依赖的库和ABI(Sun,C语言研发,开发环境JDK,运行环境JVM,javac编译器,java环境内存监视器);程序运行在JVM之上
用C写的程序,调用C库,源代码级别兼容,可在任意平台编译出对应平台的JAVA,JDK,JVM
1)、在JKD中开发的java程序,无论在什么平台,不再考虑系统级别的库,只需要JVM即可运行。
2)、稳定
Andoriod = Linux + busybox + JVM
写程序面向的对象
1)应用级: JAVA语言(JDK),go,python(统一的接口,稳定,简洁),php,perl(灵活)
2)系统级: Syscall,Libcall
3) 硬件规格: 二进制、微码编程、高级语言
程序的组成及功用
二进制格式程序、库、配置文件、帮助手册
配置文件:启用或关闭某些功能特性
库:提供二次开发接口
帮助手册:命令的使用手册
程序: /bin,/sbin,/usr/sbin,/usr/bin
库:/lib,/lib64,/usr/lib,/usr/lib64
配置文件:/etc
帮助手册: /usr/share/man
程序包管理器
功能:将程序各组成部分打包成一个整体,从而方便:安装、查询、卸载、校验、升级。
程序包管理器的分类
红帽
1)源代码包的命令:name-version.tar.gz
version:major.minor.release
major: 主干分支:功能特大变化
minor: 添加分支,修改功能
release: 修复一个BUG
2)rpm包命名
源代码: name-version-release(rpm包).操作系统平台.src.rpm
二进制: name-version-release.操作系统平台.CPU平台.rpm
操作系统平台: el5,el6,el7,...
CPU平台:x86:i386,i486 ,i586 ,i686适用更新的平台,向下兼容
x86_64/x64/amd64:第一颗32bit平台或x86平台的64bitCPU是AMD研发的。注重技术的平台叫amd64
3)包的拆分: 不同的用户用到rpm包的功能范围都不相同,对于只用少部分功能的用户,安装整个rpm包,浪费空间,又没有什么用处。就有需求将功能拆分:主干包和支包
主干包: 包的主要功能: name-version-release.操作系统平台.CPU平台.rpm
支包/支包/分包: 包的附加功能: name-devel-version-release.操作系统平台.CPU平台.rpm
4) 包间的依赖关系:安装程序包时,必须先安装主干包,而后才能安装支包。
前端管理工具
将远端或本地的某个仓库中的程序包的依赖关系抽取出来,放到本地的元数据目录路径中,每次安装时,通过校验码与,仓库中的程序包的校验码比对,如果没有变化,分析本地程序包的依赖关系。如果变化了,重新获取对应仓库中的程序包的依赖关系。
1、获取rpm包的途径
1、系统发行光盘 清华大学: mirror.tuna.tsinghua.edu.cn 华中科技大学: mirrors.hust.edu.cn mirrors.aliyun.com mirrors.sohu.com mirrors.163.com 2、项目官方站点 3、第三方组织 优先:Fedora-EPEL http://download.fedoraproject.org/pub/epel/ 搜索引擎: http://pkgs.org http://rpmfind.org 4、自己制作 1)获取官方源码 2)编写sparc文件
2、rpm命令的使用
1)安装
2)查询
3)卸载
4)校验:来源合法性,完整性
5)升级
6)数据库
来源合法性:程序包制作者是我们认可的第三方组织(由对方的公钥验证)
完整性:未经制作者,向程序包中额外添加的其他内容
补充:
1、查看程序所依赖的库文件
ldd FILE...
使用示例
1、获取命令的路径 [root@izpo45bh60h6bsz ~]# which --skip-alias ls /usr/sbin/ls 2、获取命令依赖的共享库文件 [root@izpo45bh60h6bsz ~]# ldd /bin/ls linux-vdso.so.1 => (0x00007ffd021f3000) ## 库的入口 libselinux.so.1 => /lib64/libselinux.so.1 (0x00007f614409b000) 依赖的共享库 库名 (16进制表示库装载在当前内存的哪个地址空间中 )
2、显示或配置系统内存中装载的库,库映射关系路径
ldconfig [选项...] -p, --print-cache 打印缓冲区 1、设定库的映射 ldconfig FILE 2、配置文件 /etc/ld.so.conf.d/*.conf /etc/ld.so.conf 3、生成缓存的文件路径 /etc/ld.so.cache
本文出自 “Reading” 博客,请务必保留此出处http://sonlich.blog.51cto.com/12825953/1956235
标签:linux
原文地址:http://sonlich.blog.51cto.com/12825953/1956235