内核不提供特定的功能:功能由程序提供
1、查看程序所依赖的库文件
2、显示或配置系统内存中装载的库,库映射关系路径
3、光盘的挂载及使用
4、dd命令
5、特殊设备
6、程序跨平台运行
7、写程序面向的对象
8、写程序面向的对象
9、程序包管理器的分类
10、源代码名、rpm包源码格式名、二进制格式名
11、主、支包的关系
12、包间依赖性
13、包管理器的前端工具
14、获取rpm包的途径
15、来源合法性、完整性定义
程序的格式,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
1
|
mariadb-10.3.0.
tar
.gz
|
2)rpm包命名
源代码: name-version-release(rpm包).操作系统平台.src.rpm
jackson-parent-2.6.2-1.el7.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
noarch: 含有python,c,java代码所写的兼容ELF格式的rpm包
testapp-1.2.3-1.操作系统平台.CPU平台.rpm fann-2.2.0-6.el7.x86_64.rpm
3)包的拆分: 不同的用户用到rpm包的功能范围都不相同,对于只用少部分功能的用户,安装整个rpm包,浪费空间,又没有什么用处。就有需求将功能拆分:主干包和支包
主干包: 包的主要功能: name-version-release.操作系统平台.CPU平台.rpm
支包/支包/分包: 包的附加功能: name-devel-version-release.操作系统平台.CPU平台.rpm
f22-backgrounds-21.91.0-1.el7.noarch.rpm f22-backgrounds-base-21.91.0-1.el7.noarch.rpm f22-backgrounds-gnome-21.91.0-1.el7.noarch.rpm f22-backgrounds-kde-21.91.0-1.el7.noarch.rpm f22-backgrounds-mate-21.91.0-1.el7.noarch.rpm f22-backgrounds-xfce-21.91.0-1.el7.noarch.rpm
4) 包间的依赖关系:安装程序包时,必须先安装主干包,而后才能安装支包。
前端管理工具
将远端或本地的某个仓库中的程序包的依赖关系抽取出来,放到本地的元数据目录路径中,每次安装时,通过校验码与,仓库中的程序包的校验码比对,如果没有变化,分析本地程序包的依赖关系。如果变化了,重新获取对应仓库中的程序包的依赖关系。
1、获取rpm包的途径
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
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、查看程序所依赖的库文件
2、显示或配置系统内存中装载的库,库映射关系路径
3、光盘的挂载及使用
4、dd命令
5、特殊设备
1、查看程序所依赖的库文件
1
|
# ldd FILE...
|
1
2
3
4
5
6
7
8
9
|
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、显示或配置系统内存中装载的库,库映射关系路径
1
2
3
4
5
6
7
8
9
10
|
# ldconfig [选项...]
-p, --print-cache 打印缓冲区
1、设定库的映射
ldconfig FILE
2、配置文件
/etc/ld
.so.conf.d/*.conf
/etc/ld
.so.conf
3、生成缓存的文件路径
/etc/ld
.so.cache
|
3、光盘使用
光盘名:/dev/sr0 CentOS 5 /dev/hdc
链接文件: /dev/cdrom,/dev/cdrw,/dev/dvd,/dev/dvdrw
只读光盘的挂载:
1
2
3
4
5
|
# [ -d /media/cdrom ] || mkdir /media/cdrom
# mount -r /dev/cdrom /media/cdrom
# mount -o ro /dev/cdrom /media/cdrom
**不加-r或-o ro 时,会有报错信息
|
对光盘的卸载:
1、对设备文件
1
|
# umount /dev/cdrom
|
2、对挂载点
1
|
# umount /media/cdrom
|
4、dd命令
1
2
3
|
dd
if
=/PATH/TO/FROM/SRC of=/PATH/TO/DEST count= bs=#
bs= 复制单元大小,block size (M,G,T,E。默认单位为字节)
count= 复制多少个bs,单位为byte
|
1、文件底层复制,比copy效率高
2、磁盘复制
dd if=/dev/sda of=/dev/sdb
3、备份mbr
dd if=/dev/sda of=/tmp/mbr.bak count=1 bs=512
4、破坏mbr
dd if=/dev/zero of=/dev/sda count=1 bs=512
5、破坏bootloader
dd if=/dev/zero of=/dev/sda count=1 bs=256
分区表存在,bootloader消失
两个特殊设备:
数据黑洞: /dev/null
吐零机; /dev/zero
查看效果: dd if=/dev/zero of=/dev/null