Debian 系列包管理

Table of Contents

1. apt-get

1.1. apt-get upgrade 和 apt-get dist-upgrade 区别

upgrade 会在不改变依赖的情况下对已安装的包升级,upgrade 则会改变依赖。

比如某个软件依赖 A、B、C 三个库,在软件有更新的情况下,upgrade 会升级;但是如果依赖从 A、B、C 变成了 A、B、E,那么 upgrade 就不会升级;dist-upgrade 会安装 E,如果没有其他程序依赖 C,还会删除 C。

所以 dist-upgrade 比 upgrade 更有风险些。如果是桌面版,可以用 dist-upgrade;服务器版的话需要酌情考虑。

1.2. 下载源码

sudo apt install dpkg-dev
sudo apt source 包名

1.3. 安装编译所需的依赖

sudo apt build-dep 包名

1.4. 设置代理

在/etc/apt/apt.conf加入:

Acquire::http::Proxy "http://[proxy_host]:[port]";

1.5. 自定义 cache 目录

dir::cache::archives /new/cache;

2. apt-file

今天源码编译了 Apache,编译中没出问题,但运行时提示无法加载 xxx.so 库;同日下午,编译 pypy 的时候,遇到 C 源码中找不到某头文件的问题。

知文件名不知包名,这种情况屡见。可用 apt-file 命令搜索某文件在哪些包中有:

apt-file search 包名

第一次使用 apt-file,需更新它的数据库:

apt-file update

3. apt、apt-get 和 aptitude

apt-get 系列的命令过于分散,较为显著的就是搜索软件包使用 apt-cache search,安装又是 apt-get install。apt 命令就是社区为了给普通用户一个较为统一的包管理命令。

而 aptitude 又是另一套包管理命令,并还自带一个终端下的图形界面。除此之外,aptitude 还提供了一些更加方便、直观的命令,比如将 apt-get upgrade 和 apt-get dist-upgrade 这样含糊的命令改成了 aptitude safe-upgrade 和 aptitude full-upgrade。

另外,aptitude 还提供了一些实用的命令,如:

aptitude why [软件包] 显示软件包的依赖
aptitude why-not [软件包] 显示软件包的冲突情况