软件包管理详解

一、简介

我们知道在操作系统上所使用的程序都是由程序员通过开发工具得来,程序员直接编写的纯文本的文档我们称之为源代码,由于计算机识别的是二进制程序,因此在完成源代码编写之后,就必须要经过编译成为操作系统可以看得懂的二进制程序,这里的编译就是通过编译器来进行的操作,编译器的功能就是将源代码程序转换成二进制程序,然后通过一定的安装步骤安装到操作系统上来,进而被系统用户使用。

二、程序包管理器

目前Linux系统之上软件安装方式最常见的两种,分别是:

dpkg:

这个机制最早是由Debian Linux社区所开发出来的,透过dpkg的机制,Debian提供的软件就能够简单的安装起来,同时还能提供安装后的资讯,实在非常不错。只要是衍生于Debian的其它Linux发行版,大多使用dpkg机制来管理软件,文件后缀为.deb结尾的,包括B2D,Ubuntu等。

rpm:

这个机制最早是由Redhat这家公司开发出来的,后来实在很好用,因此很多发行版就使用这个机制来作为软件安装的管理方式,文件后缀为.rpm结尾的,包括Centos,Fedora,SuSE等知名的发行厂商。

程序包管理器:

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

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

RPM包内的文件;

PM的元数据;

如名称,版本,依赖性,描述等;

安装或卸载时运行的脚本;

2、数据库(公共)

程序包名称及版本;

依赖关系;

功能说明;

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

三、包命名和工具

1.rpm包命名方式:

name-VERSION-release.arch.rpm

例:bash-4.2.46-19.el7.x86_64.rpm

bash:软件名称

4.2.46:软件版本号,分为主板本和次版本,4为主版本,2为次版本

19:软件编译的次数

VERSION: major.minor.release

release:release.OS

常见的arch:

x86: i386, i486, i586, i686

x86_64: x64, x86_64, amd64

powerpc: ppc

跟平台无关:noarch

2.包分类和拆包:

Application-VERSION-ARCH.rpm: 主包

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

Application-utils-VERSION-ARHC.rpm 工具子包

Application-libs-VERSION-ARHC.rpm 库子包

3.包之间可能存在依赖关系,甚至循环依赖;

4.解决依赖包管理工具:

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

apt-get:deb包管理器前端工具

zypper: suse上的rpm前端管理工具

dnf: Fedora 18+ rpm包管理器前端管理工具

四、库文件

1.查看二进制程序所依赖的库文件:

ldd /PATH/TO/BINARY_FILE

2.管理及查看本机装载的库文件:

ldconfig

3.显示本机已经缓存的所有可用库文件 名及文件路径映射关系:

/sbin/ldconfig -p

4.配置文件:/etc/ld.so.conf,/etc/ld.so.conf.d/*.conf

5.缓存文件:/etc/ld.so.cache

五、程序包的来源

管理程序包的方式:

使用包管理器:rpm

使用前端工具:yum,dnf

获取程序包的途径:

(1)  系统发版的光盘或官方的服务器;

CentOS镜像:

https://www.centos.org/download/

http://mirrors.aliyun.com

http://mirrors.sohu.com

http://mirrors.163.com

(2)项目官方站点

(3)第三方组织

Fedora-EPEL:Extra Packages for Enterprise Linux

Rpmforge:RHEL推荐,包很全

rpm包搜索引擎:

http://pkgs.org

http://rpmfind.net

http://rpm.pbone.net

https://sourceforge.net

六、rpm包管理

centos系统上使用rpm命令管理程序包:安装、升级、查询、卸载、检验、数据库维护。

rpm包安装:

语法:rpm {-i|--install} [install-options] PACKAGE_FILE…

OPTION:

-v:--verbose:显示安装过程中的详细信息

-vv:更详细的信息

-h: 以#显示程序包管理执行进度

             示例:
                rpm -ivh PACKAGE_FILE ...
                rpm -ivh tree-1.6.0-10.el7.x86_64.rpm

[install-options]:

- -test: 测试安装,但不真正执行安装,而仅报告依赖关系及冲突信息等;

- -nodeps:忽略依赖关系

- -replacepkgs:覆盖安装(重新安装并覆盖原有的文件)

- -replacefiles:覆盖文件(不同的rpm包文件,个别相同文件冲突)

- -nosignature: 不检查来源合法性

- -nodigest:不检查包完整性

- -noscipts:不执行程序包脚本片断

%pre: 安装前脚本;- -nopre

%post: 安装后脚本;- -nopost

%preun: 卸载前脚本; - -nopreun

%postun: 卸载后脚本;- -nopostun

             示例:
                 rpm -ivh vsftpd-3.0.2-21.el7.x86_64.rpm
                 rpm -q vsftpd
                 rpm -ivh - -test vsftpd-3.0.2-21.el7.x86_64.rpm
                 rpm -ivh - -nodeps httpd-2.4.6-45.el7.centos.x86_64.rpm
                 rpm -ivh --replacepkgs vsftpd-3.0.2-21.el7.x86_64.rpm 
                 rpm -ivh --replacepkgs --nosignature vsftpd-3.0.2-21.el7.x86_64.rpm

 rpm包升级:

语法:

rpm {-U|--upgrade} [install-options]PACKAGE_FILE...

rpm {-F|--freshen} [install-options]PACKAGE_FILE...

upgrade:安装有旧版程序包,则“升级” 如果不存在旧版程序包,则“安装”

freshen:安装有旧版程序包,则“升级” 如果不存在旧版程序包,则不执行升级操作

示例:

rpm -Uvh PACKAGE_FILE ...

rpm -Fvh PACKAGE_FILE ...

OPTION:

- -oldpackage:降级;

- -force: 强行升级;

升级注意事项:

(1) 不要对内核做升级操作;Linux支持多内核版本并存,因此,可以直接安装多个不同版本内核;

(2) 如果原程序包的配置文件安装后曾被修改,升级时,新版本 的提供的同一个配置文件并不会直接覆盖老版本的配置文件,而把新版本的文件重命名(FILENAME.rpmnew)后保留;

rpm包查询:

语法:rpm {-q|--query} [select-options] [query-options]

[select-options]

-a: 所有包

-f: 查看指定的文件由哪个程序包安装生成

-p rpmfile:针对尚未安装的程序包文件做查询操作;

- -whatprovides CAPABILITY:查询指定的CAPABILITY由哪个包所提供

- -whatrequires CAPABILITY:查询指定的CAPABILITY被哪个包所依赖

rpm2cpio 包文件|cpio–itv 预览包内文件

rpm2cpio 包文件|cpio–id  “*.conf” 释放包内文件

示例:删除/usr/bin/tree,使用rpm2cpio恢复

[query-options]

- -changelog:查询rpm包的changelog;

-c: 查询某包安装完成后生成的所有配置文件;

-d: 查询某包安装完成后生成的所有帮助文件;

-i: information(查询某包简要说明信息);

-l: 查看指定的程序包安装后生成的所有文件;

- -scripts:程序包自带的脚本片断;

-R: 查询指定的程序包所依赖的CAPABILITY;

- -provides: 列出指定程序包所提供的CAPABILITY;

查询用法:
            -qi PACKAGE_NAME
            -qf FILE
            -qc PACKAGE_NAME
            -ql PACKAGE_NAME
            -qd PACKAGE_NAME
            -qpi PACKAGE_FILE
            -qpl PACKAGE_FILE
            -qa
            -q - -wathprovides bash
            -q - -wathequires bash
            -q - -changelog bash
            -q - -scripts bash
            -q -R    bash
            -q - -provides bash

     rpm包卸载:

语法:rpm {-e|- -erase} [- -allmatches] [- -nodeps][--noscripts] [- -notriggers] [--test] PACKAGE_NAME ...

简单用法:rpm -e PACKAGE_NAME...

OPTION:

- -nodeps:忽略依赖关系;

- -test:测试卸载;dry-run模式;

- -allmatches:如果一个程序包同时安装多个版本,则此选项一次全部卸载;

- -noscripts:不执行程序包脚本片段;

rpm包校验:

1.查询包安装之后生成的文件是否发生了改变;

2.语法:rpm {-V|--verify} [select-options][verify-options]

3.常见用法:rpm -V PACKAGE_NAME

4.当没有输出结果时表示软件包完整OK,当有相应的结果输出表妹对应的内容有修改,具体如下:

示例:

    S:file Size differs(文件的容量大小是否被改变)
    M:Mode differs(文件的类型或文件的属性(rwx)是否被改变?如是否可运行等参数已被改变)
    5:MD5 sum differs(MD5这一种指纹码的内容已经不同)
    D:Device major/minor number mismatch(装置的主/次代码已经改变)
    L:readLink(2) path mis-match(link路径一倍改变)
    U:User ownership differs(文件的所有者已被改变)
    G:Group ownership differs(文件的所属组已被改变)
    T:mTime differs(文件的创建时间已被改变)
    P:capabilities differ(功能改变)
   5.包来源合法性验正及完整性验正:
            完整性验正:SHA256
            来源合法性验正:RSA 
     6.公钥加密: 对称加密:加密、解密使用同一密钥;
     7.非对称加密:密钥是成对儿的
             public key: 公钥,公开所有人 
             secret key: 私钥, 不能公开 
     8.导入所需要公钥:
        rpm -K|checksig rpmfile 检查包的完整性和签名
        rpm - -import/etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 ##导入公钥文件
        CentOS 7发行版光盘提供:RPM-GPG-KEY-CentOS-7
        rpm -qa gpg-pubkey* 查看公钥文件

示例:

七、rpm数据库

1.rpm数据库文件:/var/lib/rpm

2.数据库重建:

语法:rpm {--initdb|--rebuilddb}

initdb: 初始化

如果事先不存在数据库,则新建之;否则,不执行任何操作;

rebuilddb:重建

无论当前存在与否,直接重新创建数据库;

时间: 2024-10-14 20:45:27

软件包管理详解的相关文章

Yum软件包管理详解

目录 1. Yum 1.1 检查和更新包 1.1.1 查询更新 1.1.2 更新包 1.1.3 使用 ISO 和 Yum 离线升级系统 1.2 使用包 1.2.1 搜索包 1.2.2 列出包 1.2.3 显示包信息 1.2.4 安装包 删除包 1.3 查看事务记录 1.3.1 事务记录 1.3.2 检查事务 1.3.3 恢复和重复事务 1.4 配置yum和yum存储库 1.4.1 配置 /etc/yum.conf 文件 1.4.2 /etc/yum.conf 的[main]选项 1.4.3 /e

Linux软件包管理详解

大纲 一.软件包组成部分 二.rpm详解 三.yum详解 一.软件包组成部分 软件包组成部分 ①二进制程序,例如/bin /sbin ②库,例如/lib ③配置文件,例如/etc ④帮助文档,例如/usr/share/man 二.rpm详解 rpm - RPM Package Manager    # RPM包管理器 SYNOPSIS    QUERYING AND VERIFYING PACKAGES:-q.-V.--import.-K    INSTALLING, UPGRADING, AN

项目log4j日志管理详解

项目log4j日志管理详解 log4j日志系统在项目中重要性在这里就不再累述,我们在平时使用时如果没有特定要求,只需在log4j.properties文件中顶入输出级别就行了.如果要自定义输出文件,对于初次使用者可能会遇到一点的小麻烦.最近在项目中刚做了一个统计用户登录的日志文件,要求将用户登录到某个模块的信息输出到login.log中,每天生成一个已日期命名的该类文件,现share出来. 1.Log4j下载 在apache网站:jakarta.apache.org/log4j 可以免费下载到L

linux磁盘管理之LVM逻辑卷认识与管理详解(实验详细,可跟做)

Linux磁盘管理之LVM逻辑卷认识与管理详解 前言 本文接着上篇文章作如下延伸:链接:Linux磁盘管理之磁盘管理与文件系统 什么是LVM?为什么需要LVM? 如何具体进行LVM逻辑卷管理? 什么是磁盘配额?为什么需要磁盘配额? 在Linux中进行磁盘配额的条件是什么呢? 如何具体进行磁盘配额? 下面对以上问题逐一讲解,深入实例进行操作,带你深入理解linux磁盘管理之LVM逻辑卷管理. 一.LVM概述 1.什么是LVM?为什么需要LVM? ? 许多 Linux 使用者安装操作系统时都会遇到这

进程管理之工作管理详解(job control)

进程管理之工作管理详解(job control) 1 什么是工作管理(job control) 我们知道linux是多任务多终端工作的操作系统.我们可以在多个终端进行工作,也可以在一个终端进行多个任务工作.那在一个终端同时进行多个工作任务,就称为工作管理.比如这种情况,在一个终端,你想要复制文件,同时你还想压缩打包文件,甚至你还想编辑文件,这个时候就要用到工作管理.工作管理的情况,大概是这样的.直接上图. 首先,你要明白前台,后台的概念.前台就是当前我们登陆shell操作的终端,我们与之交互,看

ASP.NET状态管理详解,让你明明白白

开发WinFrom的程序员可能不会在意维护应用程序的状态,因为WinFrom本身就在客户端运行,可以直接在内存中维护其应用程序状态.但ASP.NET应用程序在服务器端运行,客户端使用无状态的http协议对ASP.NET应用程序发出请求,ASP.NET应用程序响应用户请求,向客户端发送请求的HTML代码,服务器并不会维护任何客户端状态.考虑一个有成千上万并发用户的服务器,如果为每一个用户都维护状态的话会耗费非常多的资源. 由于使用无状态的http协议作为web应用程序的通信协议,当客户端每次请求页

Linux01-Linux进程管理详解44

一.进程    1.进程属性: a)进程状态 b)父子关系 c)优先级关系 0-139用户优先级,数字越小优先级越高: 0-99:内核调整的 100-139:用户可控制 nice值: -20-19 100-139 普通用户仅能够调大自己的进程的Nice值: 2.进程优先级 a)衡量面对不同的算法时,程序的性能如何,O标准(坐标轴表示): O(1) O(n) O(logn) O(n^2) O(2^n) b)每个进程的PID都是唯一的: init: 进程号为1 3.进程的分类: 跟终端相关的进程 跟

Linux下软件包安装详解

一.概述 现在Linux上软件的安装方式有多种,有源码包编译,软件包管理器,软件包管理器前端工具,通用二进制编译等.源码包,优点是,灵活性和可定制性比较好,缺点是,技术要求高,操作复杂,虽然网上有编译安装软件的文档,也有很多人在使用,也都是默认或者简单配置后编译的.后来出了软件包管理工具RPM,RPM软件包管理软件方便多了但是它的依赖关系让人头疼,所以又推出出了YUM解决了让人头疼的依赖关系.在这里我给大家介绍一下几种常用Linux软件安装方式. 二.软件包的组成 一个软件包安装之后包含多种类型

5、linux用户和组管理详解

linux用户和组管理 类Unix系统的设计初衷就是为让多用户同时工作,所以也迫使Linux系统有了极强的安全性,在前面安装红帽RHEL7操作系统时还特别要求"设置root用户密码",而root用户是存在于所有类UNIX系统中的"超级用户". 用户管理 root账户介绍(超级管理员) root用户拥有极高的系统所有权,能够管理系统的各项功能,如添加/删除用户,启动/关闭进程,开启/禁用硬件设备等权限.虽然使用root用户工作时不会受到权限的控制,但老话讲"