Linux:包管理器
This commit is contained in:
parent
5fd132685c
commit
0156aebb0d
408
Tech/operating-system/Linux/2.基础操作/Linux 包管理器.md
Normal file
408
Tech/operating-system/Linux/2.基础操作/Linux 包管理器.md
Normal file
@ -0,0 +1,408 @@
|
|||||||
|
---
|
||||||
|
title: Linux 包管理器
|
||||||
|
description: Linux 包管理器
|
||||||
|
keywords:
|
||||||
|
- Linux
|
||||||
|
- 包管理器
|
||||||
|
tags:
|
||||||
|
- Linux/基础
|
||||||
|
author: 仲平
|
||||||
|
date: 2024-03-26
|
||||||
|
---
|
||||||
|
|
||||||
|
## 包管理器
|
||||||
|
|
||||||
|
Linux 系统的强大功能之一在于其庞大、多样化的软件生态。不同于 Windows 或 macOS,Linux 使用包管理器来自动化软件的安装、更新、配置和删除,极大简化了软件管理的复杂性。包管理器不仅确保软件和其依赖关系正确安装,还能保持系统的整洁和更新。
|
||||||
|
|
||||||
|
### 定义和作用
|
||||||
|
|
||||||
|
包管理器是 Linux 和 Unix-like 系统中用于自动化处理软件包任务的工具。它允许用户搜索、安装、更新、配置和删除软件包,而无需手动下载和解压缩。更重要的是,包管理器处理软件包之间的依赖关系,确保系统稳定运行,避免 " 依赖地狱 "。
|
||||||
|
|
||||||
|
### 软件包格式
|
||||||
|
|
||||||
|
Linux 软件包有多种格式,最常见的是 Debian 系的 `.deb` 和 Red Hat 系的 `.rpm`。
|
||||||
|
|
||||||
|
- **.deb**:Debian、Ubuntu 及其衍生版使用的软件包格式,通过 `dpkg` 和 `APT` 等工具进行管理。
|
||||||
|
- **.rpm**:Red Hat、Fedora、CentOS 等发行版采用的格式,由 `RPM` 包管理器以及 `YUM` 或 `DNF` 等高级工具处理。
|
||||||
|
|
||||||
|
这些格式基本上定义了如何打包软件、元数据(如版本、依赖关系)以及安装后如何布局文件。
|
||||||
|
|
||||||
|
### 软件仓库和软件源
|
||||||
|
|
||||||
|
软件仓库是托管软件包及其元数据的服务器。每个 Linux 发行版通常都会有一个或多个官方软件仓库,同时也支持添加第三方仓库。软件源(Repository Sources)是软件仓库的地址,用户可以在包管理器中配置这些地址,以便下载和安装软件包。
|
||||||
|
|
||||||
|
- **官方仓库**:提供由发行版维护团队精选和测试的软件包,确保软件的稳定性和安全性。
|
||||||
|
- **第三方仓库**:提供额外的软件包,可能包括最新的软件版本或官方仓库中未包含的软件。
|
||||||
|
|
||||||
|
用户可以根据需要添加、删除或更改软件源,以优化软件安装和更新过程。
|
||||||
|
|
||||||
|
## 常用包管理器
|
||||||
|
|
||||||
|
Linux 的包管理器是系统管理的核心组件,它简化了软件的安装、更新、配置和移除过程。下面是针对主流 Linux 发行版包管理器的详细介绍。
|
||||||
|
|
||||||
|
### Debian/Ubuntu 系
|
||||||
|
|
||||||
|
#### Dpkg
|
||||||
|
|
||||||
|
**dpkg** 是 APT 底层的工具,负责处理 `.deb` 文件(Debian 软件包格式)。dpkg 直接与软件包交互,执行如安装、移除和提供软件包信息等任务。虽然 dpkg 可以独立使用,但通常与 APT 一起使用以自动处理软件依赖。
|
||||||
|
|
||||||
|
dpkg 最早于 1993 年由 Debian 项目的创始人 Ian Murdock 开发。自此,dpkg 成为了 Debian 项目的核心组件之一,逐步发展壮大。后来,随着 Ubuntu 等基于 Debian 的发行版的出现,dpkg 的使用范围进一步扩大。
|
||||||
|
|
||||||
|
dpkg 的主要设计理念是简单、稳定、可扩展。它旨在为 Debian 及衍生系统提供一个可靠、易于使用的软件包管理基础设施。此外,**dpkg 还遵循 Unix 哲学,即“做好一件事”,专注于软件包的底层管理,而将依赖关系处理等高级功能交给上层工具。**
|
||||||
|
|
||||||
|
| 操作 | 命令 |
|
||||||
|
| -------------------- | ---------------------------- |
|
||||||
|
| 安装软件包 | `dpkg -i <package_file.deb>` |
|
||||||
|
| 删除软件包 | `dpkg -r <package_name>` |
|
||||||
|
| 显示已安装软件包信息 | `dpkg -s <package_name>` |
|
||||||
|
| 列出所有已安装软件包 | `dpkg -l` |
|
||||||
|
| 查询文件所属的软件包 | `dpkg -S <file_name>` |
|
||||||
|
|
||||||
|
#### APT
|
||||||
|
|
||||||
|
**APT (Advanced Package Tool)** 是 Debian 及其衍生版(如 Ubuntu)最常用的包管理工具。APT 是一个高级接口,它能够自动下载、配置、安装和删除软件包。APT 的主要特点包括对依赖关系的自动处理、易于使用的命令行界面、软件包的稳定升级以及对多种下载协议的支持。
|
||||||
|
|
||||||
|
APT 最早在 1998 年由 Debian 开发者 Ian Murdock 和其他开发者创建。当时,Debian 社区意识到需要一个更高级的软件包管理工具来简化系统维护,因此 APT 应运而生。随着时间的推移,APT 得到了持续的改进和扩展,逐渐成为 Debian 及其衍生系统的重要组成部分。
|
||||||
|
|
||||||
|
APT 的实现主要基于 C++ 编程语言,后端库则依赖于 dpkg。**APT 与 dpkg 紧密协作,dpkg 负责底层的软件包安装、卸载和管理,而 APT 则负责处理软件仓库、依赖关系和软件包更新。**
|
||||||
|
|
||||||
|
| 操作 | 命令 |
|
||||||
|
| -------------------- | ---------------------------- |
|
||||||
|
| 更新软件包列表 | `apt update` |
|
||||||
|
| 安装软件包 | `apt install <package_name>` |
|
||||||
|
| 升级软件包 | `apt upgrade` |
|
||||||
|
| 升级所有软件包 | `apt full-upgrade` |
|
||||||
|
| 搜索软件包 | `apt search <package_name>` |
|
||||||
|
| 显示软件包信息 | `apt show <package_name>` |
|
||||||
|
| 删除软件包 | `apt remove <package_name>` |
|
||||||
|
| 删除软件包及配置 | `apt purge <package_name>` |
|
||||||
|
| 清理未使用的软件包 | `apt autoremove` |
|
||||||
|
| 清理下载的软件包文件 | `apt clean` |
|
||||||
|
|
||||||
|
### Red Hat/CentOS 系
|
||||||
|
|
||||||
|
#### RPM
|
||||||
|
|
||||||
|
**RPM (RPM Package Manager)** 是一个包管理系统,用于安装、升级、查询、验证、卸载 RPM 软件包。RPM 是 Fedora、RHEL 及其衍生版的底层包管理工具,YUM 和 DNF 都是在 RPM 之上构建的高级工具,提供了更完整的软件包管理功能。
|
||||||
|
|
||||||
|
RPM 的发展始于 1997 年,当时由 Red Hat 的开发人员创建,用于替代当时较为简单的 Linux 软件包管理工具。随着 Linux 的发展,RPM 得到了广泛的应用,成为了许多基于 Red Hat 的发行版的标准软件包管理工具。现在,RPM 在 Fedora、RHEL、CentOS 等发行版中仍被广泛使用。
|
||||||
|
|
||||||
|
| 操作 | 命令 |
|
||||||
|
| -------------------------- | ----------------------------- |
|
||||||
|
| 安装 RPM 软件包 | `rpm -ivh <package_name.rpm>` |
|
||||||
|
| 升级 RPM 软件包 | `rpm -Uvh <package_name.rpm>` |
|
||||||
|
| 移除(卸载)软件包 | `rpm -e <package_name>` |
|
||||||
|
| 查询所有已安装的软件包 | `rpm -qa` |
|
||||||
|
| 查询特定软件包是否已安装 | `rpm -q <package_name>` |
|
||||||
|
| 查询已安装软件包的信息 | `rpm -qi <package_name>` |
|
||||||
|
| 列出软件包中的文件 | `rpm -ql <package_name>` |
|
||||||
|
| 查询某个文件属于哪个软件包 | `rpm -qf <file_name>` |
|
||||||
|
| 显示软件包的依赖关系 | `rpm -qR <package_name>` |
|
||||||
|
| 验证软件包 | `rpm -V <package_name>` |
|
||||||
|
| 查询软件包信息(未安装的) | `rpm -qpi <package_name.rpm>` |
|
||||||
|
| 查询未安装软件包中的文件 | `rpm -qpl <package_name.rpm>` |
|
||||||
|
| 查询未安装软件包的依赖关系 | `rpm -qpR <package_name.rpm>` |
|
||||||
|
| 导入 RPM GPG key | `rpm --import /path/to/key` |
|
||||||
|
| 检查软件包签名 | `rpm -K <package_name.rpm>` |
|
||||||
|
|
||||||
|
#### YUM
|
||||||
|
|
||||||
|
**YUM (Yellowdog Updater, Modified)** 是基于 RPM 包管理的命令行工具,主要用于 Fedora、RHEL 及其衍生系统(如 CentOS)。YUM 使得管理 RPM 软件包变得更简单,自动处理依赖关系,提供易于使用的接口来管理软件仓库。
|
||||||
|
|
||||||
|
Yum 最初由 Seth Vidal 编写,2003 年首次在 Fedora Core 1 中引入。Yum 的设计理念是为了改进 Red Hat Linux 中的软件包管理器,使其更快、更易用和更灵活。目前,Yum 已成为 Red Hat Enterprise Linux(RHEL)和 CentOS 等 Linux 发行版中的标准软件包管理器。
|
||||||
|
|
||||||
|
| 操作 | 命令 |
|
||||||
|
| ------------------ | ---------------------------- |
|
||||||
|
| 更新软件包列表 | `yum makecache` |
|
||||||
|
| 安装软件包 | `yum install <package_name>` |
|
||||||
|
| 更新软件包 | `yum update <package_name>` |
|
||||||
|
| 更新所有软件包 | `yum update` |
|
||||||
|
| 删除软件包 | `yum remove <package_name>` |
|
||||||
|
| 搜索软件包 | `yum search <package_name>` |
|
||||||
|
| 列出所有可用软件包 | `yum list available` |
|
||||||
|
|
||||||
|
#### DNF
|
||||||
|
|
||||||
|
**DNF (Dandified YUM)** 是 YUM 的下一代版本,旨在提供更好的性能和改进的依赖关系解决算法。DNF 采用了新的解决方案架构,改进了用户界面,并支持模块化和容器化应用。
|
||||||
|
|
||||||
|
DNF 最初是由 Fedora 项目推出的 YUM 的替代品,目的是提供更好的性能、更好的内存管理和更好的依赖关系解决方案。随着时间的推移,DNF 在 Red Hat 及其衍生产品中逐渐取代了 YUM。
|
||||||
|
|
||||||
|
DNF 的实现基于 Python,使用 RPM 库进行底层软件包管理。DNF 的核心设计思想是提供更好的性能、内存管理和依赖关系解决方案,同时支持多个软件包仓库、插件和模块化架构。
|
||||||
|
|
||||||
|
| 操作 | 命令 |
|
||||||
|
| -------------- | ---------------------------- |
|
||||||
|
| 更新软件包列表 | `dnf makecache` |
|
||||||
|
| 安装软件包 | `dnf install <package_name>` |
|
||||||
|
| 更新软件包 | `dnf upgrade <package_name>` |
|
||||||
|
| 更新所有软件包 | `dnf upgrade` |
|
||||||
|
| 删除软件包 | `dnf remove <package_name>` |
|
||||||
|
| 搜索软件包 | `dnf search <package_name>` |
|
||||||
|
| 清理缓存 | `dnf clean all` |
|
||||||
|
|
||||||
|
### Arch Linux
|
||||||
|
|
||||||
|
**Pacman** 是 Arch Linux 的官方包管理工具,它结合了一个简单的二进制包格式和一个易于使用的构建系统。Pacman 的特点包括易于理解的命令语法、对依赖关系的自动处理以及对滚动更新的原生支持。
|
||||||
|
|
||||||
|
| 操作 | 命令 |
|
||||||
|
| ---------------- | ----------------------------- |
|
||||||
|
| 更新软件包数据库 | `pacman -Sy` |
|
||||||
|
| 安装软件包 | `pacman -S <package_name>` |
|
||||||
|
| 更新所有软件包 | `pacman -Syu` |
|
||||||
|
| 删除软件包 | `pacman -R <package_name>` |
|
||||||
|
| 搜索软件包 | `pacman -Ss <search_term>` |
|
||||||
|
| 列出已安装软件包 | `pacman -Q` |
|
||||||
|
| 清理未使用的包 | `pacman -Rns $(pacman -Qdtq)` |
|
||||||
|
|
||||||
|
### SUSE/openSUSE 系
|
||||||
|
|
||||||
|
**Zypper** 是 SUSE Linux 发行版的命令行包管理工具。它提供了对 RPM 软件包的全面管理,包括安装、更新、搜索和卸载软件包。Zypper 的特点是对软件仓库的高级管理能力和对依赖关系处理的强大支持。
|
||||||
|
|
||||||
|
| 操作 | 命令 |
|
||||||
|
| ---------------- | ------------------------------- |
|
||||||
|
| 更新软件包列表 | `zypper refresh` |
|
||||||
|
| 安装软件包 | `zypper install <package_name>` |
|
||||||
|
| 更新软件包 | `zypper update <package_name>` |
|
||||||
|
| 更新所有软件包 | `zypper update` |
|
||||||
|
| 删除软件包 | `zypper remove <package_name>` |
|
||||||
|
| 搜索软件包 | `zypper search <package_name>` |
|
||||||
|
| 列出所有软件仓库 | `zypper repos` |
|
||||||
|
|
||||||
|
### Gentoo
|
||||||
|
|
||||||
|
**Portage** 是 Gentoo Linux 的包管理系统,它是基于源代码的包管理系统的一个例子。Portage 包括一个命令行界面工具(`emerge`),用户可以通过它安装、搜索、查询和维护软件包。Portage 的特点是高度可配置性,允许用户以最适合其需求的方式编译软件。
|
||||||
|
|
||||||
|
| 命令 | 操作 |
|
||||||
|
| --------------- | ---------------- |
|
||||||
|
| `emerge --sync` | 同步软件包数据库 |
|
||||||
|
| emerge <package_name> | 安装软件包 |
|
||||||
|
| emerge --update --deep --newuse @world | 更新系统 |
|
||||||
|
| emerge --deselect <package_name> | 删除软件包 |
|
||||||
|
| emerge --search <package_name> | 搜索软件包 |
|
||||||
|
| qlist -I | 列出所有安装的软件包 |
|
||||||
|
| emerge --update <package_name> | 更新软件包 |
|
||||||
|
| emerge --depclean | 检查依赖性并重新构建 |
|
||||||
|
| equery list <package_name> | 查看软件包信息 |
|
||||||
|
|
||||||
|
## 实践操作
|
||||||
|
|
||||||
|
### 更新和升级
|
||||||
|
|
||||||
|
```mermaid
|
||||||
|
graph LR
|
||||||
|
A[开始] --> B{检查更新}
|
||||||
|
B -->|有更新| C[下载更新]
|
||||||
|
B -->|无更新| F[结束,系统已是最新]
|
||||||
|
C --> D[安装更新]
|
||||||
|
D --> E{需要清理旧软件包吗?}
|
||||||
|
E -->|是| G[清理旧版本软件包]
|
||||||
|
E -->|否| F
|
||||||
|
G --> F
|
||||||
|
```
|
||||||
|
|
||||||
|
1. **更新软件包列表**
|
||||||
|
|
||||||
|
在安装新软件或升级现有软件之前,应该更新本地软件包列表,以确保获取到最新版本的软件包信息。可以通过以下命令来更新软件包列表:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
sudo apt update
|
||||||
|
```
|
||||||
|
|
||||||
|
2. **升级所有可升级的软件包**
|
||||||
|
|
||||||
|
更新了软件包列表后,可以通过以下命令来升级所有已安装的软件包至最新版本:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
sudo apt upgrade
|
||||||
|
```
|
||||||
|
|
||||||
|
此命令会根据依赖关系自动升级软件包,但它不会升级那些会引起依赖问题的软件包。
|
||||||
|
|
||||||
|
3. **全面升级系统**
|
||||||
|
|
||||||
|
要执行一个更彻底的系统升级(可能包括删除一些旧软件包),可以使用以下命令:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
sudo apt full-upgrade
|
||||||
|
```
|
||||||
|
|
||||||
|
这个命令会更积极地处理依赖关系,可能会安装新软件包或删除无法升级的软件包以满足其他软件包的依赖需求。
|
||||||
|
|
||||||
|
4. **清理不再需要的软件包**
|
||||||
|
|
||||||
|
在软件升级过程中,一些旧版本的软件包或不再需要的依赖可能会保留在系统上。可以通过以下命令清理这些不再需要的软件包:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
sudo apt autoremove
|
||||||
|
```
|
||||||
|
|
||||||
|
### 管理仓库源
|
||||||
|
|
||||||
|
仓库源是指软件包管理器所用的软件仓库,用于提供软件包的下载和更新。常见的 Linux 发行版都有官方仓库源,也有一些社区提供的非官方仓库源,以及一些专门为国内用户提供的镜像源。
|
||||||
|
|
||||||
|
官方仓库源是由 Linux 发行版官方维护的软件仓库,提供的软件包通常经过严格的测试和验证,保证了软件的稳定性和安全性。用户可以通过软件包管理器直接访问官方仓库源,以获取最新的软件包和更新。
|
||||||
|
|
||||||
|
- Debian 官方源:http://deb.debian.org/
|
||||||
|
- Debian 安全源:https://security.debian.org/
|
||||||
|
- Ubuntu 官方源:http://archive.ubuntu.com
|
||||||
|
|
||||||
|
- CentOS 官方源:http://mirror.centos.org/
|
||||||
|
|
||||||
|
由于国内网络环境的特殊性,使用国外官方仓库源可能会遇到较慢的下载速度或无法连接的问题。因此,一些开源社区提供了针对国内用户的镜像仓库源,用于加速软件包下载和更新。
|
||||||
|
|
||||||
|
- 阿里云开源镜像站:http://mirrors.aliyun.com/
|
||||||
|
- 中科大开源软件镜像站:https://mirrors.ustc.edu.cn/
|
||||||
|
- 教育网联合镜像站:https://help.mirrors.cernet.edu.cn/
|
||||||
|
|
||||||
|
### 一键脚本
|
||||||
|
|
||||||
|
LinuxMirrors 是一个由 SuperManito 维护的 Linux 镜像站点列表。该项目旨在为 Linux 用户提供可靠、高速的镜像站点列表,用户可以通过该列表轻松找到离自己最近的镜像站点,以加速软件包的下载和更新。
|
||||||
|
|
||||||
|
LinuxMirrors: <https://github.com/SuperManito/LinuxMirrors>
|
||||||
|
|
||||||
|
```shell
|
||||||
|
bash <(curl -sSL https://linuxmirrors.cn/main.sh)
|
||||||
|
```
|
||||||
|
|
||||||
|
## 问题解决
|
||||||
|
|
||||||
|
在 Linux 系统的维护过程中,备份、安全性验证以及故障排除是保障系统稳定运行的重要措施。以下是这些方面的详细介绍和指导。
|
||||||
|
|
||||||
|
### 备份和恢复
|
||||||
|
|
||||||
|
备份软件包列表可以帮助你在系统重装或迁移时快速恢复之前的软件环境。
|
||||||
|
|
||||||
|
#### 1. 备份软件包列表
|
||||||
|
|
||||||
|
| 发行版 | 备份命令 |
|
||||||
|
| ------------------- | ------------------------------------------- |
|
||||||
|
| Debian/Ubuntu | `dpkg --get-selections > packages_list.txt` |
|
||||||
|
| Fedora/CentOS (DNF) | `dnf list installed > packages_list.txt` |
|
||||||
|
| Arch Linux | `pacman -Qqe > packages_list.txt` |
|
||||||
|
|
||||||
|
#### 2. 恢复软件包
|
||||||
|
|
||||||
|
| 发行版 | 恢复命令 |
|
||||||
|
| ------------------- | ------------------------------------------------------------ |
|
||||||
|
| Debian/Ubuntu | 1. `dpkg --set-selections < packages_list.txt`<br>2. `apt-get dselect-upgrade` |
|
||||||
|
| Fedora/CentOS (DNF) | `dnf install $(cat packages_list.txt)` |
|
||||||
|
| Arch Linux | `pacman -S --needed $(< packages_list.txt)` |
|
||||||
|
|
||||||
|
### 安全性和验证
|
||||||
|
|
||||||
|
确保软件包的完整性和安全性对于维护 Linux 系统的安全至关重要。下面详细介绍如何操作 GPG 签名验证和校验和检查:
|
||||||
|
|
||||||
|
#### GPG 签名验证
|
||||||
|
|
||||||
|
GPG(GNU Privacy Guard)签名验证是一种确认软件包未被篡改并且确实来自发布者的方法。
|
||||||
|
|
||||||
|
**Debian/Ubuntu(使用 APT)**:
|
||||||
|
|
||||||
|
1. **导入 GPG 密钥**:如果你尝试安装一个第三方软件包,首先需要导入其 GPG 密钥,使用命令 `sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys <KEY_ID>`。
|
||||||
|
2. **验证软件包**:APT 在下载和安装软件包时自动验证 GPG 签名。如果验证失败,APT 将停止安装过程并显示错误。
|
||||||
|
|
||||||
|
**Fedora/CentOS(使用 RPM)**:
|
||||||
|
|
||||||
|
1. **导入 GPG 密钥**:首先,导入软件包签名用的 GPG 密钥,使用命令 `sudo rpm --import /path/to/key`。
|
||||||
|
2. **检查软件包签名**:在安装 RPM 包之前,可以使用 `rpm --checksig -v <package.rpm>` 命令检查软件包的签名。
|
||||||
|
|
||||||
|
#### 校验和检查
|
||||||
|
|
||||||
|
校验和是文件的小型数字摘要,用于检测文件是否在传输过程中被篡改。使用校验和进行文件完整性检查是一个好习惯。
|
||||||
|
|
||||||
|
使用 sha256sum 检查:
|
||||||
|
|
||||||
|
1. 首先,你需要获取软件包的 SHA256 校验和,通常在软件下载页面或通过安全信道由软件发布者提供。
|
||||||
|
2. 下载完软件包后,在终端中使用命令 `sha256sum <downloaded_file>` 生成文件的 SHA256 校验和。
|
||||||
|
3. 比较计算出的校验和与发布者提供的校验和。如果两者相同,说明文件未被篡改,可以安全安装。
|
||||||
|
|
||||||
|
## 常见问题和故障排除
|
||||||
|
|
||||||
|
在软件包的安装和更新过程中,可能会遇到各种问题,如依赖关系错误、软件源不可达、包损坏等。
|
||||||
|
|
||||||
|
### 解决依赖问题
|
||||||
|
|
||||||
|
软件包依赖问题通常发生在软件包需要但未安装的其他包,或者是需要特定版本的包而系统上安装的是不兼容版本。大多数现代的包管理器都能自动处理依赖问题,但有时候可能需要手动干预。
|
||||||
|
|
||||||
|
| 操作 | Debian/Ubuntu | Fedora/CentOS (DNF) |
|
||||||
|
| ------------ | --------------------------- | --------------------------- |
|
||||||
|
| 自动修复依赖 | `sudo apt-get -f install` | `sudo dnf check` |
|
||||||
|
| 搜索软件包 | `apt search <package_name>` | `dnf search <package_name>` |
|
||||||
|
|
||||||
|
### 更新软件源
|
||||||
|
|
||||||
|
软件源或仓库是网络上或本地的软件包集合。系统通过软件源获取和安装软件包。如果软件源列表过时或软件源服务器不可达,可能会导致无法安装或更新软件包。更新软件源列表或更换到更快的镜像服务器可以解决这个问题。
|
||||||
|
|
||||||
|
| 操作 | Debian/Ubuntu | Fedora/CentOS (DNF) |
|
||||||
|
| -------------- | --------------------------------- | ------------------------------------- |
|
||||||
|
| 编辑软件源列表 | 编辑 `/etc/apt/sources.list` 文件 | 编辑 `/etc/yum.repos.d/` 目录下的文件 |
|
||||||
|
| 清理缓存 | `sudo apt clean` | `sudo dnf clean all` |
|
||||||
|
|
||||||
|
### 修复损坏的包
|
||||||
|
|
||||||
|
损坏的软件包可能会阻止软件正常安装或运行。这可能是由于下载过程中的错误、磁盘错误或其他问题导致的文件损坏。重新安装软件包通常可以解决这个问题。
|
||||||
|
|
||||||
|
| 操作 | Debian/Ubuntu | Fedora/CentOS (DNF) |
|
||||||
|
| -------------- | ------------------------------------------------- | ----------------------------------- |
|
||||||
|
| 重新安装软件包 | `sudo apt-get install --reinstall <package_name>` | `sudo dnf reinstall <package_name>` |
|
||||||
|
| 清理缓存 | `sudo apt clean` | `sudo dnf clean all` |
|
||||||
|
|
||||||
|
## 通用包管理器
|
||||||
|
|
||||||
|
在 Linux 生态系统中,通用包管理器如 Flatpak 和 AppImage 提供了跨发行版的软件分发方案,使得应用程序的安装和运行变得更加容易和安全。这些工具各有特点,适用于不同的场景和需求。
|
||||||
|
|
||||||
|
### Flatpak
|
||||||
|
|
||||||
|
**基础知识**: Flatpak 通过提供一个沙盒环境,允许应用程序在其自己的隔离空间中运行,与系统的其他部分相互独立。这种方法不仅提高了系统的安全性,还解决了传统的依赖问题,因为每个 Flatpak 应用都包含了其运行所需的所有依赖。
|
||||||
|
|
||||||
|
首先,确保你的系统已安装 Flatpak。在大多数发行版中,可以通过包管理器来安装 Flatpak:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
# Debian/Ubuntu
|
||||||
|
sudo apt install flatpak
|
||||||
|
|
||||||
|
# Fedora
|
||||||
|
sudo dnf install flatpak
|
||||||
|
|
||||||
|
# Arch Linux
|
||||||
|
sudo pacman -S flatpak
|
||||||
|
```
|
||||||
|
|
||||||
|
1. **添加 Flathub 仓库**: Flathub 是最流行的 Flatpak 应用仓库之一。通过以下命令添加 Flathub 仓库:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
|
||||||
|
```
|
||||||
|
|
||||||
|
1. **安装 Flatpak 应用**: 安装应用非常简单,只需知道应用的 ID。例如,安装 Spotify:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
flatpak install flathub com.spotify.Client
|
||||||
|
```
|
||||||
|
|
||||||
|
1. **运行 Flatpak 应用**: 安装后,可以通过以下命令运行应用:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
flatpak run com.spotify.Client
|
||||||
|
```
|
||||||
|
|
||||||
|
### AppImage
|
||||||
|
|
||||||
|
AppImage 提供了一种便携式软件分发方法,应用程序及其依赖被打包在单一的 AppImage 文件中。用户只需下载这个文件,无需安装,就可以运行应用程序。
|
||||||
|
|
||||||
|
**使用 AppImage**: 使用 AppImage 极其简单,只需几个步骤:
|
||||||
|
|
||||||
|
1. **下载 AppImage 文件**:首先,从应用程序的官方网站或 GitHub 发布页面下载 AppImage 文件。
|
||||||
|
|
||||||
|
2. **赋予执行权限**:下载后,需要为 AppImage 文件赋予执行权限。在文件所在的目录中打开终端,执行以下命令:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
chmod +x <AppImage_File>
|
||||||
|
```
|
||||||
|
|
||||||
|
替换 `<AppImage_File>` 为你的 AppImage 文件名。
|
||||||
|
|
||||||
|
3. **运行 AppImage**:赋予执行权限后,直接点击文件或在终端中执行文件,即可启动应用程序:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
./<AppImage_File>
|
||||||
|
```
|
@ -1,417 +0,0 @@
|
|||||||
---
|
|
||||||
title: Linux 软件包管理器
|
|
||||||
description: Linux 软件包管理器
|
|
||||||
keywords:
|
|
||||||
- Linux
|
|
||||||
- 软件包管理器
|
|
||||||
tags:
|
|
||||||
- Linux/基础
|
|
||||||
author: 7Wate
|
|
||||||
date: 2023-03-30
|
|
||||||
---
|
|
||||||
|
|
||||||
包管理器(Package Manager)是一个用于自动化软件包安装、升级、配置、删除以及跟踪已安装软件包的工具。它在操作系统(尤其是 Linux 和 Unix-like 系统)上扮演着重要角色。包管理器通过使用软件仓库(Repositories)将软件包(即应用程序、库和工具)组织和管理起来。
|
|
||||||
|
|
||||||
以下是包管理器的主要功能和特点:
|
|
||||||
|
|
||||||
1. 软件仓库:包管理器从软件仓库(Repositories)中获取软件包。仓库是托管预编译软件包及其元数据的服务器。大多数 Linux 发行版都有官方仓库,同时也支持第三方仓库。仓库通常分为稳定、测试和不稳定等不同的分支,以满足不同用户的需求。
|
|
||||||
2. 配置仓库源:在开始使用包管理器之前,用户需要配置软件源,即仓库的地址。这通常在系统安装时自动完成,但用户也可以手动添加或删除软件源。包管理器将从这些源获取软件包及其相关信息。
|
|
||||||
3. 更新索引:包管理器需要更新本地软件包索引,以便从软件仓库获取最新的软件包信息。这个过程也称为“更新软件包数据库”或“同步软件包列表”。更新索引通常通过运行类似于 `apt update`、`yum update` 或 `pacman -Sy` 的命令来完成。
|
|
||||||
4. 搜索和查询:用户可以使用包管理器搜索和查询软件包。搜索功能允许用户查找特定的软件包或库,而查询功能则提供软件包的详细信息,如描述、版本和依赖关系。
|
|
||||||
5. 安装软件包:用户可以使用包管理器安装软件包。在此过程中,包管理器会检查并解决依赖关系,确保所有必需的软件包和库都已安装。然后,包管理器从仓库下载软件包,并将其解压缩到正确的位置。
|
|
||||||
6. 升级和删除软件包:包管理器允许用户升级已安装的软件包到新版本,或从系统中删除不再需要的软件包。在升级过程中,包管理器会确保依赖关系得到妥善处理,以避免潜在的问题。在删除软件包时,包管理器还会检查是否有其他软件包依赖于它,以避免不小心破坏系统。
|
|
||||||
7. 安全性和验证:在下载和安装软件包时,包管理器通常会验证其完整性和来源,以确保软件包没有被篡改。这是通过使用签名和哈希检查等方法来实现的。
|
|
||||||
|
|
||||||
总之,包管理器是一个自动化工具,负责处理操作系统上软件包的各种任务。它简化了软件安装、升级、配置和删除的过程,确保系统的稳定性和安全性。不同的操作系统和发行版可能使用不同的包管理器,但其核心概念和功能类似。
|
|
||||||
|
|
||||||
## Dpkg
|
|
||||||
|
|
||||||
dpkg(Debian Package Manager)是 Debian 操作系统及其衍生系统(如 Ubuntu)中的一个**底层软件包管理工具**。它负责处理安装、卸载、更新等软件包管理操作。**dpkg 并不处理依赖关系**,这是由更高层的工具(如 apt、apt-get、aptitude 等)完成的。
|
|
||||||
|
|
||||||
dpkg 最早于 1993 年由 Debian 项目的创始人 Ian Murdock 开发。自此,dpkg 成为了 Debian 项目的核心组件之一,逐步发展壮大。后来,随着 Ubuntu 等基于 Debian 的发行版的出现,dpkg 的使用范围进一步扩大。
|
|
||||||
|
|
||||||
dpkg 主要由 C 语言编写,其源代码托管在 GitLab(<https://salsa.debian.org/dpkg-team/dpkg)。dpkg> 在底层使用 DEB(Debian package)文件格式,一个 DEB 文件包含软件包的元数据(如名称、版本、依赖关系等)、二进制文件、配置文件等。dpkg 提供了用于安装、卸载、查询等操作的命令行界面。
|
|
||||||
|
|
||||||
dpkg 的主要设计理念是简单、稳定、可扩展。它旨在为 Debian 及衍生系统提供一个可靠、易于使用的软件包管理基础设施。此外,**dpkg 还遵循 Unix 哲学,即“做好一件事”,专注于软件包的底层管理,而将依赖关系处理等高级功能交给上层工具。**
|
|
||||||
|
|
||||||
### 优点
|
|
||||||
|
|
||||||
1. 简单且易于使用:dpkg 提供了一套直观的命令行界面,让用户可以轻松地管理软件包。
|
|
||||||
2. 稳定性高:经过多年的发展和优化,dpkg 已经非常稳定,被广泛应用于 Debian 及其衍生系统。
|
|
||||||
3. 良好的兼容性:dpkg 支持多种硬件平台和操作系统。
|
|
||||||
4. 可扩展性强:dpkg 的设计允许上层工具方便地对其进行扩展,如 apt 和 aptitude。
|
|
||||||
|
|
||||||
### 缺点
|
|
||||||
|
|
||||||
1. 持续优化性能:随着软件包的数量和复杂性不断增加,dpkg 需要持续优化以提高性能。
|
|
||||||
2. 改进依赖关系处理:
|
|
||||||
3. 尽管 dpkg 本身不处理依赖关系,但未来的发展方向可能会考虑将一些依赖关系处理能力整合进 dpkg,使其更为强大。 3. 更好地支持其他 Linux 发行版:dpkg 可能会扩展对其他非 Debian 系发行版的支持,提高其在 Linux 生态中的通用性。
|
|
||||||
4. 提高安全性:随着网络安全问题日益严重,dpkg 需要不断提高安全性,以确保软件包安装和更新过程中的安全性。
|
|
||||||
5. 用户友好性改进:虽然 dpkg 已经相对简单易用,但未来仍可考虑进一步优化用户界面,使其更加直观和友好。
|
|
||||||
6. 容器化与云原生支持:随着容器化和云原生技术的普及,dpkg 可能需要增强在这些环境下的支持和适配能力。
|
|
||||||
|
|
||||||
总之,dpkg 未来的发展方向主要集中在性能优化、依赖关系处理、跨发行版支持、安全性、用户友好性和云原生环境支持等方面。通过不断改进和创新,dpkg 将继续为 Debian 及其衍生系统提供可靠的软件包管理基础设施。
|
|
||||||
|
|
||||||
### 命令
|
|
||||||
|
|
||||||
| 命令 | 说明 |
|
|
||||||
| ------------------------------- | ---------------------------------------------------------- |
|
|
||||||
| dpkg -i package.deb | 安装一个 DEB 软件包 |
|
|
||||||
| dpkg -r package_name | 移除一个已安装的软件包,但保留配置文件 |
|
|
||||||
| dpkg -P package_name | 完全移除一个已安装的软件包,包括配置文件 |
|
|
||||||
| dpkg -L package_name | 列出已安装软件包的所有文件 |
|
|
||||||
| dpkg -l | 列出所有已安装的软件包 |
|
|
||||||
| dpkg -s package_name | 显示已安装软件包的状态信息 |
|
|
||||||
| dpkg -S file_path | 查询指定文件属于哪个软件包 |
|
|
||||||
| dpkg --get-selections | 获取当前系统上所有软件包的安装状态 |
|
|
||||||
| dpkg --set-selections | 从文件或标准输入中读取软件包状态信息,设置相应软件包的状态 |
|
|
||||||
| dpkg --configure package_name | 配置一个尚未配置的软件包 |
|
|
||||||
| dpkg --unpack package.deb | 解包 DEB 文件,但不配置软件包 |
|
|
||||||
| dpkg --print-architecture | 显示当前系统的架构 |
|
|
||||||
|
|
||||||
### 选项
|
|
||||||
|
|
||||||
| 选项 | 说明 |
|
|
||||||
| ------------------------------- | ---------------------------------------------------------- |
|
|
||||||
| -i, --install | 安装一个或多个 DEB 软件包 |
|
|
||||||
| -r, --remove | 移除一个或多个已安装的软件包,但保留配置文件 |
|
|
||||||
| -P, --purge | 完全移除一个或多个已安装的软件包,包括配置文件 |
|
|
||||||
| -L, --listfiles | 列出指定软件包的所有文件 |
|
|
||||||
| -l, --list | 列出所有已安装的软件包 |
|
|
||||||
| -s, --status | 显示指定软件包的状态信息 |
|
|
||||||
| -S, --search | 查询指定文件属于哪个软件包 |
|
|
||||||
| --get-selections | 获取当前系统上所有软件包的安装状态 |
|
|
||||||
| --set-selections | 从文件或标准输入中读取软件包状态信息,设置相应软件包的状态 |
|
|
||||||
| --configure | 配置一个或多个尚未配置的软件包 |
|
|
||||||
| --unpack | 解包一个或多个 DEB 文件,但不配置软件包 |
|
|
||||||
| --print-architecture | 显示当前系统的架构 |
|
|
||||||
| --force-<选项> | 强制执行某些操作,如 --force-depends 强制忽略依赖问题 |
|
|
||||||
| --no-act | 模拟操作,不实际执行 |
|
|
||||||
| --refuse-<选项> | 拒绝执行某些操作 |
|
|
||||||
| --ignore-depends=package_name | 安装或删除软件包时忽略指定的依赖关系 |
|
|
||||||
|
|
||||||
## APT
|
|
||||||
|
|
||||||
APT(Advanced Package Tool)是一个用于管理 Debian 及其衍生系统(如 Ubuntu)软件包的高级工具集。它提供了一个统一的方法来处理软件包的安装、升级、配置和卸载,以及管理系统上的依赖关系。APT 包括多个子工具,如 apt-get、apt-cache、apt-config 等。
|
|
||||||
|
|
||||||
APT 最早在 1998 年由 Debian 开发者 Ian Murdock 和其他开发者创建。当时,Debian 社区意识到需要一个更高级的软件包管理工具来简化系统维护,因此 APT 应运而生。随着时间的推移,APT 得到了持续的改进和扩展,逐渐成为 Debian 及其衍生系统的重要组成部分。
|
|
||||||
|
|
||||||
APT 的实现主要基于 C++ 编程语言,后端库则依赖于 dpkg。**APT 与 dpkg 紧密协作,dpkg 负责底层的软件包安装、卸载和管理,而 APT 则负责处理软件仓库、依赖关系和软件包更新。**
|
|
||||||
|
|
||||||
APT 的设计理念主要包括以下几点:
|
|
||||||
|
|
||||||
1. 简化软件包管理:APT 旨在简化 Debian 及其衍生系统的软件包管理,使用户能够轻松地安装、升级和卸载软件。
|
|
||||||
2. 自动处理依赖关系:APT 可以自动处理软件包之间的依赖关系,避免了手动解决依赖问题的繁琐工作。
|
|
||||||
3. 高度可定制:APT 允许用户自定义软件源、代理设置等,满足不同用户的需求。
|
|
||||||
4. 提供多种前端工具:APT 提供了多种前端工具,如命令行工具 apt-get、图形界面工具 Synaptic 等,方便用户选择。
|
|
||||||
|
|
||||||
### 优点
|
|
||||||
|
|
||||||
1. 依赖关系处理:APT 自动处理软件包之间的依赖关系,使得安装、升级和卸载过程更简单、更方便。
|
|
||||||
2. 软件仓库支持:APT 提供了一个集中式的软件仓库,用户可以从中搜索和安装所需的软件包,这使得软件安装变得更简单、更安全。
|
|
||||||
3. 自动更新:APT 支持自动更新功能,可以保证系统中的软件包总是处于最新状态,提高了系统的安全性和稳定性。
|
|
||||||
4. 丰富的前端工具:APT 提供了多种前端工具,如 APT-GET(命令行)、APT-CACHE(缓存管理)、Synaptic(图形界面)等,满足不同用户的需求。
|
|
||||||
5. 跨平台支持:APT 支持多种操作系统,如 Debian、Ubuntu、Linux Mint 等,方便用户在不同平台上进行软件包管理。
|
|
||||||
|
|
||||||
### 缺点
|
|
||||||
|
|
||||||
1. 性能问题:APT 在处理大量软件包时,可能会出现性能瓶颈,导致系统响应变慢。
|
|
||||||
2. 与非 Debian 系统的兼容性:APT 主要针对基于 Debian 的 Linux 发行版,对于非 Debian 系统的支持相对较弱。
|
|
||||||
3. 错误提示不明确:APT 在出现问题时,有时会给出相对模糊的错误提示,导致用户难以判断问题的具体原因。
|
|
||||||
|
|
||||||
未来 APT 发展的重点主要集中在提升性能、扩展平台支持、优化用户界面、增强依赖关系处理能力以及与其他软件包管理系统的集成。这将有助于为用户提供更快速、更兼容、更直观的软件包管理体验,同时降低软件冲突和不兼容的风险。
|
|
||||||
|
|
||||||
### 常用命令
|
|
||||||
|
|
||||||
| 功能 | APT 命令 | APT-GET 命令 |
|
|
||||||
| ---------------- | -------------------------- | ------------------------------- |
|
|
||||||
| 更新索引 | apt update | apt-get update |
|
|
||||||
| 升级软件包 | apt upgrade | apt-get upgrade |
|
|
||||||
| 处理依赖关系升级 | apt full-upgrade | apt-get dist-upgrade |
|
|
||||||
| 安装软件包 | apt install <package_name> | apt-get install <package_name> |
|
|
||||||
| 删除软件包 | apt remove <package_name> | apt-get remove <package_name> |
|
|
||||||
| 删除软件包及配置 | apt purge <package_name> | apt-get purge <package_name> |
|
|
||||||
| 自动删除依赖 | apt autoremove | apt-get autoremove |
|
|
||||||
| 清理软件包缓存 | apt clean | apt-get clean |
|
|
||||||
| 清理过期缓存 | apt autoclean | apt-get autoclean |
|
|
||||||
| 搜索软件包 | apt search <package_name> | apt-cache search <package_name> |
|
|
||||||
| 显示软件包详情 | apt show <package_name> | apt-cache show <package_name> |
|
|
||||||
| 软件包版本信息 | apt policy <package_name> | apt-cache policy <package_name> |
|
|
||||||
|
|
||||||
## RPM
|
|
||||||
|
|
||||||
RPM(RPM Package Manager,原名为 Red Hat Package Manager)是一种用于管理 Linux 发行版(主要是基于 Red Hat 的发行版,如 Fedora、RHEL 和 CentOS)软件包的工具。RPM 用于安装、升级、卸载和查询软件包及其依赖关系。它使用 .rpm 文件作为软件包的容器格式。
|
|
||||||
|
|
||||||
RPM 的发展始于 1997 年,当时由 Red Hat 的开发人员创建,用于替代当时较为简单的 Linux 软件包管理工具。随着 Linux 的发展,RPM 得到了广泛的应用,成为了许多基于 Red Hat 的发行版的标准软件包管理工具。现在,RPM 在 Fedora、RHEL、CentOS 等发行版中仍被广泛使用。
|
|
||||||
|
|
||||||
RPM 使用 C 语言编写,基于 Berkeley DB 存储软件包的元数据。它使用 .rpm 文件作为软件包格式,这种文件包含了软件包的二进制文件、源代码、元数据以及安装、升级和卸载时的脚本。RPM 通过这些信息来处理软件包之间的依赖关系以及软件包的安装、升级和卸载过程。
|
|
||||||
|
|
||||||
RPM 的设计理念主要集中在以下几点:
|
|
||||||
|
|
||||||
1. 提供一种统一的软件包格式,简化软件的安装和管理过程。
|
|
||||||
2. 软件包之间的依赖关系处理,确保软件正确安装和运行。
|
|
||||||
3. 对软件包进行版本管理,便于升级和回滚。
|
|
||||||
4. 适用于基于 Red Hat 的 Linux 发行版,简化这些发行版的软件包管理工作。
|
|
||||||
|
|
||||||
### 优点
|
|
||||||
|
|
||||||
1. 广泛应用:RPM(Red Hat Package Manager)是 Red Hat 及其衍生发行版(如 Fedora、CentOS、openSUSE)的标准软件包管理工具,具有广泛的应用基础。
|
|
||||||
2. 便捷的软件包管理:RPM 提供了便捷的软件包管理功能,如安装、升级、卸载、查询等。
|
|
||||||
3. 易于分发:RPM 软件包可以方便地在互联网上分发和共享,便于用户安装和升级软件。
|
|
||||||
4. 独立软件包:RPM 软件包包含了软件的所有文件和元数据,可以方便地进行软件包的备份和恢复。
|
|
||||||
5. 数字签名支持:RPM 支持软件包的数字签名,确保软件包的来源和完整性。
|
|
||||||
|
|
||||||
### 缺点
|
|
||||||
|
|
||||||
1. 依赖关系处理:RPM 本身不具备处理软件包依赖关系的能力,需要借助其他工具(如 YUM、DNF)进行依赖关系管理。
|
|
||||||
2. 与 Debian 系统的兼容性:RPM 主要针对基于 Red Hat 的 Linux 发行版,对于 Debian 系统的支持相对较弱。
|
|
||||||
3. 学习成本:RPM 的命令和工具相对繁琐,对于新手可能存在一定的学习成本。
|
|
||||||
|
|
||||||
RPM 未来发展方向主要包括提高与其他软件包管理系统的兼容性、优化用户界面、增强依赖关系处理能力以及提升性能和稳定性。这将有助于为用户提供更广泛的软件支持、更友好的操作体验,同时降低软件冲突和不兼容的风险。
|
|
||||||
|
|
||||||
### 命令
|
|
||||||
|
|
||||||
| 命令 | 功能描述 |
|
|
||||||
| ------------------------------- | ------------------------------- |
|
|
||||||
| rpm -i package.rpm | 安装指定的 RPM 软件包 |
|
|
||||||
| rpm -U package.rpm | 升级指定的 RPM 软件包 |
|
|
||||||
| rpm -e package_name | 卸载指定的 RPM 软件包 |
|
|
||||||
| rpm -qa | 查询所有已安装的 RPM 软件包 |
|
|
||||||
| rpm -q package_name | 查询指定 RPM 软件包的安装状态 |
|
|
||||||
| rpm -qi package_name | 显示指定 RPM 软件包的详细信息 |
|
|
||||||
| rpm -qf file_path | 查询指定文件属于哪个 RPM 软件包 |
|
|
||||||
| rpm -ql package_name | 列出指定 RPM 软件包中的所有文件 |
|
|
||||||
| rpm -qp package.rpm --scripts | 显示指定 RPM 软件包的脚本信息 |
|
|
||||||
| rpm -qR package_name | 显示指定 RPM 软件包的依赖关系 |
|
|
||||||
| rpm -V package_name | 验证指定 RPM 软件包的完整性 |
|
|
||||||
| rpm -ivh package.rpm | 安装指定的 RPM 软件包并显示进度 |
|
|
||||||
| rpm -Uvh package.rpm | 升级指定的 RPM 软件包并显示进度 |
|
|
||||||
|
|
||||||
### 选项
|
|
||||||
|
|
||||||
| 选项 | 功能描述 |
|
|
||||||
| -------------- | ---------------------------------------------- |
|
|
||||||
| -i, --install | 安装指定的 RPM 软件包 |
|
|
||||||
| -U, --upgrade | 升级指定的 RPM 软件包 |
|
|
||||||
| -e, --erase | 卸载指定的 RPM 软件包 |
|
|
||||||
| -q, --query | 查询已安装或指定 RPM 软件包的信息 |
|
|
||||||
| -v, --verbose | 显示详细的操作信息 |
|
|
||||||
| -h, --hash | 显示安装或升级过程中的进度条 |
|
|
||||||
| -F, --freshen | 升级已安装软件包的新版本,不安装未安装的软件包 |
|
|
||||||
| -V, --verify | 验证指定 RPM 软件包的完整性 |
|
|
||||||
| -K, --checksig | 检查指定 RPM 软件包的数字签名 |
|
|
||||||
| --nosignature | 不检查数字签名 |
|
|
||||||
| --nodeps | 不检查依赖关系 |
|
|
||||||
| --force | 强制执行操作,即使存在依赖关系或文件冲突等问题 |
|
|
||||||
| --test | 测试操作,不实际执行操作 |
|
|
||||||
|
|
||||||
## Yum
|
|
||||||
|
|
||||||
Yum(Yellowdog Updater Modified)是一种在 Linux 系统上自动更新、安装和卸载软件包的开源软件包管理器。它是 Fedora 和 Red Hat Enterprise Linux(RHEL)等 Linux 发行版中的标准软件包管理器之一。
|
|
||||||
|
|
||||||
Yum 最初由 Seth Vidal 编写,2003 年首次在 Fedora Core 1 中引入。Yum 的设计理念是为了改进 Red Hat Linux 中的软件包管理器,使其更快、更易用和更灵活。目前,Yum 已成为 Red Hat Enterprise Linux(RHEL)和 CentOS 等 Linux 发行版中的标准软件包管理器。
|
|
||||||
|
|
||||||
Yum 是用 Python 编写的,使用了 RPM 包管理系统。Yum 通过配置软件仓库和更新源,实现对软件包的自动更新、安装和卸载。Yum 将所有软件包的信息存储在本地的缓存中,这样可以提高查询速度,并且减轻软件仓库服务器的负担。
|
|
||||||
|
|
||||||
Yum 的设计理念是易用、灵活、可扩展。Yum 提供了一个简单的命令行界面,使用户可以轻松地搜索、安装、升级和删除软件包。Yum 的配置文件可以轻松地添加、删除和编辑,这使得用户可以轻松地添加自己的软件仓库和更新源。Yum 还支持插件机制,可以通过插件扩展 Yum 的功能。
|
|
||||||
|
|
||||||
### 优点
|
|
||||||
|
|
||||||
- 方便的软件包管理:Yum 可以自动解决依赖关系,自动下载和安装软件包,使软件包管理变得简单和快速。
|
|
||||||
- 可扩展性:用户可以添加自己的软件仓库和更新源,也可以通过插件扩展 Yum 的功能。
|
|
||||||
- 自动更新:Yum 可以在后台自动更新软件包,使系统保持最新状态。
|
|
||||||
- 稳定性:Yum 使用 RPM 包管理系统,可以确保软件包的安全和稳定性。
|
|
||||||
|
|
||||||
### 缺点
|
|
||||||
|
|
||||||
- 更新速度慢:Yum 需要从远程服务器下载软件包,因此更新速度可能较慢。
|
|
||||||
- 软件包版本滞后:由于软件包需要经过 Fedora 和 Red Hat 的审核,因此软件包的版本可能比其他 Linux 发行版滞后。
|
|
||||||
- 依赖关系不够灵活:Yum 的依赖关系比较严格,可能会出现无法安装软件包的情况。
|
|
||||||
|
|
||||||
未来 Yum 的发展方向主要是加强容器化支持、多架构支持、安全性、依赖关系和性能等方面,以满足快速部署和管理的需求,以适应不断变化的应用场景和用户需求。
|
|
||||||
|
|
||||||
### 常用命令
|
|
||||||
|
|
||||||
| 命令 | 功能描述 |
|
|
||||||
| -------------------------------- | -------------------------------- |
|
|
||||||
| yum check-update | 检查可用更新 |
|
|
||||||
| yum update | 更新已安装的软件包 |
|
|
||||||
| yum install package_name | 安装指定软件包 |
|
|
||||||
| yum remove package_name | 卸载指定软件包 |
|
|
||||||
| yum search keywords | 搜索包含指定关键字的软件包 |
|
|
||||||
| yum info package_name | 显示指定软件包的详细信息 |
|
|
||||||
| yum list | 列出所有可安装软件包的信息 |
|
|
||||||
| yum clean all | 清理软件包缓存和元数据 |
|
|
||||||
| yum deplist package_name | 显示指定软件包的依赖关系 |
|
|
||||||
| yum history | 显示软件包操作历史记录 |
|
|
||||||
| yum downgrade package_name | 降级指定软件包到较旧的版本 |
|
|
||||||
| yum provides file_path | 查找提供指定文件的软件包 |
|
|
||||||
| yum groupinstall package_group | 安装指定的软件包组 |
|
|
||||||
| yum groupremove package_group | 卸载指定的软件包组 |
|
|
||||||
| yum repolist | 显示已启用的所有软件包仓库的列表 |
|
|
||||||
|
|
||||||
## DNF
|
|
||||||
|
|
||||||
DNF(Dandified YUM)是一个基于 YUM 的新一代软件包管理器,由 Red Hat 开发,旨在改善 YUM 的性能和稳定性,并提供更多的功能和灵活性。DNF 命令与 YUM 命令非常相似,可以方便地在基于 Fedora、CentOS 和 RHEL 等系统上进行软件包管理。
|
|
||||||
|
|
||||||
DNF 最初是由 Fedora 项目推出的 YUM 的替代品,目的是提供更好的性能、更好的内存管理和更好的依赖关系解决方案。随着时间的推移,DNF 在 Red Hat 及其衍生产品中逐渐取代了 YUM。
|
|
||||||
|
|
||||||
DNF 的实现基于 Python,使用 RPM 库进行底层软件包管理。DNF 的核心设计思想是提供更好的性能、内存管理和依赖关系解决方案,同时支持多个软件包仓库、插件和模块化架构。
|
|
||||||
|
|
||||||
DNF 的设计理念主要包括以下几点:
|
|
||||||
|
|
||||||
1. 高性能和稳定性:DNF 旨在提供更快速和更可靠的软件包管理体验,减少因软件包管理导致的系统崩溃和故障。
|
|
||||||
|
|
||||||
2. 内存管理:DNF 的内存管理机制与 YUM 不同,可以有效减少内存占用,提高软件包管理的效率。
|
|
||||||
|
|
||||||
3. 依赖关系解决方案:DNF 采用更先进的依赖关系解决方案,可以更好地处理复杂的软件包依赖关系和冲突问题。
|
|
||||||
|
|
||||||
4. 模块化设计:DNF 的架构采用模块化设计,可以方便地增加新的功能和插件,满足不同用户的需求。
|
|
||||||
|
|
||||||
### 优点
|
|
||||||
|
|
||||||
1. 高性能:DNF 的性能比 YUM 更快,可以快速处理大量软件包操作。
|
|
||||||
2. 稳定性:DNF 的内存管理机制比 YUM 更稳定,可以有效降低系统崩溃和故障的风险。
|
|
||||||
3. 依赖关系处理:DNF 可以处理复杂的依赖关系和冲突问题,确保软件包的安装和升级不会导致系统问题。
|
|
||||||
4. 模块化架构:DNF 的模块化架构可以方便地增加新的功能和插件,提供更好的扩展性和灵活性。
|
|
||||||
|
|
||||||
### 缺点
|
|
||||||
|
|
||||||
1. 兼容性问题:由于 DNF 是一个相对较新的软件包管理器,可能存在与旧版系统或其他软件包管理工具不兼容的问题。
|
|
||||||
2. 学习成本:虽然 DNF 命令与 YUM 命令非常相似,但对于不熟悉 Linux 命令行的新手用户而言,仍然需要一定的学习成本。
|
|
||||||
|
|
||||||
DNF 的未来发展方向主要包括提高性能和稳定性、增强依赖关系处理能力、增加新功能和插件以及提高用户体验。作为一个现代化、高效、稳定的软件包管理器,DNF 在 Linux 系统中的应用前景广阔。
|
|
||||||
|
|
||||||
### 常用命令
|
|
||||||
|
|
||||||
| 命令 | 说明 |
|
|
||||||
| ------------------ | ------------------------------------------ |
|
|
||||||
| dnf install | 安装软件包 |
|
|
||||||
| dnf upgrade | 升级已安装的软件包 |
|
|
||||||
| dnf remove | 删除软件包 |
|
|
||||||
| dnf search | 搜索软件包 |
|
|
||||||
| dnf info | 查看软件包信息 |
|
|
||||||
| dnf list | 列出已安装的软件包 |
|
|
||||||
| dnf repository | 管理软件包仓库 |
|
|
||||||
| dnf group | 管理软件包组 |
|
|
||||||
| dnf history | 查看软件包操作历史记录 |
|
|
||||||
| dnf config-manager | 管理 DNF 配置文件中的 YUM 软件库管理器配置 |
|
|
||||||
| dnf module | 管理软件包模块 |
|
|
||||||
| dnf clean | 清理缓存和临时文件 |
|
|
||||||
| dnf check-update | 检查软件包更新 |
|
|
||||||
| dnf system-upgrade | 系统升级 |
|
|
||||||
| dnf repoquery | 查询软件包依赖关系和文件信息 |
|
|
||||||
| dnf download | 下载软件包 |
|
|
||||||
| dnf autoremove | 自动删除已不需要的软件包及其依赖 |
|
|
||||||
|
|
||||||
## Pacman
|
|
||||||
|
|
||||||
Pacman 是 Arch Linux 发行版的官方软件包管理器,其名称缩写来自“Package Manager(软件包管理器)”。Pacman 能够管理本地软件包、从官方仓库中获取软件包、以及从第三方仓库中获取软件包,具有很高的灵活性。
|
|
||||||
|
|
||||||
Pacman 最初由 Judd Vinet 在 2002 年创建,旨在提供一种简单、快速、可靠的软件包管理器,用于管理 Arch Linux 中的软件包。Pacman 的底层软件包管理库 libalpm 具有很高的稳定性和性能,能够在短时间内完成大规模的软件包操作。
|
|
||||||
|
|
||||||
Pacman 的实现基于 C++ 语言编写的命令行工具,使用 libalpm 库实现底层软件包管理。libalpm 是一个独立的库,提供了一组用于软件包操作的 API,包括软件包的安装、升级、删除、查询等。
|
|
||||||
|
|
||||||
Pacman 的设计理念主要包括以下几点:
|
|
||||||
|
|
||||||
1. 简单易用:Pacman 的命令简单、直观,容易上手,适合各种用户使用。
|
|
||||||
2. 高效可靠:Pacman 的操作速度快,稳定性高,能够满足大规模软件包管理的需求。
|
|
||||||
3. 可定制性:Pacman 支持多种自定义配置选项,可以根据用户的需求进行灵活设置。
|
|
||||||
4. 灵活性:Pacman 可以管理本地软件包、从官方仓库中获取软件包、以及从第三方仓库中获取软件包,具有很高的灵活性。
|
|
||||||
|
|
||||||
### 优点
|
|
||||||
|
|
||||||
1. 快速:Pacman 操作速度快,能够在短时间内完成大规模软件包操作。
|
|
||||||
2. 稳定性高:Pacman 的底层软件包管理库 libalpm 具有很高的稳定性,能够有效降低系统崩溃和故障的风险。
|
|
||||||
3. 灵活性:Pacman 可以管理本地软件包、从官方仓库中获取软件包、以及从第三方仓库中获取软件包,具有很高的灵活性。
|
|
||||||
4. 自定义性:Pacman 支持多种自定义配置选项,可以根据用户的需求进行灵活设置。
|
|
||||||
5. 易用性:Pacman 的命令简单、直观,容易上手,适合各种用户使用。
|
|
||||||
|
|
||||||
### 缺点
|
|
||||||
|
|
||||||
1. 依赖关系处理较为严格:Pacman 的依赖关系处理较为严格,可能会对某些软件包的安装和升级造成一定的限制。
|
|
||||||
2. 可用软件包数量较少:与其他一些流行的发行版相比,Arch Linux 的软件包数量相对较少,这可能会导致一些软件包无法得到支持。
|
|
||||||
|
|
||||||
Pacman 是 Arch Linux 发行版的官方软件包管理器,具有简单、快速、可靠、灵活等优点,未来的发展方向包括提高性能和稳定性、增强依赖关系处理能力、增加新功能和插件以及提高用户体验。作为 Arch Linux 的核心软件包管理器,Pacman 在未来仍将发挥重要作用。
|
|
||||||
|
|
||||||
### 命令
|
|
||||||
|
|
||||||
| 命令 | 说明 |
|
|
||||||
| ---------------------------- | -------------------------------------------- |
|
|
||||||
| pacman -S package | 安装软件包 |
|
|
||||||
| pacman -Syu | 升级系统中所有已安装的软件包 |
|
|
||||||
| pacman -Sy package | 同步软件包数据库并安装指定软件包 |
|
|
||||||
| pacman -Ss package | 搜索软件包 |
|
|
||||||
| pacman -Qi package | 查询已安装软件包信息 |
|
|
||||||
| pacman -Ql package | 列出软件包的文件列表 |
|
|
||||||
| pacman -Qu | 检查软件包更新 |
|
|
||||||
| pacman -Qs package | 搜索已安装软件包 |
|
|
||||||
| pacman -R package | 删除软件包 |
|
|
||||||
| pacman -Rs package | 删除软件包及其所有没有被其他软件包依赖的文件 |
|
|
||||||
| pacman -Rns package | 删除软件包及其所有依赖包、配置文件和数据文件 |
|
|
||||||
| pacman -Sc | 清理不再需要的软件包缓存 |
|
|
||||||
| pacman -Scc | 清除所有软件包缓存 |
|
|
||||||
| pacman -Sw package | 仅下载软件包而不安装 |
|
|
||||||
| pacman -Syy | 强制更新软件包数据库 |
|
|
||||||
| pacman -Syu --ignore package | 升级系统时忽略指定的软件包 |
|
|
||||||
|
|
||||||
### 选项
|
|
||||||
|
|
||||||
| 选项 | 说明 |
|
|
||||||
| ------------------- | ----------------------------------------------- |
|
|
||||||
| -S, --sync | 安装指定软件包 |
|
|
||||||
| -U, --upgrade | 升级软件包 |
|
|
||||||
| -R, --remove | 删除软件包 |
|
|
||||||
| -Ss, --search | 搜索软件包 |
|
|
||||||
| -Qi, --info | 查询已安装软件包信息 |
|
|
||||||
| -Ql, --list | 列出软件包的文件列表 |
|
|
||||||
| -Qu, --upgrades | 检查软件包更新 |
|
|
||||||
| -Qs, --search | 搜索已安装软件包 |
|
|
||||||
| -Rs, --recursive | 删除软件包及其所有没有被其他软件包依赖的文件 |
|
|
||||||
| -Rns, --recursive | 删除软件包及其所有依赖包、配置文件和数据文件 |
|
|
||||||
| -Sc, --clean | 清理不再需要的软件包缓存 |
|
|
||||||
| -Scc, --clean | 清除所有软件包缓存 |
|
|
||||||
| -Sw, --downloadonly | 仅下载软件包而不安装 |
|
|
||||||
| -Syy, --refresh | 强制更新软件包数据库 |
|
|
||||||
| --noconfirm | 不需要用户确认 |
|
|
||||||
| --needed | 只安装必需的依赖包 |
|
|
||||||
| --noprogressbar | 不显示下载进度条 |
|
|
||||||
| --color | 指定输出颜色 |
|
|
||||||
| --overwrite | 覆盖已存在的文件 |
|
|
||||||
| --ignore | 忽略指定软件包 |
|
|
||||||
| --arch | 指定安装软件包的架构,如 i686、x86_64、any 等等 |
|
|
||||||
| --force | 强制执行操作,即使会导致不良影响 |
|
|
||||||
| --asdeps | 将软件包标记为依赖包而不是显式安装的软件包 |
|
|
||||||
| --asexplicit | 将软件包标记为显式安装的软件包而不是依赖包 |
|
|
||||||
|
|
||||||
## 仓库源
|
|
||||||
|
|
||||||
仓库源是指软件包管理器所用的软件仓库,用于提供软件包的下载和更新。常见的 Linux 发行版都有官方仓库源,也有一些社区提供的非官方仓库源,以及一些专门为国内用户提供的镜像源。
|
|
||||||
|
|
||||||
### 官方
|
|
||||||
|
|
||||||
官方仓库源是由 Linux 发行版官方维护的软件仓库,提供的软件包通常经过严格的测试和验证,保证了软件的稳定性和安全性。用户可以通过软件包管理器直接访问官方仓库源,以获取最新的软件包和更新。
|
|
||||||
|
|
||||||
- Debian 官方源:<http://deb.debian.org/>
|
|
||||||
- Debian 安全源:<https://security.debian.org/>
|
|
||||||
- Ubuntu 官方源:<http://archive.ubuntu.com/>
|
|
||||||
|
|
||||||
- CentOS 官方源:<http://mirror.centos.org/>
|
|
||||||
|
|
||||||
### 中国
|
|
||||||
|
|
||||||
由于国内网络环境的特殊性,使用国外官方仓库源可能会遇到较慢的下载速度或无法连接的问题。因此,一些开源社区提供了针对国内用户的镜像仓库源,用于加速软件包下载和更新。
|
|
||||||
|
|
||||||
- 阿里云开源镜像站:<http://mirrors.aliyun.com/>
|
|
||||||
- 中科大开源软件镜像站:<https://mirrors.ustc.edu.cn/>
|
|
||||||
- 清华大学开源软件镜像站:<https://mirrors.tuna.tsinghua.edu.cn/>
|
|
||||||
|
|
||||||
### 一键脚本
|
|
||||||
|
|
||||||
LinuxMirrors 是一个由 SuperManito 维护的 Linux 镜像站点列表。该项目旨在为 Linux 用户提供可靠、高速的镜像站点列表,用户可以通过该列表轻松找到离自己最近的镜像站点,以加速软件包的下载和更新。
|
|
||||||
|
|
||||||
- LinuxMirrors: <https://github.com/SuperManito/LinuxMirrors>
|
|
||||||
|
|
||||||
```shell
|
|
||||||
bash <(curl -sSL https://gitee.com/SuperManito/LinuxMirrors/raw/main/ChangeMirrors.sh)
|
|
||||||
```
|
|
Loading…
Reference in New Issue
Block a user