内核不提供特定的功能:功能由程序提供

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


程序包管理器

功能:将程序各组成部分打包成一个整体,从而方便:安装、查询、卸载、校验、升级。


程序包管理器的分类

谢烟客---------Linux之程序包管理基础知识_Linux

红帽

1)源代码包的命令:name-version.tar.gz

    version:major.minor.release

        major:  主干分支:功能特大变化

        minor:  添加分支,修改功能

        release: 修复一个BUG

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、系统发行光盘
清华大学: 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、查看程序所依赖的库文件

# 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


  3、光盘使用

   光盘名:/dev/sr0 CentOS 5 /dev/hdc

   链接文件: /dev/cdrom,/dev/cdrw,/dev/dvd,/dev/dvdrw

   只读光盘的挂载:

# [ -d /media/cdrom ] || mkdir /media/cdrom
# mount -r /dev/cdrom /media/cdrom
# mount -o ro /dev/cdrom /media/cdrom

**不加-r或-o ro 时,会有报错信息


   对光盘的卸载:

    1、对设备文件  

# umount /dev/cdrom

    2、对挂载点

# umount /media/cdrom

   

   4、dd命令

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