# Linux 软件管理

> 关键词：`rpm`, `yum`, `apt-get`

#### 博客作者：联系请[点击](https://hezhiqiang.gitbook.io/about-the-author/lian-xi-zuo-zhe)，搬运不易，希望请作者喝咖啡，可以点击[联系博客作者](https://hezhiqiang.gitbook.io/about-the-author/lian-xi-zuo-zhe)

## 1. rpm <a href="#id-1-rpm" id="id-1-rpm"></a>

> rpm 命令是 RPM 软件包的管理工具，rpm 原本是 Red Hat Linux 发行版专门用来管理 Linux 各项套件的程序，由于它遵循 GPL 规则且功能强大方便，因而广受欢迎，逐渐受到其他发行版的采用，RPM 套件管理方式的出现，让 Linux 易于安装，升级，间接提升了 Linux 的适用度。​

示例：

（1）安装 rpm 包

```
rpm -ivh xxx.rpm
```

（2）安装.src.rpm 软件包

这类软件包是包含了源代码的 rpm 包，在安装时需要进行编译

```
rpm -i xxx.src.rpm
cd /usr/src/redhat/SPECS
rpmbuild -bp xxx.specs             #一个和你的软件包同名的specs文件
cd /usr/src/redhat/BUILD/xxx/      #一个和你的软件包同名的目录
./configure                        #这一步和编译普通的源码软件一样，可以加上参数
make
make install
```

（3）卸载 rpm 软件包

使用命令 `rpm -e 包名`，包名可以包含版本号等信息，但是不可以有后缀.rpm，比如卸载软件包 proftpd-1.2.8-1，可以使用下列格式：

```
rpm -e proftpd-1.2.8-1
rpm -e proftpd-1.2.8
rpm -e proftpd-
rpm -e proftpd
```

不可以是下列格式：

```
rpm -e proftpd-1.2.8-1.i386.rpm
rpm -e proftpd-1.2.8-1.i386
rpm -e proftpd-1.2
rpm -e proftpd-1
```

有时会出现一些错误或者警告：

```
... is needed by ...
```

这说明这个软件被其他软件需要，不能随便卸载，可以用 rpm -e --nodeps 强制卸载

（4）查看与 rpm 包相关的文件和其他信息

```
rpm -qa # 列出所有安装过的包
```

## 2. yum <a href="#id-2-yum" id="id-2-yum"></a>

> yum 命令是在 Fedora 和 RedHat 以及 SUSE 中基于 rpm 的软件包管理器，它可以使系统管理人员交互和自动化地更细与管理 RPM 软件包，能够从指定的服务器自动下载 RPM 包并且安装，可以自动处理依赖性关系，并且一次安装所有依赖的软体包，无须繁琐地一次次下载、安装。​

示例：

部分常用的命令包括：

* 自动搜索最快镜像插件：`yum install yum-fastestmirror`
* 安装 yum 图形窗口插件：`yum install yumex`
* 查看可能批量安装的列表：`yum grouplist`

**安装**

```
yum install              #全部安装
yum install package1     #安装指定的安装包package1
yum groupinsall group1   #安装程序组group1
```

**更新和升级**

```
yum update               #全部更新
yum update package1      #更新指定程序包package1
yum check-update         #检查可更新的程序
yum upgrade package1     #升级指定程序包package1
yum groupupdate group1   #升级程序组group1
```

**查找和显示**

```
yum info package1      #显示安装包信息package1
yum list               #显示所有已经安装和可以安装的程序包
yum list package1      #显示指定程序包安装情况package1
yum groupinfo group1   #显示程序组group1信息yum search string 根据关键字string查找安装包
yum search <keyword>   #查找软件包
```

**删除程序**

```
yum remove <package_name>          #删除程序包package_name
yum groupremove group1             #删除程序组group1
yum deplist package1               #查看程序package1依赖情况
```

**清除缓存**

```
yum clean packages       #清除缓存目录下的软件包
yum clean headers        #清除缓存目录下的 headers
yum clean oldheaders     #清除缓存目录下旧的 headers
```

### 2.1. yum 源 <a href="#id-2-1-yum-yuan" id="id-2-1-yum-yuan"></a>

yum 的默认源是国外的，下载速度比较慢，所以最好替换为一个国内的 yum 源。

| 推荐 yum 国内源                     | 源地址                                                                                                                        |
| ------------------------------ | -------------------------------------------------------------------------------------------------------------------------- |
| ​<http://mirrors.163.com/>​    | Centos6：<http://mirrors.aliyun.com/repo/Centos-6.repo> Centos7：<http://mirrors.aliyun.com/repo/Centos-7.repo>​             |
| ​<http://mirrors.aliyun.com/>​ | Centos6：<http://mirrors.163.com/.help/CentOS6-Base-163.repo> Centos7：<http://mirrors.163.com/.help/CentOS7-Base-163.repo>​ |

> 🔔 注意：Cento5 已废弃，只能使用 <http://vault.centos.org/> 替换，但由于是国外镜像，速度较慢。

替换方法，以 aliyun CentOS7 为例：

```
cp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
yum clean all
yum makecache
```

## 3. apt-get <a href="#id-3-apt-get" id="id-3-apt-get"></a>

> apt-get 命令是 Debian Linux 发行版中的 APT 软件包管理工具。所有基于 Debian 的发行都使用这个包管理系统。deb 包可以把一个应用的文件包在一起，大体就如同 Windows 上的安装文件。​

示例：

使用 apt-get 命令的第一步就是引入必需的软件库，Debian 的软件库也就是所有 Debian 软件包的集合，它们存在互联网上的一些公共站点上。把它们的地址加入，apt-get 就能搜索到我们想要的软件。/etc/apt/sources.list 是存放这些地址列表的配置文件，其格式如下：

deb \[web 或 ftp 地址]\[发行版名字] \[main/contrib/non-free] 我们常用的 Ubuntu 就是一个基于 Debian 的发行，我们使用 apt-get 命令获取这个列表，以下是我整理的常用命令：

在修改 /etc/apt/sources.list 或者 /etc/apt/preferences 之后运行该命令。

```
# 更新 apt-get
apt-get update

# 安装一个软件包
apt-get install packagename

# 卸载一个已安装的软件包（保留配置文件）
apt-get remove packagename

# 卸载一个已安装的软件包（删除配置文件）
apt-get –purge remove packagename

# 如果需要空间的话，可以让这个命令来删除你已经删掉的软件
apt-get autoclean apt

# 把安装的软件的备份也删除，不过这样不会影响软件的使用的
apt-get clean

# 更新所有已安装的软件包
apt-get upgrade

# 将系统升级到新版本
apt-get dist-upgrade
```

## 4. 参考资料 <a href="#id-4-can-kao-zi-liao" id="id-4-can-kao-zi-liao"></a>

* ​<http://www.runoob.com/linux/linux-yum.html>


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://hezhiqiang.gitbook.io/about-the-author/linux-yun-wei-guan-li/linux-ruan-jian-guan-li.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
