Linux基础入门 --17 DAY(软件包管理)

软件相关概念

ABI

        ABI即Application Binary Interface

        windows与Linux不兼容

                ELF(Executable and Linkable Format)

                PE(Portable Executable)

        库级别的虚拟化:

                Linux:WINE

                Windows:Cygwin

API

        API即Application Programming Interface ,API可以在各种不同的操作系统上实现给应用程序提供完全相同的接口,而它们本身在这些系统上的实现却可能迥异,主流的操作系统有两种,一种是Windows系统,另一种时Linux系统,由于操作系统的不同,API又分为Windows API和Linux API.在Windows平台开发出来的软件在Linux上无法运行,在Linux上开发出来的软件在windows上无法运行,这就导致了软件移植困难,POSIX标准出现就是为了解决这一问题.

POSIX:Portable Operating System Interface 可移植操作系统接口,定义了操作系统应该为应用程序提供的接口标准,是IEEE为要各种UNIX操作系统上运行的软件而定义的一系列API标准的总称,Linux和windows都要实现基本的POSIX标准,程序就在源代码级别可移植了.

开发语言

        系统级开发

                汇编语言

                C

                C++

        应用级开发

                java

                python

                go

                php

                Perl

C语言程序实现过程

        C程序源代码->预处理->编译->汇编->链接

        预处理(Pre-Processing)

        编译(Compiling)

        汇编(Assembling)

        链接(Linking)

gcc编译过程范例:

#分步骤编译执行

gcc -E hello.c -o hello.i        对hello.c文件进行预处理,生成了hello.i文件

gcc -S hello.i -o hello.s        对预处理文件进行编译,生成汇编文件

gcc -C hello.s -o hello.o       对汇编文件进行编译,生成目标文件

gcc hello.o -o hello               对目标文件进行链接,生成可执行文件

#一步实现编译过程

gcc hello.c -o hello               直接编译链接成可执行目标文件

软件模块的静态和动态链接

        链接主要是把各模块之间相引用的部分处理好,使得各个模块之间能正确的衔接,分为静态和动态链接

静态链接 

        把程序对应的依赖库复制一份到包

        生成模块文件libxxx.a

        嵌入程序包

        升级难,需重新编译

        占用较多空间,迁移容易

动态链接

        只把以来加做一个动态链接

        生成模块文件libxxx.so

        链接指向

        占用较少空间,升级方便

模块(库)文件

        查看二进制程序所以来的库文件

ldd /PATH/TO/BINARY_FILE

        示例:

[root@localhost ~]# ldd /bin/ls
    linux-vdso.so.1 =>  (0x00007fffcbff7000)
    libselinux.so.1 => /lib64/libselinux.so.1 (0x00007f9c08395000)
    libcap.so.2 => /lib64/libcap.so.2 (0x00007f9c08190000)
    libacl.so.1 => /lib64/libacl.so.1 (0x00007f9c07f87000)
    libc.so.6 => /lib64/libc.so.6 (0x00007f9c07bb9000)
    libpcre.so.1 => /lib64/libpcre.so.1 (0x00007f9c07957000)
    libdl.so.2 => /lib64/libdl.so.2 (0x00007f9c07753000)
    /lib64/ld-linux-x86-64.so.2 (0x00007f9c085bc000)
    libattr.so.1 => /lib64/libattr.so.1 (0x00007f9c0754e000)
    libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f9c07332000)

软件包和软件包管理器 

挂载iso镜像文件 

yum -y install autofs;systemclt enable --now autofs

        示例:

[root@localhost ~]# cd /misc/cd
[root@localhost cd]# ls
CentOS_BuildTag  EFI  EULA  GPL  images  isolinux  LiveOS  Packages  repodata  RPM-GPG-KEY-CentOS-7  RPM-GPG-KEY-CentOS-Testing-7  TRANS.TBL 

程序包管理器

        软件包管理功能:

        将编译好的应用程序的各组成文件打包一个或几个程序包文件,利用包管理器可以方便快捷地实现程序包的安装,卸载,查询升级和校验等管理操作

        主流程序包管理器:

        redhat:rpm文件,rpm包管理器

        debain:deb文件,dpkg包管理器

包命名 

        源代码打包文件命名:

name-VERSION.tar.gz|bz2|xz

VSRSION:major.minor.release 

        rpm包命名方式:

name-VERSION-release.arch.rpm

VERSION:major.minor.release 

        常见arch:

        x86:i386,i486,i586,i686

        x86_64:x64,x86_64,amd64

        powerpc:ppc

        跟平台无关:noarch

        范例:

abrt-addon-ccpp-2.1.11-60.el7.centos.x86_64.rpm
abrt-addon-kerneloops-2.1.11-60.el7.centos.x86_64.rpm
adwaita-qt5-1.0-1.el7.i686.rpm
adwaita-qt5-1.0-1.el7.x86_64.rpm
adwaita-qt-common-1.0-1.el7.x86_64.rpm
aether-1.13.1-13.el7.noarch.rpm

        范例:统计rpm的架构类型及相应包数量

 [root@localhost Packages]# pwd
/misc/cd/Packages
[root@localhost Packages]# ls *.rpm | grep -Eo '[^.]+\.rpm$' | grep -Eo '^[^.]+' | sort | uniq -c
   2268 i686
   3154 noarch
   4650 x86_64

分类和拆包 

        软件包为了管理和使用的便利,会将一个大的软件分类,放在不同的子包中

        包的分类:

Application-VERSION-ARCH.rpm:主包

Application-devel-VERSION-ARCH.rpm:开发子包

Application-utils-VERSION-ARCH.rpm:其他子包

Application-libs-VERSION-ARCH.rpm:其他子包

包的依赖 

        软件包之间可能存在依赖关系,甚至循环依赖。即:A包依赖B包,B包依赖C包,C包依赖A包.

        安装软件时,会因为缺少依赖的包,而导致安装失败.

        解决依赖包管理工具:

        yum:rpm包管理器的前端工具

        dnf:Fedora 18+ rpm包管理器前端管理工具,Centos8版代替yum

        apt:deb包前端管理工具

        zypper:suse上的rpm包管理工具

包管理器相关文件

        1.包文件组成(每个包独有)

                包内的文件

                元数据:如,包的名称,版本,依赖性,描述等

                可能会有包安装或卸载时的运行脚本

        2.数据库(公共)

                程序包名称及版本

                依赖关系

                功能说明

                包安装后生成的各文件路径及校验码信息

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

安红豆.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值