一、软件管理员简介

在前一章我们提到以源代码的方式来安装软件,也就是利用厂商释出的 Tarball 来进行软件的安装。这种情况下每次安装软件都需要侦测操作系统与环境、设置编译参数、实际的编译、 最后还要依据个人喜好的方式来安装软件到定位。整个过程十分繁琐。

假设我们的 Linux 系统与厂商的系统一模一样,那么在厂商的系统上面编译出来的可执行文件, 也可以在我们的系统上运行。也就是说,厂商先在他们的系统上面编译好了我们使用者所需要的软件, 然后将这个编译好的可执行的软件直接释出给使用者来安装,如此一来,由于我们本来就使用厂商的 Linux distribution ,所以当然系统 (硬件与操作系统) 是一样的,那么使用厂商提供的编译过的可执行文件就没有问题啦!

如果在安装的时候加上一些与这些程序相关的信息,将这些信息创建成为数据库,那就可以进行安装、反安装、 升级与验证等等的相关功能了(类似 Windows 下面的“新增移除程序”)。 Linux 上面至少就有两种常见的这方面的软件管理员,分别是 RPM与 Debian 的 dpkg 。CentOS 主要是以 RPM 为主。

1.1 RPM与DPKG

Linux 开发商先在固定的硬件平台与操作系统平台上面将需要安装或升级的软件编译好, 然后将这个软件的所有相关文件打包成为一个特殊格式的文件,在这个文件内还包含了预先检查系统与前驱软件的脚本, 并提供记载该软件提供的所有文件信息等。最终将这个软件文件释出。用户端取得这个文件后,只要通过特定的指令来安装, 那么该软件文件就会依照内部的脚本来侦测相依的前驱软件是否存在,若安装的环境符合需求,那就会开始安装, 安装完成后还会将该软件的信息写入软件管理机制中,以达成未来可以进行升级、移除等动作。

目前对于Linux安装方式最常见的有两种,分别是:

  • dpkg:这个机制最早是由 Debian Linux 社群所开发出来的,通过 dpkg 的机制,Debian 提供的软件就能够简单的安装起来,同时还能提供安装后的软件信息,实在非常不错。 只要是衍生于 Debian 的其他 Linux distributions 大多使用 dpkg 这个机制来管理软件的, 包括 B2D, Ubuntu 等等。
  • RPM:这个机制最早是由 Red Hat 这家公司开发出来的,后来实在很好用,因此很多distributions 就使用这个机制来作为软件安装的管理方式。包括 Fedora, CentOS, SuSE等等知名的开发商都是用这咚咚。

如前所述,不论 dpkg/rpm 这些机制或多或少都会有软件属性相依的问题,那该如何解决呢?
其实前面不是谈到过每个软件文件都有提供相依属性的检查吗?那么如果我们将相依属性的
数据做成列表, 等到实际软件安装时,若发生有相依属性的软件状况时,例如安装 A 需要先
安装 B 与 C ,而安装 B 则需要安装 D 与 E 时,那么当你要安装 A ,通过相依属性列表,管
理机制自动去取得 B, C, D, E 来同时安装, 不就解决了属性相依的问题吗?

没错!您真聪明!目前新的 Linux 开发商都有提供这样的“线上升级”机制,通过这个机制, 原
版光盘就只有第一次安装时需要用到而已,其他时候只要有网络,你就能够取得原本开发商
所提供的任何软件了呢! 在 dpkg 管理机制上就开发出 APT 的线上升级机制,RPM 则依开
发商的不同,有 Red Hat 系统的 yum , SuSE 系统的 Yast Online Update (YOU) 等。

二、dpkg介绍

2.1 简介

dpkg是一个用于安装、建立、移除以及管理Debian包的工具。使用dpkg的一个主要同时也是用户友好的前端是aptitude。dpkg本身可以通过命令行进行控制,其中dpkg可以带一个、零个或多个参数。其中action-parameter告知dpkg需要做什么,options控制dpkg的某些行为。

2.2 关于包的信息

dpkg中维护了关于可用包的一些信息。这些信息被划分为三类:states,selection states以及flags。这些值主要通过dselect进行更改。

2.2.1 states

  • not-installed:这个包还没有在我们的系统上安装
  • config-files:只有包的configuration file在我们的系统上存在
  • half-installed:这个包的安装步骤已经开始,但是出于某些原因并没有完成
  • unpacked:这个包已经unpacked,但是还没有进行configured
  • half-configured:这个包已经unpacked并且开始了configuration,但是由于某些原因没有完成
  • triggers-awaited:这个包等待着由另外一个包来trigger processing
  • triggers-pending:这个包已经进行了triggered
  • installed:这个包已经正确的进行了unpacked以及configured

2.2.2 selection state

  • install:这个包被选定为进行安装
  • hold:a packet marked to be on hold is not handled by dpkg,unless forced to do that with option --force-hold
  • deinstall:这个包被选定为进行deinstallation(我们想要移除该包的全部文件,除了配置文件)
  • purge:这个包被选定为被purged(我们想要移除该包位于系统目录中的全部文件,包括配置文件)
  • unknown:包的选定是未知的。a package that is also in a not-installed state, and with an ok flag will be forgotten in the next database store.

2.2.3 flags

  • ok:一个标记为ok的包处于已知的state,但是可能需要更进一步的处理
  • reinstreq:一个标记为reinstreq的包是broken的并且需要reinstallation。这些包不能被移除,除非用选项–force-remove-reinstreq强制执行

2.3 动作


dpkg-query actions

  • -l,–list package-name-pattern:列出符合给定模式的包
  • -s,–status package-name:汇报出给定包的状态
  • -L,–listfiles package-name:list files installed to your system from package-name
  • -S,–search filename-search-pattern:search for a filename from installed packages
  • -p,–print-avail package-name:display details about package-name,as found in /usr/local/var/lib/dpkg/available. Users of APT-based frontends should use apt-cache show package-name instead

2.4 选项

参考:

https://man7.org/linux/man-pages/man1/dpkg.1.html

二十二、软件安装RPM、SRPM与YUM相关推荐

  1. Senparc.Weixin.MP SDK 微信公众平台开发教程(二十二):如何安装 Nuget(dll) 后使用项目源代码调试...

    最近碰到开发者问:我使用 nuget 安装了 Senparc.Weixin SDK,但是有一些已经封装好的过程想要调试,我又不想直接附加源代码项目,这样就没有办法同步更新了,我应该怎么办? 这其实是一 ...

  2. 读后感: 波、波、波---走出软件作坊:三五个人十来条枪 如何成为开发正规军(二十二)

    波.波.波---走出软件作坊:三五个人十来条枪 如何成为开发正规军(二十二) http://blog.csdn.net/david_lv/archive/2008/06/26/2589809.aspx ...

  3. 网络存储技术Windows server 2012 (项目二十二 远程异地灾备中心的部署)

    网络云存储技术Windows server 2012 (项目二十二 远程异地灾备中心的部署) 前言 网络存储技术,是以互联网为载体实现数据的传输与存储,它采用面向网络的存储体系结构,使数据处理和数据存 ...

  4. JAVA基础知识总结:一到二十二全部总结

    >一: 一.软件开发的常识 1.什么是软件? 一系列按照特定顺序组织起来的计算机数据或者指令 常见的软件: 系统软件:Windows\Mac OS \Linux 应用软件:QQ,一系列的播放器( ...

  5. 实验二十二 SCVMM中的SQL Server配置文件

    实验二十二 SCVMM中的SQL Server配置文件 在VMM 2012中管理员可以使用 SQL Server 配置文件,在部署完成虚拟机之后,实现 SQL Server 数据库服务自动化部署并交付 ...

  6. 插入DLL和挂接API——Windows核心编程学习手札之二十二

    插入DLL和挂接API --Windows核心编程学习手札之二十二 如下情况,可能要打破进程的界限,访问另一个进程的地址空间: 1)为另一个进程创建的窗口建立子类时: 2)需要调试帮助时,如需要确定另 ...

  7. OpenCV学习笔记(二十一)——绘图函数core OpenCV学习笔记(二十二)——粒子滤波跟踪方法 OpenCV学习笔记(二十三)——OpenCV的GUI之凤凰涅槃Qt OpenCV学习笔记(二十

    OpenCV学习笔记(二十一)--绘图函数core 在图像中,我们经常想要在图像中做一些标识记号,这就需要绘图函数.OpenCV虽然没有太优秀的GUI,但在绘图方面还是做得很完整的.这里就介绍一下相关 ...

  8. Android项目实战(二十二):启动另一个APP or 重启本APP

    Android项目实战(二十二):启动另一个APP or 重启本APP 原文:Android项目实战(二十二):启动另一个APP or 重启本APP 一.启动另一个APP 目前公司项目需求,一个主AP ...

  9. Linux_15_软件安装-RPM/YUM

    Linux_15_软件安装-RPM/YUM RPM rpm SRPM rpmbuild YUM yum yum源 RPM 发行版代表 软件管理机制 相关命令 在线升级 Red Hat/Fedora R ...

  10. 无人驾驶汽车系统入门(二十二)——使用Autoware实践激光雷达与摄像机组合标定

    无人驾驶汽车系统入门(二十二)--使用Autoware实践激光雷达与摄像机组合标定 单目相机分辨率高,我们可以使用各种深度学习算法完成对目标检测,但是缺乏深度,坐标等信息.激光雷达能够获得目标相当精确 ...

最新文章

  1. 通俗讲解分布式锁,看完不懂算作者输
  2. 攻防世界Reverse第九题no-strings-attached
  3. 引导类、扩展类、系统类加载器的使用及演示
  4. 树莓派3B+运行arm_computer_library
  5. r语言编程基础_这项免费的统计编程课程仅需2个小时即可学习R编程语言基础知识
  6. Python学习笔记(四十)— 内置模块(9)HTMLParser
  7. eclipse设置系统字体
  8. Eplan教学视频合集-百度网盘-收集于网络
  9. 系统架构演进路线及战术分析(微博、LinkedIn)
  10. 关于【Windows 资源保护找到了损坏文件,但其中有一些文件无法修复】的解决方法
  11. 跨境电商:独立站如何品牌化运营?
  12. html视频编辑,精准视频剪辑器(Smart Cutter)
  13. FFmpeg学习(2)——视频文件大小压缩
  14. 例题 8-10 抄书(Copying Books,UVa 714)
  15. 【计算机英语】期末复习笔记
  16. 文件批量改名-bat操作
  17. 10个精选国外免费空间推荐
  18. python计算学分绩点的程序_模拟登录教务系统计算GPA的小程序
  19. 树莓派GPIO针脚在python中BCM与BOARD模式
  20. 【UML】UML基本概念

热门文章

  1. 计算机丢失msvcrtdll怎么修复,雨林木风修复msvcrtdll 【操作方案】 的详细_
  2. 数据结构-----队列笔记
  3. hooks taro 下拉刷新_Hooks
  4. 我背着女朋友,用 Python 偷偷抓取了她的行踪(单身狗勿进)
  5. 打造狂拽炫酷的主流自定义侧滑控件(仿酷狗和QQ5.0)
  6. php post提交函数,PHP curl get post 提交函数
  7. Qt利用avilib实现录屏功能_如何找到电脑录屏功能?4种方法教你一键打开,不会用来学一学...
  8. electron 读取文件夹内容_electron + jQuery +node.js 快速上手之实现写入文件、拖拽打开文件并读取内容的功能...
  9. isag java_ISAG - WEB源码|JSP源码/Java|源代码 - 源码中国
  10. Excel日期转换mysql_EXCEL与MySQL日期格式转换