介绍

Ubuntu 使用 APT (Advanced Packaging Tool) 和底层的 dpkg 工具来管理系统上的软件包。APT 处理软件源、依赖关系和元数据,而 dpkg 则执行实际的软件包安装和卸载操作。系统的软件源配置保存在 /etc/apt/sources.list 文件和 /etc/apt/sources.list.d/ 目录中,包状态信息存储在 /var/lib/dpkg/status 等位置。

1. 使用 APT 安装软件库

最基本的安装命令是 sudo apt install <package_name>。APT 会自动处理依赖关系。

sudo apt update         # 首先更新软件包列表
sudo apt install python3-numpy  # 安装例如 python3-numpy

要安装特定版本的软件包,可以使用 = 指定版本。首先需要查询可用版本:

apt-cache policy python3-numpy  # 查询可用版本及其优先级
apt-cache madison python3-numpy # 另一种方式列出仓库中的版本,以简洁的格式列出仓库中的可用版本
apt list -a python3 # 使用 `apt list -a` 也可以列出某个包的所有可用版本

# 然后安装指定版本
sudo apt install python3-numpy=1.21.0-1ubuntu1

对于本地 deb 包,使用 dpkg 安装,但通常需要手动解决依赖:

sudo dpkg -i package_file.deb   # 安装本地 deb 包
sudo apt-get -f install         # 修复缺失的依赖

有时需要安装开发库(包含头文件和静态库),包名通常以 -dev 结尾:

sudo apt install libz-dev  # 例如安装 zlib 开发库

2. 安装后信息管理

软件包安装后,您可以查看其详细信息、安装的文件列表以及验证安装。

  • 使用 dpkg -l 列出所有已安装的包,也可用 grep 过滤:
    dpkg -l | grep python  # 列出名称中包含 'python' 的已安装包
    
  • 使用 dpkg -L 查看软件包安装的文件列表:
    dpkg -L python3       # 列出 python3 包安装的所有文件
    
  • 使用 dpkg -S 查找某个文件是由哪个包安装的:
    dpkg -S /usr/bin/python3  # 查看 /usr/bin/python3 文件属于哪个包
    
  • 使用 dpkg -s 或 apt show 查看软件包的详细信息(版本、依赖、描述等):
    dpkg -s python3
    apt show python3
    
  • 验证安装:通常可以通过运行软件或查看版本来确认。
    python3 --version      # 验证 Python 版本
    python3 -c "import numpy; print(numpy.__version__)"  # 验证 numpy 库
    

3. 软件包卸载

卸载软件包有两种方式:

  • remove:移除软件包但保留配置文件。
    sudo apt remove python3-numpy
    
  • purge:彻底移除软件包及其配置文件。
    sudo apt purge python3-numpy
    # 或者
    sudo apt remove --purge python3-numpy
    

卸载后,可以使用 autoremove 清理不再需要的依赖包:

sudo apt autoremove  # 自动移除不再需要的依赖包

4. 管理软件源

软件源决定了系统从哪里获取软件包。

  • 主要的源列表文件是 /etc/apt/sources.list。
  • 额外的源可以放在 /etc/apt/sources.list.d/ 目录下的 .list 文件中。
  • 添加 PPA (Personal Package Archive) 是获取第三方软件常见方式:
    sudo add-apt-repository ppa:deadsnakes/ppa  # 添加一个提供多版本 Python 的 PPA
    sudo apt update                              # 添加源后必须更新列表
    
  • 手动添加源:可以编辑 /etc/apt/sources.list 或在 /etc/apt/sources.list.d/ 下创建新文件,格式如下:
    deb http://archive.ubuntu.com/ubuntu focal main restricted
    
    更改源后务必运行 sudo apt update。

5. 高级技巧与最佳实践

  • 使用 aptitude:这是 APT 的一个基于文本界面的替代前端,提供更强大的搜索和解决依赖问题的能力。
    sudo aptitude install python3-numpy
    
  • 清理缓存:定期清理下载的软件包缓存可以释放磁盘空间。
    sudo apt clean    # 删除所有已下载的软件包文件
    sudo apt autoclean # 删除已无法从仓库中下载的旧软件包文件
    
  • 保持系统更新:定期更新系统和软件包以获得安全补和新功能。
    sudo apt update   # 更新软件包列表
    sudo apt upgrade  # 升级所有可升级的软件包
    # 或者进行完整的系统升级(包括需要更改依赖关系的更新)
    sudo apt full-upgrade
    
  • 仅下载软件包:有时您可能只想下载包而不安装(例如用于离线安装)。
    sudo apt download python3-numpy  # 下载指定的软件包到当前目录
    

补充

通常来说,通过 apt 安装的软件包,其文件会按照类型分散在系统的特定目录中,这遵循了 Linux 文件系统层次结构标准(FHS),以便于统一管理。

📁 软件包文件的常见安装位置

文件类型常见目录路径
可执行文件/usr/bin, /usr/sbin
库文件/usr/lib, /usr/lib/x86_64-linux-gnu/
配置文件/etc
文档和手册页/usr/share/doc, /usr/share/man
共享资源文件/usr/share
软件包下载缓存/var/cache/apt/archives/

🔍 查询具体软件包的安装位置

如果你想确切知道某个特定软件包的文件都安装到了哪里,可以使用 dpkg 命令:

dpkg -L <package-name>

例如,查看 curl 包的文件列表:

dpkg -L curl

反之,如果你想查找某个特定文件属于哪个已安装的软件包,可以使用:

dpkg -S <full-path-to-file>

例如,查找 /usr/bin/curl 文件的归属包:

dpkg -S /usr/bin/curl

📦 关于下载的软件包缓存

使用 apt 安装软件时,会先将 .deb 格式的软件包文件下载到 /var/cache/apt/archives/ 目录下,然后再进行安装。定期清理这个目录可以释放磁盘空间:

  • sudo apt clean:清除 /var/cache/apt/archives/ 目录下所有已下载的软件包文件(*.deb)。
  • sudo apt autoclean:清除当前已安装软件包的旧版本软件包文件,保留最新版本的缓存。

⚠️ 重要说明

  • 默认路径:上述目录是大多数通过 apt 安装的软件包遵循的默认路径。但并非绝对,某些软件包可能根据其特性或维护者的选择将文件安装在稍有不同的位置。
  • 优先使用查询命令:要获取最准确的信息,务必使用 dpkg -L 命令来查看特定软件包的实际安装文件列表。
  • 避免手动更改:不建议手动更改这些系统目录中的文件或尝试修改默认安装路径,这可能会破坏软件的依赖关系和正常功能。

更多推荐