09-软件包管理

目录

1 软件运行和编译

1.1 软件的相关概念

1.1.1 ABI

1.1.2 API

1.1.3 开发语言

1.2 C语言程序的实现过程

2 软件包和包管理器

2.1 软件包介绍

2.1.1 软件包的文件分类

2.1.2 程序包管理器

2.1.3 分类和拆包

2.1.4 包的依赖

2.1.5 程序包管理器相关文件

2.1.6 获取包的途径

3 包管理器rpm

3.1 安装

3.2.包查询

3.3 包卸载

3.4 包校验

3.5 数据库

4 yum和dnf

4.1 yum/dnf的工作原理

4.2 yum客户端配置

4.3 yum命令

4.3.1 显示仓库列表

4.3.2 显示程序包

4.3.3 安装程序包

4.3.4 卸载程序包

4.3.5 查询

4.3.6 升级和降级

4.3.7 仓库缓存

4.3.8 查看yum事务历史

4.3.9 安装及升级本地程序包

 4.3.10 包组管理的相关命令

4.3.11 实现私有yum源仓库

 5 程序包源码编译安装

5.1 源码编译介绍

5.2 开源程序源代码的获取

5.3 编译源码的项目工具

5.4 C语言源代码编译安装过程

5.4.1 编译安装准备

5.4.2 编译安装

5.4.3 安装后的配置

5.4.4 源码编译安装范例

6 Ubuntu软件管理 

6.1 APT工作原理

6.2 dpkg 包管理器

6.3 apt


1 软件运行和编译

1.1 软件的相关概念

1.1.1 ABI

ABI 应用程序二进制接口

  • windows与Linux的二进制文件格式不同
  • Linux格式是ELF格式
  • windows格式是PE格式

范例:

1.1.2 API

API 应用程序的开发接口

  • 由于在Windows平台开发出来的软件在Linux上无法运行,同时在Linux上开发的软件在Windows上又无法运行,这就导致了软件移植困难,所以 POSIX 标准的出现就是为了解决这个问题:
  • POSIX:Portable Operating System Interface 可移植操作系统接口,定义了操作系统应该为应用程序 提供的接口标准,是IEEE为要在各种UNIX操作系统上运行的软件而定义的一系列API标准的总称。
  • Linux和windows都要实现基本的 POSIX 标准,程序就在源代码级别可移植了。

1.1.3 开发语言

常见的系统级开发语言:

  • 汇编语言
  • C
  • C++

应用级开发语言:

  • Java
  • python
  • go
  • php
  • perl
  • basic
  • ruby
  • bash

1.2 C语言程序的实现过程

C语言的程序编译主要经过四个过程:

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

预处理过程:

  1. 将所有的#define删除,并且展开所有的宏定义
  2. 处理所有的条件预编译指令,比如#if #ifdef #elif #else #endif等
  3. 处理#include 预编译指令,将被包含的文件插入到该预编译指令的位置。
  4. 删除所有注释 “//”和”/* */”.
  5. 添加行号和文件标识,以便编译时产生调试用的行号及编译错误警告行号。
  6. 保留所有的#pragma编译器指令,因为编译器需要使用它们

编译过程:

  • 编译过程就是把预处理完的文件进行一系列的词法分析,语法分析,语义分析及优化后,最后生成相应的汇编代码

汇编过程:

  • 汇编器是将汇编代码转变成机器可以执行的命令,每一个汇编语句几乎都对应一条机器指令。汇编 相对于编译过程比较简单,根据汇编指令和机器指令的对照表一一翻译即可。

链接过程:

  • 通过调用链接器ld来链接程序运行需要的一大堆目标文件,以及所依赖的其它库文件,最后生成可 执行文件。

范例: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 直接编译链接成可执行目标文件

2 软件包和包管理器

2.1 软件包介绍

开源软件最初只提供了.tar.gz的打包的源码文件,用户必须自己编译每个想在GNU/Linux上运行的软件。用户急需系统能提供一种更加便利的方法来管理这些软件,当Debian诞生时,这样一个管理工具 dpkg也就应运而生,可用来管理deb后缀的"包"文件。从而著名的“package”概念第一次出现在 GNU/Linux系统中,稍后Red Hat才开发自己的rpm包管理系统。

2.1.1 软件包的文件分类

  • 二进制文件
  • 库文件
  • 配置文件
  • 帮助文件

范例:利用 cpio工具查看包文件列表

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

2.1.2 程序包管理器

软件包管理器功能:

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

主流的程序包管理器:

  • redhat:rpm文件, rpm 包管理器
  • debian:deb文件, dpkg 包管理器

2.1.3 分类和拆包

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

包的分类:

  • Application-VERSION-ARCH.rpm: 主包
  • Application-devel-VERSION-ARCH.rpm 开发子包
  • Application-utils-VERSION-ARHC.rpm 其它子包
  • Application-libs-VERSION-ARHC.rpm 其它子包

2.1.4 包的依赖

软件包之间可能存在依赖关系,甚至循环依赖,即:A包依赖B包,B包依赖C包,C包依赖A包 安装软件包时,会因为缺少依赖的包,而导致安装包失败。

解决依赖包的管理工具:

  • yum:rpm包管理器的前端工具
  • dnf:Fedora 18+ rpm包管理器前端管理工具,CentOS 8 版代替 yum
  • apt:deb包管理器前端工具
  • zypper:suse上的rpm前端管理工具

2.1.5 程序包管理器相关文件

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

  • 包内的文件
  • 元数据,如:包的名称,版本,依赖性,描述等
  • 可能会有包安装或卸载时运行的脚本

数据库(公共):/var/lib/rpm

  • 程序包名称及版本
  • 依赖关系
  • 功能说明
  • 包安装后生成的各文件路径及校验码信息

2.1.6 获取包的途径

软件包需要事先将源码进行编译后打包形成,获取包的途径如下:

1)系统发版的光盘或官方网站:

Centos镜像:

  • https://www.centos.org/download/
  • http://mirrors.aliyun.com
  • http://mirrors.sohu.com
  • http://mirrors.163.com

Ubuntu镜像:

2)第三方组织提供

Rpmforge:官网: http://repoforge.org/, RHEL推荐,包很全,即将关闭

Community Enterprise Linux Repository:https://elrepo.org/ 支持最新的内核和硬件相关包

3)软件项目官方站点

  • http://yum.mariadb.org/10.4/centos8-amd64/rpms/
  • http://repo.mysql.com/yum/mysql-8.0-community/el/8/x86_64/

4)搜索引擎

  • http://pkgs.org
  • http://rpmfind.net
  • http://rpm.pbone.net
  • https://sourceforge.net/
  • 注意:第三方包建议要检查其合法性,来源合法性,程序包的完整性

5)自己制作

  • 将源码文件,利用工具,如:rpmbuild,fpm等工具制作成rpm包文件

3 包管理器rpm

CentOS系统上使用rpm命令管理程序包

功能: 安装、卸载、升级、查询、校验、数据库维护

3.1 安装

选项:

  • -i 安装软件包
  • -v 输出更详细的信息,用于调试或了解软件包安装/卸载过程中发生了什么
  • -h 显示安装进度

格式:

rpm -ivh PACKAGE_FILE ...

3.2.包查询

包查询常用语法:

  • rpm -qa 列出所有已安装的rpm包
  • rpm -q package_name 查询特定软件包是否已经安装
  • rpm -qi package_name 查询软件包的详细信息
  • rpm -ql package_name 查询软件包包含的文件列表
  • rpm -qpR package_name 查询软件包依赖关系
  • rpm -qf 查询文件来自哪个rpm包

3.3 包卸载

选项 -e 用于卸载rpm包

注意:当包卸载时,对应的配置文件不会删除, 以FILENAME.rpmsave形式保留

范例:强行删除rpm包,并恢复

[root@centos7 ~]#rpm -e rpm --nodeps
#重启进入rescue模式
#mkdir /mnt/cdrom
#mount /dev/sr0 /mnt/cdrom
#rpm -ivh /mnt/cdrom/Packages/rpm-4.11.3-40.el7.x86_64.rpm  --root=/mnt/sysimage
#reboot

3.4 包校验

在安装包时,系统也会检查包的来源是否是合法的

检查包的完整性和签名:

rpm  -K|--checksig  rpmfile 

在检查包的来源和完整性前,必须导入所需要公钥:

rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
rpm -qa “gpg-pubkey*”

3.5 数据库

rpm包安装时生成的信息,都放在rpm数据库中:/var/lib/rpm

可以重建数据库:
 

rpm {--initdb|--rebuilddb}
initdb: 初始化,如果事先不存在数据库,则新建之,否则,不执行任何操作
rebuilddb:重建已安装的包头的数据库索引目录

4 yum和dnf

4.1 yum/dnf的工作原理

yum/dnf 是基于C/S 模式

  • yum 服务器存放rpm包和相关包的元数据库
  • yum 客户端访问yum服务器进行安装或查询等

yum 实现过程:

  • 先在yum服务器上创建 yum repository(仓库),在仓库中事先存储了众多rpm包,以及包的相关的 元数据文件(放置于特定目录repodata下),当yum客户端利用yum/dnf工具进行安装时包时,会自动 下载repodata中的元数据,查询远数据是否存在相关的包及依赖关系,自动从仓库中找到相关包下载并 安装。

yum服务器的仓库可以多种形式存在:

  • file:// 本地路径
  • http://
  • https://
  • ftp://

注意:yum仓库指向的路径一定必须是repodata目录所在目录

4.2 yum客户端配置

yum客户端配置文件:

  • /etc/yum.conf:#为所有仓库提供公共配置
  • /etc/yum.repos.d/*.repo:#为每个仓库的提供配置文件

yum源配置的相关变量:

$releasever: 当前OS的发行版的主版本号,如:8,7,6
$arch: CPU架构,如:aarch64, i586, i686,x86_64等
$basearch:系统基础平台;i386, x86_64
$contentdir:表示目录,比如:centos-8,centos-7
$YUM0-$YUM9:自定义变量

Centos推荐的国内yum源地址:

#腾讯源
https://mirrors.cloud.tencent.com/centos/$releasever/extras/$basearch/

#清华大学源
https://mirrors.tuna.tsinghua.edu.cn/centos/$releasever/extras/$basearch/

#阿里源
https://mirrors.aliyun.com/centos/$releasever/extras/$basearch/

#华为源
https://repo.huaweicloud.com/centos/$releasever/extras/$basearch/

yum源配置案例:

[base]
name=CentOS
baseurl=https://mirrors.cloud.tencent.com/centos/$releasever/os/$basearch/
        https://mirrors.tuna.tsinghua.edu.cn/centos/$releasever/os/$basearch/
        https://mirrors.aliyun.com/centos/$releasever/os/$basearch/
        https://repo.huaweicloud.com/centos/$releasever/os/$basearch/
gpgcheck=0

[extras]
name=extras
baseurl=https://mirrors.cloud.tencent.com/centos/$releasever/extras/$basearch/
        https://mirrors.tuna.tsinghua.edu.cn/centos/$releasever/extras/$basearch/
        https://mirrors.aliyun.com/centos/$releasever/extras/$basearch/
        https://repo.huaweicloud.com/centos/$releasever/extras/$basearch/
gpgcheck=0
enabled=1

[epel]
name=epel
baseurl=https://mirrors.cloud.tencent.com/epel/$releasever/$basearch/
        https://mirrors.huaweicloud.com/epel/$releasever/$basearch/
gpgcheck=1
gpgkey=https://mirrors.cloud.tencent.com/epel/RPM-GPG-KEY-EPEL-7

注意:

  • 与之前的版本不同,CentOS 8 系统有两个yum 源:BaseOS和AppStream ,需要分别设置两个仓库。

范例:用脚本实现创建yum仓库配置文件

#!/bin/bash
mkdir  /etc/yum.repos.d/backup
mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/backup
cat >  /etc/yum.repos.d/base.repo <<EOF
[base]
name=base 
baseurl=https://mirrors.aliyun.com/centos/\$releasever/os/\$basearch
gpgcheck=0
EOF

4.3 yum命令

yum命令常用选项:

-y   #自动回答为yes
-q   #静默模式
--nogpgcheck  #禁止gpg check校验
--enablerepo=仓库名   #启用指定的仓库
--disbalerepo=仓库名  #禁用指定的仓库

4.3.1 显示仓库列表

yum repolist [all|enabled|disabled]

范例:显示所有仓库列表

范例:列出除了epel的仓库列表

4.3.2 显示程序包

yum list
yum list [all | glob_exp1] [glob_exp2] [...]
yum list {available|installed|updates} [glob_exp1] [...]

范例:

4.3.3 安装程序包

yum install package1 [package2] [...]
yum reinstall package1 [package2] [...]  #重新安装

4.3.4 卸载程序包

yum remove | erase package1 [package2] [...]

4.3.5 查询

#查看程序包information:
yum info [...]  

#查看指定的特性(可以是某文件)是由哪个程序包所提供:
yum provides | whatprovides feature1 [feature2] [...]

#以指定的关键字搜索程序包名及summary信息
yum search string1 [string2] [...]

#查看指定包所依赖的capabilities:
yum deplist package1 [package2] [...]

 注意:文件要写全路径,而不只是文件名,否则无法查询到

范例:

4.3.6 升级和降级

yum update [package1] [package2] [...]
yum downgrade package1 [package2] [...] (降级)

4.3.7 仓库缓存

清除仓库缓存:

yum clean [ packages | metadata | expire-cache | rpmdb | plugins | all ]

4.3.8 查看yum事务历史

 日志文件:

#CentOS 7以前版本日志
/var/log/yum.log

#CentOS 8 版本日志
/var/log/dnf.rpm.log
/var/log/dnf.log

日志命令:

#查看通过yum进行的历史事务
yum history info

#回退历史事务
yum history undo #

#重做历史事务
yum history redo #

4.3.9 安装及升级本地程序包

yum localinstall|install  rpmfile1 [rpmfile2] [...]
yum localupdate|update rpmfile1 [rpmfile2] [...]

 4.3.10 包组管理的相关命令

yum grouplist [hidden] [groupwildcard] [...]
yum groupinstall group1 [group2] [...]
yum groupupdate group1 [group2] [...]
yum groupremove group1 [group2] [...]
yum groupinfo group1 [...]

4.3.11 实现私有yum源仓库

下载所有yum仓库的相关包和meta 数据:

#CentOS 8 dnf 工具集成
dnf reposync --help #查看帮助

#默认只下载rpm包,不下载meta数据,需要指定--download-metadata 才能下载meta
dnf reposync  --repoid=REPOID --download-metadata -p /path 

#CentOS 7 以前版本,reposync工具来自于yum-utils包
reposync --repoid=REPOID --download-metadata -p /path  

范例1:Centos8创建局域网的基于Base的私有yum源

#仓库服务器配置
[root@repo-server ~]#yum -y install httpd
[root@repo-server ~]#systemctl enable --now  httpd
[root@repo-server ~]#mkdir /var/www/html/centos/8 -pv
[root@repo-server ~]#mount /dev/sr0 /mnt/
[root@repo-server ~]#cp -a /mnt/* /var/www/html/centos/8

#yum客户端配置
[root@repo-client ~]#cat /etc/yum.repos.d/test.repo
[BaseOS]
name=BaseOS
baseurl=http://10.0.0.100/centos/8/BaseOS
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
[AppStream]
name=Appstream
baseurl=http://10.0.0.8/centos/8/AppStream/
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial

范例2:Centos8下载阿里云的extras源,制作私有yum源

 [root@repo-server ~]#dnf reposync  --repoid=extras  --download-metadata -p 
/var/www/html/centos

[root@repo-client ~]#cat /etc/yum.repos.d/test.repo
[BaseOS]
name=BaseOS
baseurl=http://10.0.0.100/centos/8/BaseOS
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
[AppStream]
name=Appstream
baseurl=http://10.0.0.100/centos/8/AppStream/
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
[extras]
name=extras
baseurl=http://10.0.0.100/centos/extras/

范例3:

#下载相关仓库包和元数据 --download-metadata 加此选项可以下载元数据
[root@repo-server ~]#dnf reposync  --repoid=epel --download-metadata -p /var/www/html

#下载相关的key文件
[root@repo-server ~]#wget -P /var/www/html/epel/  https://mirrors.aliyun.com/epel/RPM-GPG-KEY-EPEL-8


[root@repo-client ~]#cat /etc/yum.repos.d/test.repo 
[epel]
name=epel
baseurl=http://10.0.0.100/epel/
gpgkey=http://10.0.0.100/epel/RPM-GPG-KEY-EPEL-8

 5 程序包源码编译安装

5.1 源码编译介绍

程序包编译安装:

  • 源代码-->预处理-->编译-->汇编-->链接-->执行
  • 多文件:文件中的代码之间,很可能存在跨文件依赖关系

虽然有很多开源软件将软件打成包,供人们使用,但并不是所有源代码都打成包,如果想使用开源软件,可能需要自己下载源码,进行编译安装。另外即使提供了包,但是生产中需要用于软件的某些特性,仍然需要自行编译安装。但是利用源代码编译安装是比较繁琐的,庆幸的是有相关的项目管理工具 可以大大减少编译过程的复杂度。

5.2 开源程序源代码的获取

项目官方自建站点:

  • apache.org (ASF:Apache Software Foundation)
  • mariadb.org

代码托管:

  • Github.com
  • gitee.com
  • SourceForge.net
  • code.google.com

5.3 编译源码的项目工具

C、C++的源码编译:

  • 使用 make 项目管理器
  • configure脚本 --> Makefile.in --> Makefile
  • 相关开发工具:
    • autoconf: 生成configure脚本
    • automake:生成Makefile.in

java的源码编译:

  • 使用 maven

5.4 C语言源代码编译安装过程

利用编译工具,通常只需要三个大的步骤:

  • ./configure
    • 通过选项传递参数,指定安装路径、启用特性等;执行时会参考用户的指定以及Makefile.in文 件生成Makefile
    • 检查依赖到的外部环境,如依赖的软件包
  • make 根据Makefile文件,会检测依赖的环境,进行构建应用程序,
  • make install 复制文件到相应路径

5.4.1 编译安装准备

准备:安装相关的依赖包

  • 开发工具:make, gcc (c/c++编译器GNU C Complier)
  • 开发环境:开发库(glibc:标准库),头文件,可安装开发包组 Development Tools
  • 软件相关依赖包

5.4.2 编译安装

第一步:运行 configure 脚本,生成Makefile 文件

其选项主要功能:

  • 可以指定安装位置
  • 指定启用的特性

选项分类:

安装路径设定:

  • --prefix=/PATH:指定默认安装位置,默认为/usr/local/
  • --sysconfdir=/PATH:配置文件安装位置
  • System types:支持交叉编译

软件特性和相关指定:

  • Optional Features: 可选特性
    • --disable-FEATURE
    • --enable-FEATURE[=ARG]
  • Optional Packages: 可选包
    • --with-PACKAGE[=ARG] 依赖包
    • --without-PACKAGE 禁用依赖关系

注意:通常被编译操作依赖的程序包,需要安装此程序包的“开发”组件,其包名一般类似于name devel-VERSION。

第二步:make

第三步:make install

5.4.3 安装后的配置

1) 二进制程序目录导入至PATH环境变量中

  • 编辑文件/etc/profile.d/NAME.sh
 export PATH=/PATH/TO/BIN:$PATH

2) 相关用户及文件

  • 有些开源软件编译完成后,还需要创建相关的用户及文件

3) 导入帮助手册

  • 编辑/etc/man.config|man_db.conf文件,添加一个MANPATH

5.4.4 源码编译安装范例

范例1:CentOS 7 编译安装 tree1.8

#1 安装相关的依赖包
yum install gcc make

#2 下载源码并解压
tar xvf tree-1.8.0.tgz

#3 进入解压缩的目录,README和INSTALL 
cd tree-1.8.0/
cat README 
cat INSTALL 

#4 修改源码的版本号
sed -i 's#v1\.8\.0#v.8.8.8#' tree.c

#5 编译准备
vim Makefile
prefix = /apps/tree

#6 编译
make 

#7 安装
make install

#8 修改PATH变量
#默认无法直接运行tree
echo 'PATH=/apps/tree/bin:$PATH' > /etc/profile.d/tree.sh
. /etc/profile.d/tree.sh

#或者利用软链接实现
ln -s  /apps/tree/bin/tree /usr/local/bin

#9 验证结果
tree --version

#10 添加man帮助
#默认无法查看man
vim /etc/man_db.conf
MANDATORY_MANPATH           /apps/tree/man  

范例2:CentOS 8 编译安装 cmatrix

#1 安装相关包
[root@centos8 ~]#dnf install gcc make  autoconf  ncurses-devel 

#2 下载并解压缩包
[root@centos8 ~]#cd /usr/local/src
[root@centos8 ~]#wget 
https://github.com/abishekvashok/cmatrix/releases/download/v2.0/cmatrix-v2.0 Butterscotch.tar
[root@centos8 ~]#tar xvf cmatrix-v2.0-Butterscotch.tar

#3 配置 
[root@centos8 ~]#cd cmatrix
[root@centos8 cmatrix]#./configure --prefix=/apps/cmatrix

#4 编译并安装
[root@centos8 cmatrix]#make &&  make install 

#5 配置环境
[root@centos8 ~]#echo 'PATH=/apps/cmatrix/bin:$PATH' > /etc/profile.d/cmatrix.sh
[root@centos8 ~]#. /etc/profile.d/cmatrix.sh
#或者用软链接实现
[root@centos8 ~]#ln -sv /apps/cmatrix/bin/cmatrix  /usr/local/bin/

#6运行
[root@centos8 ~]#cmatrix -a -b -C yellow

7#帮助
[root@centos8 ~]#vim /etc/man_db.conf
MANDATORY_MANPATH                        /apps/cmatrix/share/man
[root@centos8 ~]#man cmatrix

范例3:centos8 编译安装 httpd-2.4.43

#安装前准备:关闭防火墙和SELinux
#1 安装包
[root@centos8 ~]#dnf install gcc make apr-devel apr-util-devel pcre-devel 
openssl-devel redhat-rpm-config

#2 下载并解压缩包
[root@centos8 ~]#tar xvf httpd-2.4.43.tar.bz2 -C /usr/local/src

#3 配置 
[root@centos8 ~]#cd /usr/local/src/httpd-2.4.43/
[root@centos8 httpd-2.4.43]#./configure --prefix=/apps/httpd24 -
sysconfdir=/etc/httpd24 --enable-ssl

#4 编译并安装
[root@centos8 httpd-2.4.43]#make -j 4 &&  make install

#5 配置环境
[root@centos8 ~]#echo 'PATH=/apps/httpd24/bin:$PATH' > /etc/profile.d/httpd24.sh
[root@centos8 ~]#. /etc/profile.d/httpd24.sh

#6运行
[root@centos8 ~]#apachectl

#7 指定用apache用户运行
[root@centos8 ~]#useradd -r -s /sbin/nologin -d /var/www -c Apache -u 48 apache
[root@centos8 ~]#vim /etc/httpd24/httpd.conf
user apache
group apache

#7生效和验证
[root@centos8 ~]#apachectl restart
#查看
[root@centos8 ~]#ps aux

6 Ubuntu软件管理 

 Debian软件包通常为预编译的二进制格式的扩展名“.deb”,类似rpm文件,因此安装快速,无需编译软 件。包文件包括特定功能或软件所必需的文件、元数据和指令

  • dpkg:package manager for Debian,类似于rpm, dpkg是基于Debian的系统的包管理器。可 以安装,删除和构建软件包,但无法自动下载和安装软件包或其依赖项
  • apt:Advanced Packaging Tool,功能强大的软件管理工具,甚至可升级整个Ubuntu的系统,基 于客户/服务器架构,类似于yum

6.1 APT工作原理

在服务器上先复制所有DEB包,然后用APT的分析工具genbasedir根据每个DEB 包的包Header 信息对所有的DEB包进行分析,并将该分析结果记录在文件夹base内的一个DEB 索引清单文件中,一 旦APT 服务器内的DEB有所变动,要使用genbasedir产生新的DEB索引清单。客户端在进行安装或升级 时先要查询DEB索引清单,从而获知所有具有依赖关系的软件包,并一同下载到客户端以便安装。当客 户端需要安装、升级或删除某个软件包时,客户端计算机取得DEB索引清单压缩文件后,会将其解压置 放于 /var/cache/apt/,而客户端使用apt-get install或apt-get upgrade命令的时候,就会将这个文件夹 内的数据和客户端计算机内的DEB数据库比对,知道哪些DEB已安装、未安装或是可以升级的

6.2 dpkg 包管理器

dpkg 常见用法:

#安装包
dpkg -i package.deb 

#删除包,不建议,不自动卸载依赖于它的包
dpkg -r package 

#删除包(包括配置文件)
dpkg -P package 

#列出当前已安装的包,类似rpm -qa
dpkg -l 

#显示该包的简要说明,类似rpm –qi
dpkg -l package 

#列出该包的状态,包括详细信息,类似rpm –qi
dpkg -s  package   
 
#列出该包中所包含的文件,类似rpm –ql 
dpkg -L package 

#搜索包含pattern的包,类似rpm –qf 
dpkg -S <pattern>   

#配置包,-a 使用,配置所有没有配置的软件包
dpkg --configure package   
 
#列出 deb 包的内容,类似rpm –qpl 
dpkg -c package.deb 

#解开 deb 包的内容
dpkg --unpack package.deb  

注意:一般建议不要使用dpkg卸载软件包。因为删除包时,其它依赖它的包不会卸载,并且可能无法再正常运行。

6.3 apt

apt 特有的命令:

#列出包含条件的包(已安装,可升级等)
apt list

编辑源列表
apt edit-sources    

APT包索引配置文件:

/etc/apt/sources.list
/etc/apt/sources.list.d

 可以修改上面文件为国内的安装源,提高速度:

参考链接:

ubuntu镜像_ubuntu下载地址_ubuntu安装教程-阿里巴巴开源镜像站 (aliyun.com)icon-default.png?t=N7T8https://developer.aliyun.com/mirror/ubuntu?spm=a2c6h.13651102.0.0.53322f70fghx56

 apt命令操作(如安装和删除软件包)日志文件:

/var/log/dpkg.log

范例:

#安装包:
apt install tree zip

#安装图形桌面
apt install ubuntu-desktop

#删除包: 
apt remove tree  zip
#说明:apt remove中添加--purge选项会删除包配置文件,谨慎使用

#更新包索引,相当于yum clean all;yum makecache
apt update  

#升级包:要升级系统,请首先更新软件包索引,再升级
apt upgrade

#apt列出仓库软件包,等于yum list
apt list

#搜索安装包
apt search nginx

#查看某个安装包的详细信息
apt show apache2 

#在线安装软件包
apt install apache2 

#卸载单个软件包但是保留配置⽂件
apt remove apache2 

#删除安装包并解决依赖关系
apt autoremove apache2 

#更新本地软件包列表索引,修改了apt仓库后必须执⾏
apt update 

#卸载单个软件包删除配置⽂件
apt purge apache2 

#升级所有已安装且可升级到新版本的软件包
apt upgrade

#升级整个系统,必要时可以移除旧软件包。
apt full-upgrade 

#编辑source源⽂件
apt edit-sources 

#查看仓库中软件包有哪些版本可以安装
apt-cache madison nginx

#安装软件包的时候指定安装具体的版本
apt install nginx=1.14.0-0ubuntu1.6
  • 11
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值