linux 软件管理

Posted 我听过

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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

 

以上是关于linux 软件管理的主要内容,如果未能解决你的问题,请参考以下文章

Linux软件包管理

vs code初体验

linux基础入门之管理linux软件

Linux学习:软件包管理+常用命令

Linux系统红帽软件包管理器(RPM)

linux软件包管理