安装软件

章节目录:

    • 一、软件包管理基础
    • 二、基于 Debian 的系统
      • 2.1 使用 apt 管理软件包
      • 2.2 使用 apt 安装软件包
      • 2.3 使用 apt 升级软件
      • 2.4 使用 apt 卸载软件包
      • 2.5 apt 仓库
    • 三、基于 Red Hat 的系统
      • 3.1 列出已安装的软件包
      • 3.2 使用 dnf 安装软件
      • 3.3 使用 dnf 升级软件
      • 3.4 使用 dnf 卸载软件
      • 3.5 处理损坏的依赖关系
      • 3.6 RPM 仓库
    • 四、使用容器管理软件
      • 4.1 使用 snap 容器
      • 4.2 使用 flatpak 容器
    • 五、从源代码安装
    • 六、结束语

一、软件包管理基础

各种主流的 Linux 发行版都采用了某种形式的软件包管理系统来控制软件和库的安装。

  • 软件包管理系统使用数据库来记录下列内容

    • Linux 系统中已安装的软件包。
    • 每个软件包安装了哪些文件。
    • 每个已安装的软件包的版本。
  • 软件包存储在称为仓库repository )的服务器上,可以利用本地 Linux 系统中的软件包管理器通过 Internet 访问,在其中搜索新的软件包,或是更新系统中已安装的软件包

  • 软件包通常存在依赖关系,为了能够正常运行,被依赖的包必须提前安装

  • 软件包管理器会检测这些依赖关系并提前安装好所有额外的软件包

  • 软件包管理器的不足之处在于目前没有统一的标准工具

  • Linux 中广泛使用的两种主要的软件包管理系统工具是 dpkgrpm

  • 基于 Debian 的发行版( 比如 Ubuntu 和 Linux Mint )使用的是 dpkg 命令。

  • 基于 Red Hat 的发行版( 比如 Fedora、CentOS 和 openSUSE )使用的是 rpm 命令。

二、基于 Debian 的系统

dpkg 命令是基于 Debian 的软件包管理器的核心,用于在 Linux 系统中安装、更新、删除 DEB 包文件。

  • 通常情况下,从 Linux 发行仓库中安装软件包。为此,需要使用 APTadvanced package tool工具集
    • apt-cache
    • apt-get
    • apt
  • apt 命令本质上是 apt-cache 命令和 apt-get 命令的前端。
  • apt 命令基本格式:apt [ options ] command

  • aptdpkg 区别
    • aptdpkg 均为 Ubuntu 下面的包管理工具
    • dpkg 侧重于本地软件的管理。
    • apt 基于dpkg,侧重于远程包的下载和依赖管理,相当于 dpkg前端

2.1 使用 apt 管理软件包

  • 列出所有已安装的包:apt list --installed
  • 列出所有已安装的包的版本信息apt list --all-versions
  • 显示软件包具体信息( 例如:版本号,安装大小,依赖关系等等 ):sudo apt show package_name
  • 得到特定软件包相关的所有文件dpkg -L package_name
  • 也可以执行相反的操作,找出特定的文件属于哪个包dpkg --search < absolute_file_name >

2.2 使用 apt 安装软件包

  • 查找软件包命令: sudo apt search package_name
  • 只想搜索软件包名称sudo apt --names-only search package_name
  • 安装指定的软件命令:sudo apt install package_name
  • 安装多个软件包:sudo apt install package_1 package_2 package_3
  • 注意事项
    • sudo 命令允许以 root 用户身份执行命令。像安装软件这类管理任务都需要使用 sudo 命令帮助完成。
    • 在安装指定的软件包时,apt 也会要求安装其他软件包。这是因为 apt自动解析必要的依赖关系,根据需要安装额外的库和软件包。

2.3 使用 apt 升级软件

  • 列出所有可更新的软件清单命令:sudo apt update
  • 更新指定的软件命令:sudo apt update package_name
  • 升级软件包:sudo apt upgrade
  • 列出可更新的软件包及版本信息apt list --upgradeable
  • upgrade 命令在升级过程中不会删除任何软件包。如果必须删除某个软件包才能完成升级则可以使用:sudo apt full-upgrade
  • 注意事项
    • upgrade 命令可以使用仓库中的任何新版本安全地升级系统中所有的软件包
    • upgrade 命令无须使用任何软件包名称作为参数
    • 应该定期执行 sudo apt upgrade ,保持系统处于最新状态( 很多安全补丁和更新通常是在完整的发行版发布之后提供的 )。

2.4 使用 apt 卸载软件包

  • 删除软件包命令( 同时保留数据和配置文件 ):sudo apt remove package_name
  • 如果要将软件包以及相关的数据和配置文件全部删除sudo apt purge package_name
  • 清理不再使用的依赖和库文件: sudo apt autoremove
  • autoremove 命令会检查所有被标记为存在依赖关系且不再被需要的软件包。

2.5 apt 仓库

apt 默认的软件存储库位置是在安装 Linux 发行版时设置的。仓库位置保存在文件 /etc/apt/sources.list 中。

  • 大多数情况下,用不着添加 / 删除软件仓库,所以也就无须修改此文件
  • apt 只会从这些仓库中拉取软件。此外,在搜索要安装或更新的软件时,apt只检查这些仓库。
  • 如果想要为软件包管理系统加入一些额外的软件仓库,那就得修改文件了。

三、基于 Red Hat 的系统

和基于 Debian 的发行版类似,基于 Red Hat 的系统有以下几种前端工具。

  • yum :用于 Red Hat、CentOS 和 Fedora。
  • zypper :用于 openSUSE。
  • dnfyum升级版,有一些新增的特性。
  • 上述前端全部基于命令行工具 rpm

以下是关于 rpmyum 以及 dnf介绍

  1. rpm
  • 为了解决在安装、升级、卸载服务程序时还要考虑到其他程序、库的依赖关系rpm 机制应运而生。
  • 但是 rpm 机制也只能帮助运维人员查询缺少的依赖关系,安装还是需要自己来进行。这是 yum 软件仓库就来了。

  1. yum
  • 底层为 rpm 包,搭建的一套基于 rpm 包的 yum 软件仓库。即 yum 方式下载的包都是 rpm 包。
  • yum好处在于在下载指定的 rpm 包时,会在自己的 yum 软件仓库中自动寻找其所有依赖包,并进行统一安装,节省了运维人员的时间。
  • yum 软件仓库,可以是基于官方的、也可以是基于第三方的,还可以是自己搭建的。

  1. dnf
  • yum 机制如此优秀的情况下,仍然存在一些问题,如分析不准确占用内存量大,不能多人同时安装软件等硬伤
  • 因此在随着 Fedora 22 系统的发布,Red Hat 又给了我们一个新的选择— dnf ,即 dnf 实际上就是 yum升级版,也称为 yum v4 版本。
  • 且在使用上面, dnf 也是和 yum 命令方式一样,都是同样的使用方式,只需把 yum 换为 dnf 即可。

3.1 列出已安装的软件包

  • 找出系统中已安装的软件包:dnf list installed
  • 将已安装软件的列表重定向到一个文件中,可以使用:dnf list installed > file_name
  • 找出文件系统中的某个文件是由哪个软件包安装的dnf provides file_name

3.2 使用 dnf 安装软件

  • 安装软件包sudo dnf install package_name

3.3 使用 dnf 升级软件

  • 查看已安装软件包的所有可用更新( 没输出,则说明没什么可升级的。):dnf list upgrades
  • 升级某个软件包:dnf upgrade package_name
  • 升级更新列表中的所有软件包:dnf upgrade
  • 将软件包升级至最新的 bug 修复版或安全补丁版( 不是最新的最高版本!):dnf upgrade-minimal

3.4 使用 dnf 卸载软件

  • 卸载软件dnf remove package_name

3.5 处理损坏的依赖关系

有时在安装多个软件包时,一个软件包的依赖关系可能会被另一个软件包搞乱。这称为依赖关系损坏broken dependency )。

  1. 如果系统出现了这种情况,可以先尝试命令:dnf clean all
  2. 然后再使用dnf upgrade
  3. 上述操作可以清理放错位置的文件,但如果还解决不了问题可以试试 ( 显示指定软件包的所有依赖关系以及哪些软件包提供了这种依赖,知道需要哪个库就可以自行安装了。):dnf repoquery --deplist package_name
  • 注意事项
    • yum 工具的 upgrade 命令支持 --skip-broken 选项,可以跳过依赖关系损坏的软件包,同时仍尝试继续升级其他包。
    • dnf 工具则自动执行该操作。

3.6 RPM 仓库

就像 apt 系统一样,dnf 在安装时也设置了软件仓库

  • 查看拉取软件的仓库dnf repolist
  • 如果发现其中没有所需的仓库可以编辑配置文件,其中有两个地方可以找到 dnf 仓库的定义:
    • 配置文件 /etc/dnf/dnf.conf
    • /etc/yum.repos.d 目录中的单独文件

四、使用容器管理软件

软件包管理系统不止一种,彼此之间呈竞争关系。每个应用程序都依赖于某种库函数才能正常运行。除此之外,还需考虑库文件的版本。而应用程序容器application container )创建了一个环境,其中包含了应用程序运行所需的全部文件,包括运行时库文件。可以将程序容器作为单个软件包开发,保证能够在任何 Linux 系统中正常运行。其中又有两个比较流行的标准snapflatpak

4.1 使用 snap 容器

Ubuntu Linux 发行版的创建者开发了一种称为 snap 的应用程序容器格式。它会将应用程序所需的所有文件集中到单个 snap 分发文件中。

  • 检查 snap 是否正在运行snap version

  • 查看已安装的 snap 应用程序列表snap list

  • snap 仓库中搜索指定程序snap find package_name

  • 查看 snap 应用程序的详细信息snap info package_name

  • 安装新的 snapsudo snap install package_name

  • 删除某个 snapsudo snap remove package_name

  • 也可以通过禁用来代替删除sudo snap disable package_name

  • 恢复禁用sudo snap enable package_name

4.2 使用 flatpak 容器

flatpak 应用程序容器格式是作为一个独立的开源项目创建的,与任何特定的 Linux 发行版都没有直接关系。如果你的 Linux 发行版支持 flatpak ,则可以使用以下命令。

  • 列出已安装的应用程序容器:flatpak list
  • 搜索指定应用程序:flatpak search package_name
  • 安装应用程序:sudo flatpak install package_name
  • 检查安装是否正确,可以再次使用:flatpak list
  • 删除应用程序容器:sudo flatpak uninstall package_name
  • 应用程序容器的用法和软件包管理系统类似,但背后的原理完全不同。不过,殊途同归,安装在 Linux 系统中的应用程序能够轻松地进行维护和升级。

五、从源代码安装

如果经常在开源软件环境中工作,就很有可能会遇到打包成 tarball 形式的软件。

  1. 解压软件包:tar -Jxvf package_name.tar.xz

  2. 使用 cd 命令进入新的软件目录

  3. 运行 configure 工具( 检查你的 Linux 确保拥有合适的能够编译源代码的编译器,以及正确的库依赖关系。):./configure

  4. 下一步,使用 make 命令构建二进制文件make

  5. make 命令结束后,可运行的程序就出现在目录中了。但从这个目录运行程序有点不方便。可以执行 install 选项将其安装在常用位置sudo make install

六、结束语


“-------怕什么真理无穷,进一寸有一寸的欢喜。”

微信公众号搜索:饺子泡牛奶

你可能感兴趣的:(Linux,linux,ubuntu,debian)