• linux 软件管理


    1、 软件运行环境
      1> 软件运行和编译
      ABI:Application Binary Interface(应用程序的二进制接口)
        Windows 与 Linux 不兼容
          ELF 对应于UNIX 下的文件
          PE 则是Windows 的可执行文件

        库级别的虚拟化:不兼容解决
          Linux:WINE(可以让 Windows 程序跑在 Linux 上)
          Windows:Cygwin(可以让 Linux 程序跑在 Windows)

      API:Application Programming Interface(应用程序开发接口)
        POSIX 表示可移植操作系统接口(Portable Operating System Interface ,缩写为 POSIX )

      程序源代码 → 预处理 → 编译 → 汇编 → 链接
        静态编译:.a
        动态编译:.so(动态库)

    # ldd /bin/cat    # 查看依赖的库

      2> 静态和动态链接
      链接主要作用是把各个模块之间相互引用的部分处理好,使得各个模块之间能够正确地衔接,分为静态链接和动态链接。
        静态链接:
        ➢把程序对应的依赖库复制一份到包
        ➢libxxx.a
        ➢嵌入程序包
        ➢升级难,需重新编译
        ➢占用较多空间,迁移容易

        动态链接:
        ➢只把依赖加做一个动态链接
        ➢libxxx.so
        ➢连接指向
        ➢占用较少空间,升级方便

      C 语言运行:

      

      Java 程序运行:

      

      3> 开发语言
        系统级开发:C、C++
        应用级开发:java、python、go、php、Perl、delphi、ruby

    2、 软件包基础
      1> 包和包管理器
      最初只有 .tar.gz 的打包的源码文件,用户必须编译每个他想在 GNU/Linux 上运行的软件。用户们急需系统提供一种方法来管理这些安装在机器上的软件,当 Debian 诞生时,这样一个管理工具也就应运而生,它被命名为 dpkg。从而著名的"package" 概念第一次出现在 GNU/Linux 系统中,稍后 Red Hat 才开发自己的"rpm" 包管理系统。

      包的组成:
        二进制文件、库文件、配置文件、帮助文件

      程序包管理器:
        debian:deb 文件,dpkg 包管理器
        redhat:rpm 文件,rpm 包管理器
        rpm:Redhat Package Manager

      2> 包命名
      源代码:[name]-[version].tar.[gz|bz2|xz]
        version:major.minor.release(主要.次要.版本)

      rpm 包命名方式:
        [name]-[version]-release.arch.rpm

    例:bash-4.2.46-19.e17.x86_64.rpm    # 包名、版本号(开发)、版本信息(开发次数、基于什么发布、基于什么架构)
    version:major.minor.release(主要.次要.版本)
    release:erlease.OS

      常见的 arch(开发版):
        X86:i386,i486,i586,i686
        X86_64:x64,x86_64,amd64

      跟平台无关:noarch

    [root@centos7 Packages]# ls | sed -r 's/.*.(.*..*$)/1/' | sort | uniq -c    # 统计 i6886、noarch、x86_64rpm 包分别的个数
    808 i686.rpm
    937 noarch.rpm
    1 TRANS.TBL
    2250 x86_64.rpm

      包:分类和拆包(包比较大就会拆包,拆成好几个小包)

    Application-version-arch.rpm       # 主包
    Application-devel-version-arch.rpm # 开发子包
    Application-utils-version-arch.rpm # 它子包
    Application-libs-version-arch.rpm  # 其它子包

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

      解决依赖包管理工具:
        yum : rpm 包管理器的前端工具
        zypper : suse 上的 rpm 前端管理工具
        dnf : Fedora 18+ rpm 包管理器前端管理工具 最新版

      3> 库文件
      查看二进制程序所依赖的库文件

    # ldd /PATH/TO/BINARY FILE     # 例: ldd /bin/cat

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

    # ldconfig        # 加载配置文件中指定的库文件
    /sbin/ldconfig -p # 显示本机已经缓存的所有可用库文件名及文件路径映射关系
    # 配置文件: /etc/ld.so.conf, /etc/ld.so.conf.d/*.conf
    # 缓存文件: /etc/ld.so.cache

    3、 rpm 包管理
      1> 包管理器:
      程序包管理器:
      功能:将编译好的应用程序的各组成文件打包一个或几个程序包文件,从而方便快捷地实现程序包的安装、卸载、查询、升级和校验等管理操作。
      包文件组成(每个包独有):
        RPM 包内的文件
        RPM 的元数据,如名称,版本,依赖性,描述等
        安装或卸载时运行的脚本(自动创建系统用户等)

      数据库(公共):/var/lib/rpm    # Windows 下载安装需要改注册表,Linux 是数据库。
        程序包名称及版本
        依赖关系
        功能说明
        包安装后生成的各文件路径及校验码信息

      2> 程序包的来源
      管理程序包的方式:
        使用包管理器: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:epel 源
          Extra Packages for Enterprise Linux
        Rpmforge:RHEL 推荐,包很全
        搜索引擎:
          http://pkgs.org
          http://rpmfind.net
          http://rpm.pbone.net
          https://sourceforge.net/

      (4) 自己制作
        注意:第三方包建议要检查其合法性:来源合法性,程序包的完整性

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

    rpm {-i|--install} [install-options] PACKAGE_FILE
      -v:verbose     # 显示安装过程
      -v v
      -h:以#显示程序包管理执行进度
    
    rpm
    -q mariadb(例) # 查询是否安装 rpm -e * # 卸载 rpm -ql tree # -ql 显示 tree 软件包的文件列表 rpm -qi tree # 查看版本信息(描述信息) 注意:如果 tree 的文件列表中间有文件被删了,重新安装安装不了可以使用--replacepkgs 选项覆盖安装,也可以使用 cpio 把包解开 rpm2cpio /misc/cd/Packages/tree-1.6.0-10.el7.x86_64.rpm | cpio -tv rpm2cpio /misc/cd/Packages/tree-1.6.0-10.el7.x86_64.rpm | cpio - idv ./usr/bin/tree rpm -ivh PACKAGE_FILE…
    [
    install-options] --test # 测试安装,但不真正执行安装,即 dry run 模式 --nodeps # 忽略依赖关系 --replacepkgs | replacefiles # 覆盖安装 | 覆盖有冲突的文件 --nosignature # 不检查来源合法性 --nodigest # 不检查包完整性 --noscripts # 不执行程序包脚本   %per:安装前脚本 --nopre   %post:安装后脚本 --nopost   %preun:卸载前脚本 --nopreun   %postun:卸载后脚本 --nopostun rpm -q --scripts [包名] # 查询已经安装的程序的脚本,加-p 查询没安装的程序的脚本

      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…
    --lodpackage:降级
    --force:强制安装
    同一包名不同版本共存:要放在不同文件夹里(rpm -ql * 查询文件列表)

      包查询:

    rpm {-q|--query} [select-options] [query-options]
    [select-options]
    -a:所有包 # -qa 查询已安装的所有包,支持通配符搜索包名(模糊查询),利用管道符使用正则查询。
    -f:查看指定的文件由那个程序包安装完成
    -p rpmfile:针对尚未安装的程序包文件做查询操作
    --whatprovides CAPABILITY:查询指定的 CAPABILITY(能力)由那个包所提供
    --whatrequires CAPABILITY:查询指定的 CAPABILITY(能力)被那个包所依赖
    
    rpm2cpio 包文件
    |cpio -itv # 预览包内文件 rpm2cpio 包文件|cpio -id "*.conf" # 释放包内文件
    [query
    -options] --changelog:查询 rpm 包的 changelog -c:查询程序的配置文件 -d:查询程序的文档 -i:information # 查询版本信息 -l:查看指定的查询包安装后生成的所有文件 --scripts:程序包自带的脚本 --provides:列出指定程序包所提供的 CAPABILITY(能力) -R:查询指定的程序包所依赖的 CAPABILITY(能力)
    常用查询用法:
    -qi # 查看版本信息,描述信息
    -qf # 查看指定的文件由那个程序包安装完成
    -qc # 查询程序的配置文件
    -ql # 查看指定的查询包安装后生成的所有文件
    -qd # 查询程序的文档
    -qpi # 查询尚未安装的程序包文件版本信息
    -qpl # 查询尚未安装的程序包文件的所有文件
    -qa # 查询已安装的所有包

      包卸载:

    rpm {-e|--erase} [--allmatches] [--nodeps] [--noscripts] [--notriggers] [--test] PACKAGE_NAME…
    

      包校验:

    rpm {-V|--verify} [select-options] [query-options]
    rpm -V [包名]    # 校验属性、内容是否改变
    S     # file size differs
    M Mode differs(includes permissions and file type)
    5 digest(formerly MD5 sum)differs    # MD5
    D Device major/minor number mismatch
    L readLink(2) path mismatch
    U User ownership differ    # 所有者
    G Group ownership differs
    T mTime differs    # 时间
    P capabilities differ
    包来源的合法性验证及完整性验证 完整性验证: SHA256 来源合法性验证: RSA
    公钥加密 对称加密:加密、解密使用同一密钥 非对称加密:密钥是成对儿的 public key:公钥,公开所有人 secret key:私钥,不能公开 导入所需要公钥 rpm
    -K|checksig rpmfile # 检查包的完整性和签名 rpm --import /misc/cd/RPM-GPG-KEY-CentOS-7 # 光盘 rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 # 硬盘 CentOS 7 发行版光盘提供: RPM-GPG-KEY-CentOS-7 rpm -qa "gpg-pubkey*"

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

    4、 yum 管理
      1> centos:yum、dnf
        yum:rpm 的前端程序,可解决软件包相关依赖性,可在多个库之间定位软件包,up2date 的替代工具
        yum repository:yum repo(仓库),存储了众多 rpm 包,以及包的相关的元数据(meta data)文件(放置于特定目录 repodata 下)
        文件服务器(共享):

    http://     # 走网络
    https://    # 走网络
    ftp://      # 走网络
    file://     # 走本地

      基于 C/S 架构(client/Server)搭建 yum server(rpm 仓库(rpm 文件如:packages、元数据))共享服务器;yum client(设置配置文件:/etc/repos.d/*.repo 写清共享服务器路径)

      

      yum 安装软件 → 配置文件 → 找到网络 yum repo 仓库,查找 rpm 仓库文件、元数据,看是否有要下载的软件包,查看是否依赖性 → 将元数据下载到缓冲区 → 连到服务器
      下载包(下载的包安装后默认删除、元数据不删)

      yum 客户端配置文件:

    /etc/yum.conf              # 为所有仓库提供公共配置
    /etc/yum.repos.d/*.repo    # 为仓库的指向提供配置

      仓库指向的定义:

    [repositoryID]
    name=Some name for this repository
    baseurl=url://path/to/repository/
    enable={1|0}
    gpgcheck={1|0}
    gpgkey=URL
    enablegroups={1|0}     # 一般默认启用不用写
    failovermethod={roundrobin | priority} # 设置多个地址的优先级
      roundrobin:意为随机挑选,默认值
      priority:按顺序访问
    cost=默认为 1000
    # 例子:
    # vim /etc/yum.repo.d/CentOS-Base.repo
    [base]     # 名字
    name=CentOS-$releasever – Base     # 描述信息
    mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os&infra=$infra //仓库信息路径
    #baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/    # CPU 架构/os/版本
    gpgcheck=1     # 检查包
    gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7     # 秘钥

      yum 仓库:
      yum 的 repo 配置文件中的用的变量:
      $releasever:当前 OS 的发行版的主版本号
      $arch:平台,i386 i486 i586 x86_64
      $basearch:基础平台;i386 x86_64
      $YUM0-$YUM9:自定义变量
      示例:

    http://server/centos/$releasever/$basearch/
    http://server/centos/7/x86_64
    http://server/centos/6/i386

      yum 源:

    阿里云 repo 文件:
      http://mirrors.aliyun.com/repo/
    CentOS 系统的 yum 源:
      阿里云: https://mirrors.aliyun.com/centos/$releasever/os/x86_64/
      清华:https://mirrors.tuna.tsinghua.edu.cn/centos/$releasever/os/x86_64/
    EPEL 的 yum 源:
      阿里云: https://mirrors.aliyun.com/epel/$releasever/x86_64
    
    阿里巴巴开源软件:   https://opsx.alibaba.com/
    yum-config-manager:生成 repo 配置文件   生成 172.16.0.1_cobbler_ks_mirror_CentOS-X-x86_64_.repo   yum-config-manager --add-repo=http://172.16.0.1/cobbler/ks_mirror/7/   yum-config-manager --disable "仓库名”禁用仓库   yum-config-manager --enable "仓库名”启用仓库

      2> 配置本地 yum 源和网络 yum 源
      本地 yum 源(光盘)
      将 /etc/yum.repo.d/ 下的文件,移动到 /etc/yum.repo.d/repo.bak/ 文件夹;创建本地 yum 文件

    # vim /etc/yum.repo.d/base.repo                 # 建立本地 yum 源
    [base]
    # 配置本地光盘 yum 仓库
    name=cdrom base
    baseurl=file:///misc/cd                         # 光盘挂载路径
    https://mirrors.aliyun.com/centos/7/os/x86_64/  # 可以写多个路径
    # 不检查软件包安全性(光盘里的安全)
    gpgcheck=0

      配置 epel 源

    [epel]
    name=aliyun epel
    baseurl=https://mirrors.aliyun.com/epel/$releasever/$basearch/
    gpgcheck=0
    enabled=1

      yum repolist     # 列出所有 repo 仓库信息
      元数据下载路径:var/cache/yum/$basearch/$releasever
      yum clean all   # 清除 yum 源
      yum 源配置容易出现的问题:配置文件格式问题、缓存问题

      3> yum 命令

    -y 自动回答“yes”
    -q 静默模式
    --nogpgcheck 不检查
    yum repolist [all]   # 显示启用的仓库列表[显示全部]
    yum list [all | available | installed | updates] //列出程序包(管道)[全部 | 可用的 | 已经装好的 | ]
    createrepo 目录       # 创建 yum 仓库(网络上拉的包使用 yum 安装要创建仓库,元数据 repodada 所在的目录就是*.repo 中的 URL 路径)
    yum install          # 安装软件包
    yum reinstall        # 重新安装
    yum update           # 升级软件包
    yum downgrade        # 降级
    yum check-update     # 检查可用升级
    yum remove           # 卸载(卸载默认不卸载依赖包)
    yum history          # yum 安装的历史
    yum history info ID  # 查看 yum 安装历史中的 ID 看具体安装
    yum history undo ID  # 取消这条安装命令
    yum history redo ID  # 重新装一遍,卸载错了的情况下
    yum info             # 查看程序包
    yum provides         # 查看指定特性(可以是文件)是由哪个程序包所提供
    yum clean all        # 清除本地缓存
    yum makecache        # 构建缓存
    yum search           # 以指定的关键字搜索程序包名及 summary 信息
    yum deplist          # 查看指定包所依赖的文件 capabilities
    
    # 包组的相关命令:yum 中将不同的包分到不同的组里 yum groupinstall group1… yum groupupdate group1… yum grouplist yum groupremove group1… yum groupinfo group1…
    # 日志:
    /var/log/yum.log

    5、 搭建企业内部的 yum 源
      解决:安装的 yum 仓库里的必要文件(各种 rpm 包、yum 仓库)、共享:http 等

      1> 关闭 selinux(/etc/selinux/config 配置文件)

      2> 关闭防火墙并设置开机不启动:

    # systemctl stop firewalld;systemctl disable firewalld   # centos7
    # service iptables stop;chkconfig iptables off           # centos6

      3> 安装 httpd 服务并启动

    # yum install httpd -y
    # systemctl start httpd
    # systemctl enable httpd

      4> 建立文件目录结构

    # cd /var/www/html
    # mkdir -p centos/{6,7}/os/x86_64
    tree
    .
    └── centos
    ├── 6
    │ └── os
    │ └── x86_64
    └── 7
    └── os
    └── x86_64

      5> 添加 centos6 光盘,本机有 centos7 的光盘(实现 centos6/7 的基于 http 协议的 yum 源)

    # echo '- - -' > /sys/class/scsi_host/host2/scan    # 列出所有可用块设备的信息

      6> 分别将对应的光盘文件挂载到对应的目录下

    # mount /dev/sr0 centos/7/os/x86_64/
    # mount /dev/sr1 centos/6/os/x86_64/

      工作中把 so 文件拷到光盘上,将 so 文件的路径挂载至目录

      7> 客户端配置 yum 源路径

    baseurl=http://192.168.100.101/centos/$releasever/os/$basearch/
    
    也可设置 mirrorlist=http://192.168.100.101/yum.txt(建立/var/www/html/yum.txt 文件) cat yum.txt(可以写多个路径) http://192.168.1.7/centos/6/os/x86_64/ # 自己搭建的 yum 源 https://mirrors.aliyun.com/centos/6/os/x86_64/ # 阿里源

    6、 dnf 管理
      dnf 介绍:新一代的 rpm 软件包管理器。dnf 发行日期是 2015 年 5 月 11 日,dnf 包管理器采用 Python 编写,发行许可为 GPL v2,首先出现在 Fedora 18 发行版中。在 RHEL 8.0版本正式取代了 yum , dnf 包管理器克服了 yum 包管理器的一些瓶颈,提升了包括用户体验、内存占用、依赖分析、运行速度等。

      安装所需软件包,依赖 epel 源:

    # wget http://springdale.math.ias.edu/data/puias/unsupported/7/x86_64/dnf-conf-0.6.4-2.sdl7.noarch.rpm
    # wget http://springdale.math.ias.edu/data/puias/unsupported/7/x86_64//dnf-0.6.4-2.sdl7.noarch.rpm
    # wget http://springdale.math.ias.edu/data/puias/unsupported/7/x86_64/ python-dnf-0.6.4-2.sdl7.noarch.rpm
    # yum install python-dnf-0.6.4-2.sdl7.noarch.rpm dnf-0.6.4-2.sdl7.noarch.rpm dnf-conf-0.6.4-2.sdl7.noarch.rpm python2-libcomps-0.1.8-3.el7.x86_64.rpm libcomps-0.1.8-3.el7.x86_64.rpm

      配置文件: /etc/dnf/dnf.conf
      仓库文件: /etc/yum.repos.d/ *.repo
      日志: /var/log/dnf.rpm.log
      dnf 的用法跟 yum 一致

    7、 编译安装
      1> 程序包编译安装:
      Application-version-release.src.rpm --> 安装后,使用 rpmbuild 命令制作成二进制格式的 rpm 包,而后再安装
      源代码 --> 预处理 --> 编译 --> 汇编 --> 链接 --> 执行

      源代码组织格式:
        多文件:文件中的代码之间,很可能存在跨文件依赖关系
        c、c++:make 项目管理器
          configure 脚本 --> Makefile.in --> Makefile
        java:maven

      2> 编译安装:
      (1)./configure
        通过选项传递参数,指定启用特性、安装路径等;执行时会参考用户的指定以及 Makefile.in 文件生成的 Makefile;
        检查依赖到的外部环境,如依赖的软件包

      (2)make 根据 Makefile 文件,构建应用程序

    # make -j [cpu 核数]    # 并行编译

      (3)make install 复制文件到相应路径

      开发工具:
        autoconf:生成 configure 脚本
        automake:生成 Makefile.in

      注意:安装前查看 INSTALL,README

      3> 源代码:
      官方自建站点:
        apache.org(ASF:Apache Software Foundation)
        mariadb.org
        …
        代码托管:
        SourceForge.net
        Github.com
        code.google.com

      c/c++编译器:gcc(GNU C Complier)

      4> tree 的编译安装

    1.下载 tree 的 tar 包后进行解压缩
    2.有 Makefile 文件所以不用 ./configure
    3.进入文件修改 prefix = /apps/tree(安装路径)
    4.make
    5.make install
    6.在/etc/profile.d/env.sh → 定义 PATH=/apps/tree/bin:$PATH(定义到环境变量中)

      5> httpd 的编译安装

    1.解压缩 httpd-2.4.25.tar 包
    # tar -xvf httpd-2.4.25.tar
    2.进入 httpd-2.4.25 目录,ls 查看文件 README(软件介绍)、INSTALL(怎么安装) #首先安装依赖包(可以先./configure 根据提示信息先 yum search 搜索包名,再使用 yum install 安装) # yum install gcc apr-devel apr-util-devel pcre-devel openssl-devel -y
    # .
    /configure --help # 查看选项信息 # 自定义:安装目录、配置文件目录、启用加密、启用共享库 ./configure --prefix=/apps/httpd24 --sysconfdir=/etc/httpd --enable-ssl --enable-so
    3.make;make install
    4.PREFIX/bin/apachectl start 启动服务 # /apps/httpd24/bin/apachectl start
    # 加入环境变量:
    vim
    /etc/profile.d/env.sh PATH=/apps/httpd24/bin:/apps/tree/bin:$PATH apachectl start # 启动
    5.将 /apps/httpd24/bin/apachectl start 路径添加到/etc/rc.d/rc.local 中,给该文件加执行权限,实现开机自启动。
    6.网页存放在/apps/httpd24/htdocs/index.html

      6> 实 现 编 写 脚 本 /apps/httpd24/htdocs/test.sh , 在 任 意 一 台 机 器 上 通 过 curl http://192.168.1.9/test.sh | bash 一键安装服务

    8、 Ubuntu 软件管理
      Debian 软件包通常为预编译的二进制格式的扩展名 ".deb",类似 rpm 文件,因此安装快速,无需编译软件。包文件包括特定功能或软件所必需的文件、元数据和指令。
      dpkg:package manager for Debian,类似于 rpm,dpkg 是基于 Debian 的系统的包管理器。可以安装,删除和构建软件包,但无法自动下载和安装软件包或其依赖项。
      APT:Advanced Packaging Tool,功能强大的软件管理工具,甚至可升级整个 Ubuntu 的系统,基于客户/服务器架构。

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

      dpkg 常见用法:man dpkg

    dpkg -i package.deb       # 安装包
    dpkg -r package           # 删除包,不建议,不自动卸载依赖于它的包
    dpkg -P package           # 删除包(包括配置文件)
    dpkg -l                   # 列出当前已安装的包,类似 rpm -qa
    dpkg -L package           # 列出该包中所包含的文件,类似 rpm -ql
    dpkg -S <pattern>         # 搜索包含 pattern 的包,类似 rpm -qf
    dpkg -S package           # 列出该包的状态,包括详细信息,类似 rpm -qi
    dpkg --configure package  # 配置包,-a 使用,配置所有没有配置的软件包
    dpkg -C package.deb       # 列出 deb 包的内容,类似 rpm -qpl
    dpkg --unpack package.deb # 解开 deb 包的内容
    
    # dpkg 示例: # 列出系统上安装的所有软件包 dpkg
    -l
    # 列出软件包安装的文件 dpkg
    -L bash
    # 查看
    /bin/bash 来自于哪个软件包 dpkg -S /bin/bash
    # 安装本地的.deb 文件 dpkg
    -i /mnt/cdrom/pool/main/z/zip/zip_ 3.0-11build1 _amd64.deb
    # 卸载软件包 dpkg
    -r zip

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

      APT 常用方法:apt help

    apt 与 apt-get 命令对比:
    apt命令            被取代的命令            命令的功能
    apt install       apt-get install        安装软件包
    apt remove        apt-get remove         移除软件包
    apt purge         apt-get purge          移除软件包及配置文件
    apt update        apt-get update         刷新存储库索引
    apt upgrade       apt-get upgrade        升级所有可升级的软件包
    apt autoremove    apt-get autoremove     自动删除不需要的包
    apt full-upgrade  apt-get dist-upgrade   在升级软件包时自动处理依赖关系
    apt search        apt-cache search       搜索应用程序
    apt show          apt-cache show         显示安装细节

    apt 特有的命令:
    apt list # 列出包含条件的包(已安装,可升级等)
    apt edit-sources # 编辑源列表

      apt 包索引来自 /etc/apt/sources.list 文件和 /etc/apt/sources.list.d 目录中定义的存储库的可用包的数据库。要使用存储库中所做的最新更改来更新本地程序包索引。
      apt 命令操作(如安装和删除软件包)记录在 /var/log/dpkg.log 日志文件中。

      apt 示例:

    # 安装包:
    apt install tree zip
    
    # 删除包: apt remove tree
    zip 说明:apt remove 中添加 --purge 选项会删除包的配置文件,谨慎使用
    # 更新包索引: apt update
    # 升级包:要升级系统,请首先更新软件包索引,再升级 apt upgrade
  • 相关阅读:
    keras_12_keras自带的Applications
    keras_11_keras中示例数据集
    keras_10_回调函数 Callbacks
    Runloop
    SDWebImage
    NSOperation
    单例模式
    GCD
    一文读懂汉明码
    聊聊SPOOLing技术
  • 原文地址:https://www.cnblogs.com/zyybky/p/12790407.html
Copyright © 2020-2023  润新知