[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`文件系統。

## 總結
本文介紹了`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