跳转至

包管理

APT

在 Ubuntu 上,APT(Advanced Package Tool) 是官方默认且最主流的包管理器。

常用命令

sudo apt update          # 更新软件源列表
sudo apt install <包名>   # 安装软件
sudo apt remove <包名>    # 卸载软件
sudo apt upgrade         # 升级所有已安装包

dpkg

底层工具,直接操作 .deb 包,不解决依赖。

常用命令

sudo dpkg -i <package.deb>   # 安装本地 .deb 包
sudo dpkg -r <包名>          # 卸载
适用场景:手动安装第三方 .deb 包(通常配合 apt 解决依赖)。

brew

安装

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

下载依赖项:

sudo apt-get install build-essential

配置

加入 PATH:

echo >> /home/Henry/.bashrc
echo 'eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv bash)"' >> /home/Henry/.bashrc
eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv bash)"

命令

清理下载的包和临时文件:

brew cleanup

| 安装位置:用户目录 (如 /home/linuxbrew/.linuxbrew/usr/local) | | 权限要求 | 通常需要 root 权限 (sudo) | 通常不需要 sudo (以普通用户身份运行) | | 软件来源 | 发行版的官方仓库 (由社区或维护者打包) | 上游软件的官方源码或二进制 (更新通常更快) | | 依赖管理 | 严格依赖系统库,版本通常较旧但极其稳定 | 倾向于自建依赖或下载最新版,避免污染系统库 | | 定位 | 管理操作系统本身的组件和基础软件 | 管理用户的开发工具、桌面应用和实用程序 |

3. 如果用 Brew 安装 GCC,再用 Apt 安装 GCC,会装两遍吗?

答案是:是的,它们会安装两遍,且互不干扰。

为什么会装两遍?

因为它们的安装路径完全不同,操作系统把它们视为两个不同的程序:

  1. Apt 安装的 GCC:
    • 通常被安装到 /usr/bin/gcc
    • 这是系统级的编译器,系统内核或其他依赖它的软件可能会用到。
  2. Brew 安装的 GCC:
    • 通常被安装到 /home/linuxbrew/.linuxbrew/bin/gcc (或者是你 Homebrew 前缀目录下的 bin 文件夹)。
    • 这是一个独立的副本,专门给用户使用。

哪一个会被优先使用?

这取决于你的环境变量 $PATH 的配置顺序。

  • 如果你在终端输入 gcc,系统会从 $PATH 的第一个路径开始找。
  • 通常安装完 Brew 后,它会提示你把它的路径加到 $PATH最前面
  • 结果: 如果你输入 gcc,你实际运行的是 Brew 安装的版本(因为它在路径前面)。如果你想用 Apt 安装的版本,可能需要输入全路径 /usr/bin/gcc 或者调整 $PATH

已安装软件的位置

软件包文件(.deb)缓存位置

下载的 .deb 安装包默认存储在:

/var/cache/apt/archives/

安装后,这些文件通常会被保留。如果需要清理缓存,可以运行:

sudo apt clean      # 删除所有缓存包
sudo apt autoclean  # 仅删除过时的缓存包

已安装软件的文件位置

安装后,软件的文件会分散到系统的各个目录中,主要包括:

  • 二进制可执行文件

    /usr/bin/      # 用户命令
    /usr/sbin/     # 系统管理命令
    /usr/local/bin/ # 用户手动编译安装的软件(非 apt 安装)
    

  • 库文件

    /usr/lib/      # 动态库和静态库
    /usr/lib/x86_64-linux-gnu/ # 64 位系统库文件
    

  • 配置文件

    /etc/          # 软件的全局配置文件
    

  • 头文件(开发用)

    /usr/include/  # C/C++ 头文件
    

  • 共享数据

    /usr/share/    # 文档、图标、字体等共享数据
    

  • 服务与系统文件

    /lib/systemd/system/  # systemd 服务单元文件
    /etc/init.d/          # SysVinit 启动脚本(旧系统)
    

查询已安装文件的位置

如果想查看某个已安装软件包的文件具体安装到哪里,可以使用:

dpkg -L <package-name>
例如:
dpkg -L curl

查找命令对应的软件包

如果知道某个命令,但不确定它属于哪个软件包,可以运行:

dpkg -S $(which <command>)

例如:

dpkg -S $(which curl)