[TOC]
# Linux软件安装方法介绍
在最开始介绍`Linux发行版`分类时曾提到过是按照软件包打包格式分为如下三大类:
- `Debian`系列: 软件包后缀格式为`.deb`,软件包管理命令为`apt`。
- `Red Hat`系列: 软件包后缀格式为`.rpm`, 软件包管理命令为`yum`、`dnf`、`zypper`。
- `Pacman`系列: 软件包后缀格式为`.pkg.tar.zst`, 软件包管理命令为`pacman`。
## apt包管理器用法
APT高级打包工具(英语:Advanced Packaging Tools,缩写为APT)是`Debian`及其派生的Linux软件包管理器。APT可以自动下载,配置,安装二进制或者源代码格式的软件包,因此简化了Unix系统上管理软件的过程。APT最早被设计成dpkg的前端,用来处理deb格式的软件包。现在经过APT-RPM组织修改,APT已经可以安装在支持RPM的系统管理RPM包。
- 安装软件 : `apt install <package>`
- 删除软件 : `apt remove <package>`
- 查找软件 : `apt search <package-name>`
- 更新软件 : `apt update`
- 软件源配置文件: `/etc/apt/sources.list.d/*.list` 自定义软件源配置文件
- 更新软件源缓存: `apt update`
- 清理软件源缓存: 无
## yum包管理器用法
Yum(Yellowdog Updater, Modified),是由Duke University团队修改Yellow Dog Linux的Yellow Dog Updater开发而成,是一个基于RPM包管理的字符前端软件包管理器。能够从指定的服务器自动下载RPM包并且安装,可以处理依赖性关系,并且一次安装所有依赖的软件包,无须繁琐地一次次下载、安装。被Yellow Dog Linux本身,以及Fedora、Red Hat Enterprise Linux采用。
- 安装软件 : `yum install <package>`
- 删除软件 : `yum remove <package>`
- 查找软件 : `yum search <package-name>`
- 更新软件 : `yum update`
- 软件源配置文件: `/etc/yum.repos.d/*.repo` 自定义软件源配置文件
- 更新软件源缓存: `yum makecache`
- 清理软件源缓存: `yum clean all`
## DNF包管理器(yum的下一代替代版)
DNF,全称Dandified Yum,是RPM发行版的软件包管理器Yellowdog Updater, Modified(yum)的下一代版本。DNF最早出现在Fedora 18中,并在Fedora 22、RHEL8中替代`yum`。DNF旨在解决部分yum已知的不足之处,包括糟糕的性能、高内存使用、缓慢的迭代拓扑排序。
简单说下`DNF`替代了`Yum`的主要原因:
- 庞大而复杂的内部代码集,这也是任何一款软件产品发展到一定阶段常常要面临的难题,有时候重新实现某一功能要比在它基础上改造要简单的多。
- `Python`的终结,`Yum`是使用`Python`实现的,迁移到`Python3`可能改造可能有巨大的困难且毫无意义,倒不如重新实现来的简单且更好,最新版本的`DNF`改用`C/C++`来实现,并将大部分功能封装到了`libdnf`库中,以便对外提供API。
- 解决软件包的安装依赖关系的解析速度和性能问题,让安装包更加智能的解析依赖关系。
既然是替代方案,当然用法差异并不大,接下来了解下`DNF`软件包管理器的用法:
- 安装软件 : `dnf install <package>`
- 删除软件 : `dnf remove <package>`
- 查找软件 : `dnf search <package-name>`
- 更新软件 : `dnf update`
- 软件源配置文件: `/etc/yum.repos.d/*.repo`(配置目录兼容`yum`,实际上`yum`命令是`dnf`命令的软链接)
- 更新软件源缓存: `dnf makecache`
- 清理软件源缓存: `dnf clean all`
现在我们在`CentOS8`中看到的`yum`其实已经是`dnf`命令的软链接了。
## ZYPPER包管理器用法
`zypper`是`SuSe Linux`分支默认的包管理器工具,采用了一种称为`布尔可满足性问题`算法计算软件包依赖性问题,简单的来说就是分析出依赖关系后,将软件依赖包安装选择权和决策权交给用户自己决策。
- 安装软件 : `zypper install <package>`
- 删除软件 : `zypper remove <package>`
- 查找软件 : `zypper search <package-name>`
- 更新软件 : `zypper update`
- 软件源配置文件: `/etc/zypp/repos.d/*.repo`
- 更新软件源缓存: `zypper refresh`
- 清理软件源缓存: `zypper clean`
## Pacman包管理器用法
`Pacman`是一个软件包管理器,作为`Arch Linux`发行版的一部分。它最早由Arch Linux的`Judd Vinet`开发。`Pacman`可以解决安装过程中的依赖问题,自动下载并且安装所有需要的软件包。
最初的`pacman`很慢。这是因为您要引用的镜像服务器与您网络距离太远,传输速度太慢。
因此,有必要在使用前使用下面命令自动执行镜像优化。
```sh
# 测试并选择延迟最低的镜像源地址(通过-c参数选择国家)
$ sudo pacman-mirrors -g -c China
# 更新软件源本地缓存
$ sudo pacman -Sy
```
- 安装软件 : `pacman -S <package>` , `-Sw`选项只下载不安装
- 升级所有版本比源列表低的包: `pacman -Su`
- 删除软件 : `pacman -R <package>`
- 查找软件 : `pacman -Ss <package>`
- 查找软件 : `pacman -Qs <package>`(查找本地安装软件)
- 更新软件 : `pacman -U <package>` ,软件包可以是软件包名字、本地路径,也可以是`URL`地址。
- 软件源配置文件: `/etc/pacman.conf`
- 更新软件源缓存: `pacman -Sy`
- 清理软件源缓存: `pacman -Sc`(清理安装后临时缓存的软件包), `-Scc`选项彻底清理所有缓存信息。
## 特立独行的软件安装方法
> 上面列举的软件包管理工具都是重点考虑如何解决软件包依赖问题,而有些软件安装方法就不需要这种考虑,这类软件被称为`(portable software)便携软件`,在`Windows`系统中被称做`绿色软件`,这类软件不需要安装就可以直接使用。
不依赖于特定发行版的包装格式在Linux生态系中在Flatpak前早已被提出过数次。
2000年代早期,autopackage开始,2004年则是klik,这也提供了Alexander Larsson灵感,于2007年开发出glick项目。
到了2014年,klik便演化成`AppImage`,其目标是成为不依赖于特定散布版的便携式上游打包格式。
Canonical公司则于2016年发布了`Snappy`,其目标也是为了提供广泛的linux生态系一个通用的包装格式,其支持类似于`Flatpak`的格式,同时也支持应用程序商店式的数字发行与更新模式。
下面列举一些常见的`便携软件`:
- AppImage : 核心思想是`一个应用程序 = 一个文件`,下载即用,非常适合无需root权限的软件。您可以阅读[官网文档](https://docs.appimage.org/)了解如何制作、使用一款`AppImage`更多介绍。使用示例: [AnotherRedisDesktopManager](https://github.com/qishibo/AnotherRedisDesktopManager/)
- Flatpak : 口号是`Linux系统上的软件的未来`,`Flatpak`的目标是在用户想要运行他们可能并不完全信任的应用软件时提供一个`安全的沙盒环境`供用户使用。应用程序将必须使用由flatpak提供的函数调用来控制硬件设备或访问用户的文件,而flatpak将会在给予应用程序访问权限前提示用户。`Flatpak`允许应用程序开发人员直接向用户提供更新,而无需通过发行版,而不必为每个发行版分别打包和测试应用程序。提升了软件更新的速度但也可能会降低稳定性。您可以访问[Flathub软件仓库](https://flathub.org/)获取更多软件。
- Snappy : 用过`Ubuntu`的人一定使用过这类软件,这类软件包最初设计是应用于`Ubuntu Core`系统的移动端、云、物联网平台, `snap`格式包是一种可以由主机操作系统动态挂载的压缩的文件系统,其中还附有元数据声明,snap系统可以据其为应用程序设置适当的安全沙箱或容器。安装`snap`软件后执行`df`命令,你可以看到多了`/dev/loopX`文件系统。
![flatpak](https://flatpak.org/img/delivery_truck2-bb72338f.png)
## 总结
本文介绍了`Linux系统`大多数发行版可能使用的软件包管理工具,根据软件包格式分为三大主流派系:`Debian`、`Red Hat`和`Pacman`。
接着介绍了三大派系当前使用最广泛的`软件包管理器`以及使用方法。
古人云:`天下大势,分久必合`。总有一些人在想着解决`软件包依赖问题`,以及各种软件包如何可以在所有`Linux发行版`中通用,因此就出现了`AppImage`、`Flatpak`和`Snap`。从现在(2020年)的使用情况来看,未来很可能属于`Flatpak`的。
---
- 前言
- 第一章 开始吧
- 1.0 选择适合你的Linux发行版
- 1.1 开始制作启动U盘
- 1.2 安装你的第一个Linux操作系统
- 1.3 安装Linux系统后要做的事情
- 1.4 什么是root用户
- 1.5 Linux下使用终端执行Shell命令
- 1.6 Linux软件安装方法介绍
- 1.7 Linux常用软件推荐
- *安装Manjaro发行版系统
- *安装Manjaro后要做的配置工作
- Flatpak安装软件方法
- 为什么Linux系统普及成都落后于Windows和MacOS?
- 第二章 Linux上的基础命令
- 2.0 环境变量及配置相关命令
- 2.1 文件及目录操作相关命令
- 2.2 文本处理相关命令
- 2.3 进程任务管理相关命令
- 2.4 用户管理相关命令
- 第三章 开发环境的部署
- 3.0 学习Shell编程
- 3.1 环境变量配置实例_如何配置JDK环境
- Python编程环境
- C语言编程环境
- 第四章 深入理解Linux系统
- 关于Linux不得不说的CopyLeft