Ubuntu 22.04 build-essential 安装与命令参数详解
详解 Ubuntu 22.04 中 build-essential 元包的在线与离线安装流程,以及 apt、apt-cache、dpkg 系列命令参数的真实回显。
Ubuntu 22.04 build-essential 安装与命令参数详解
目标:在 Ubuntu 22.04 x86_64 服务器上从 0 到 1 完成 build-essential 元包的在线安装与离线安装,并逐命令实测 apt、apt-cache、dpkg 系列命令及其参数的真实输入与输出。本文所有命令与回显均在 Ubuntu 22.04.5 LTS(x86_64)环境实测通过,输出逐行照抄,未作任何删改。
💡 说明:本文实测环境以 root 用户操作,命令直接执行;若使用普通用户,请在每条命令前添加
sudo前缀。
一、环境信息
| 项目 | 值 |
|---|---|
| 操作系统 | Ubuntu 22.04.5 LTS(Jammy Jellyfish) |
| 内核版本 | 6.8.0-138-generic |
| 系统架构 | x86_64(amd64) |
| 软件包管理器 | apt 2.4.14、dpkg 1.21.1 |
| build-essential 版本 | 12.9ubuntu3 |
| 组内成员工具版本 | gcc 11.4.0、g++ 11.4.0、make 4.3 |
二、工具概述
build-essential 是 Ubuntu(以及 Debian 系发行版)中的元包(meta package),它本身不包含任何编译器的二进制文件,只通过包管理器的 Depends(依赖)关系,把一套完整的 C/C++ 编译构建环境一次性拉取安装到位。
build-essential 12.9ubuntu3 的依赖清单为:
libc6-dev | libc-dev:ISO C 标准库开发文件(头文件与静态库),可满足替代;gcc (>= 4:10.2):GNU C 编译器;g++ (>= 4:10.2):GNU C++ 编译器;make:GNU Make 构建工具;dpkg-dev (>= 1.17.11):Debian 软件包构建辅助脚本(提供 dpkg-architecture、dpkg-genchanges 等)。
安装 build-essential 后,即获得 gcc(编译 C)、g++(编译 C++)、make(驱动构建)三大核心能力。它相当于 CentOS/RHEL 系统中 yum groupinstall "Development Tools" 软件组的作用,是 Linux 下编译源码、构建 C/C++ 项目、制作 Debian 软件包的最小标准环境。
典型使用场景:
- 编译安装源码包(
./configure+make+make install); - 构建并调试 C/C++ 工程项目;
- 参与 Debian/Ubuntu 软件包(deb)的打包与构建;
- 作为 gdb、valgrind 等调试分析工具的前置编译环境。
💡 说明:build-essential 只提供"编译所需的最小工具集",它不包含 gdb、cmake、git 等工具,这些需要按需单独安装。
三、在线安装方案
在线安装依赖 apt 软件源,前提是服务器能够访问 Ubuntu 官方源(archive.ubuntu.com 与 security.ubuntu.com)。以下步骤在联网服务器上完整执行。
3.1 确认系统版本
安装前先确认操作系统版本与版本代号(jammy 对应 Ubuntu 22.04)。
cat /etc/os-release
实测回显:
PRETTY_NAME="Ubuntu 22.04.5 LTS"
NAME="Ubuntu"
VERSION_ID="22.04"
VERSION="22.04.5 LTS (Jammy Jellyfish)"
VERSION_CODENAME=jammy
3.2 检查软件源配置
查看 /etc/apt/sources.list 中生效的软件源(过滤注释行与空行):
cat /etc/apt/sources.list | grep -v "^#" | grep -v "^$"
实测回显:
deb http://archive.ubuntu.com/ubuntu/ jammy main restricted
deb http://archive.ubuntu.com/ubuntu/ jammy-updates main restricted
deb http://archive.ubuntu.com/ubuntu/ jammy universe
deb http://archive.ubuntu.com/ubuntu/ jammy-updates universe
deb http://archive.ubuntu.com/ubuntu/ jammy multiverse
deb http://archive.ubuntu.com/ubuntu/ jammy-updates multiverse
deb http://archive.ubuntu.com/ubuntu/ jammy-backports main restricted universe multiverse
deb http://security.ubuntu.com/ubuntu/ jammy-security main restricted
deb http://security.ubuntu.com/ubuntu/ jammy-security universe
deb http://security.ubuntu.com/ubuntu/ jammy-security multiverse
💡 说明:软件源已配置好,无需重配。若执行安装命令时报
E: Unable to locate package build-essential,说明索引过期或源缺失,先执行apt update刷新索引。
3.3 更新软件包索引
安装前先刷新软件包列表,确保能拿到最新版本信息:
apt update
实测回显(尾部):
Hit:1 http://archive.ubuntu.com/ubuntu jammy InRelease
Hit:2 http://archive.ubuntu.com/ubuntu jammy-updates InRelease
Hit:3 http://archive.ubuntu.com/ubuntu jammy-backports InRelease
Hit:4 http://security.ubuntu.com/ubuntu jammy-security InRelease
Reading package lists...
3.4 安装 build-essential
执行在线安装命令:
apt install -y build-essential
实测回显(当前环境已安装最新版 12.9ubuntu3,apt 提示"已经是最新版本"):
WARNING: apt does not have a stable CLI interface. Use with caution in scripts.
Reading package lists...
Building dependency tree...
Reading state information...
build-essential is already the newest version (12.9ubuntu3).
0 upgraded, 0 newly installed, 0 to remove and 8 not upgraded.
💡 说明:在全新的、尚未安装 build-essential 的 Ubuntu 22.04 服务器上执行同一条命令,apt 会自动安装 build-essential 及其全部依赖(gcc、g++、make、libc6-dev、dpkg-dev),末尾回显类似
Setting up gcc-11 ...的安装过程,并以done收尾。
3.5 验证安装
确认包处于已安装状态:
dpkg -s build-essential | grep -E "Status|Version"
实测回显:
Status: install ok installed
Version: 12.9ubuntu3
再验证组内工具是否可用(详见"五、命令与参数详解"5.15 节):
gcc --version && make --version
实测回显:
gcc (Ubuntu 11.4.0-1ubuntu1~22.04.3) 11.4.0
Copyright (C) 2021 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
GNU Make 4.3
Built for x86_64-pc-linux-gnu
Copyright (C) 1988-2020 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
四、离线安装方案
离线安装适用于无法访问外网的内网服务器。思路是:在联网的 Ubuntu 22.04 机器上把 build-essential 及其依赖的 .deb 包下载好,拷贝到离线服务器后使用 dpkg -i 安装。
4.1 在有网机器上下载软件包
使用 --download-only 参数让 apt 只下载、不安装。加 --no-install-recommends 可避免拉取推荐(Recommends)级的非必需包:
apt install --download-only --no-install-recommends -y build-essential
实测回显(当前环境 build-essential 已安装且为最新版本,apt 判定无需下载):
WARNING: apt does not have a stable CLI interface. Use with caution in scripts.
Reading package lists...
Building dependency tree...
Reading state information...
build-essential is already the newest version (12.9ubuntu3).
0 upgraded, 0 newly installed, 0 to remove and 8 not upgraded.
💡 说明:
apt install --download-only会把需要安装的.deb包下载到/var/cache/apt/archives/。在尚未安装 build-essential 的机器上执行该命令,会下载 build-essential 以及 gcc、g++、make、libc6-dev、dpkg-dev 等全部依赖的.deb;本机因已装齐且是最新版本,故不会产生下载。
4.2 检查下载缓存目录
查看 /var/cache/apt/archives/ 中已下载的 .deb 文件:
ls -lh /var/cache/apt/archives/*.deb
实测回显(因已安装且最新,缓存目录中没有 build-essential 的 deb):
ls: cannot access '/var/cache/apt/archives/*.deb': No such file or directory
4.3 使用 apt download 直接获取 deb 包
为了演示离线安装流程,使用 apt download 子命令把 build-essential 自身的 .deb 包下载到当前目录(该命令不依赖是否已安装,总是从软件源获取 .deb 文件):
cd /opt/devchain-demo/build-essential-ubuntu-test && apt download build-essential
实测回显:
WARNING: apt does not have a stable CLI interface. Use with caution in scripts.
Get:1 http://archive.ubuntu.com/ubuntu jammy/main amd64 build-essential amd64 12.9ubuntu3 [4744 B]
Fetched 4744 B in 1s (9210 B/s)
W: Download is performed unsandboxed as root as file '/opt/devchain-demo/build-essential-ubuntu-test/build-essential_12.9ubuntu3_amd64.deb' couldn't be accessed by user '_apt'. - pkgAcquire::Run (13: Permission denied)
💡 说明:最后的
W:警告是 root 用户下载、目录权限导致_apt用户无法访问文件时的提示,属于正常现象,不影响.deb文件的完整性。⚠️ 注意:离线部署时,需要在联网机器上把 build-essential 及其所有依赖(gcc、g++、make、libc6-dev、dpkg-dev 等)一并下载并拷贝,仅拷 build-essential 一个包在目标机上会因依赖缺失而安装失败。
4.4 创建离线目录并拷贝 deb 包
创建离线软件包目录,并把下载好的 .deb 拷贝进去:
mkdir -p /opt/devchain-demo/build-essential-ubuntu-test/offline
cp /opt/devchain-demo/build-essential-ubuntu-test/build-essential_12.9ubuntu3_amd64.deb /opt/devchain-demo/build-essential-ubuntu-test/offline/
两条命令均无输出,表示执行成功。
4.5 查看 deb 包的元信息
使用 dpkg-deb -I(即 --info)查看 .deb 包内 control 文件携带的元信息(版本、架构、依赖、描述等):
dpkg-deb -I /opt/devchain-demo/build-essential-ubuntu-test/offline/build-essential_12.9ubuntu3_amd64.deb
实测回显:
new Debian package, version 2.0.
size 4744 bytes: control archive=971 bytes.
1391 bytes, 30 lines control
372 bytes, 5 lines md5sums
Package: build-essential
Version: 12.9ubuntu3
Architecture: amd64
Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
Installed-Size: 21
Depends: libc6-dev | libc-dev, gcc (>= 4:10.2), g++ (>= 4:10.2), make, dpkg-dev (>= 1.17.11)
Section: devel
Priority: optional
Description: Informational list of build-essential packages
If you do not plan to build Debian packages, you don't need this
package. Starting with dpkg (>= 1.14.18) this package is required
for building Debian packages.
.
This package contains an informational list of packages which are
considered essential for building Debian packages. This package also
depends on the packages on that list, to make it easy to have the
build-essential packages installed.
.
If you have this package installed, you only need to install whatever
a package specifies as its build-time dependencies to build the
package. Conversely, if you are determining what your package needs
to build-depend on, you can always leave out the packages this
package depends on.
.
This package is NOT the definition of what packages are
build-essential; the real definition is in the Debian Policy Manual.
This package contains merely an informational list, which is all
most people need. However, if this package and the manual disagree,
the manual is correct.
Original-Maintainer: Matthias Klose <doko@debian.org>
4.6 查看 deb 包内含文件
使用 dpkg-deb -c(即 --contents)列出 .deb 包会安装哪些文件,此处用 head 查看前 15 行:
dpkg-deb -c /opt/devchain-demo/build-essential-ubuntu-test/offline/build-essential_12.9ubuntu3_amd64.deb | head -15
实测回显:
drwxr-xr-x root/root 0 2022-03-23 09:45 ./
drwxr-xr-x root/root 0 2022-03-23 09:45 ./usr/
drwxr-xr-x root/root 0 2022-03-23 09:45 ./usr/share/
drwxr-xr-x root/root 0 2022-03-23 09:45 ./usr/share/build-essential/
-rw-r--r-- root/root 357 2022-03-23 09:45 ./usr/share/build-essential/essential-packages-list
-rw-r--r-- root/root 3616 2022-03-23 09:45 ./usr/share/build-essential/list
drwxr-xr-x root/root 0 2022-03-23 09:45 ./usr/share/doc/
drwxr-xr-x root/root 0 2022-03-23 09:45 ./usr/share/doc/build-essential/
-rw-r--r-- root/root 149 2021-01-03 15:50 ./usr/share/doc/build-essential/AUTHORS
-rw-r--r-- root/root 784 2022-03-23 09:45 ./usr/share/doc/build-essential/changelog.gz
-rw-r--r-- root/root 954 2021-01-03 15:50 ./usr/share/doc/build-essential/copyright
lrwxrwxrwx root/root 0 2022-03-23 09:45 ./usr/share/doc/build-essential/essential-packages-list -> ../../build-essential/essential-packages-list
lrwxrwxrwx root/root 0 2022-03-23 09:45 ./usr/share/doc/build-essential/list -> ../../build-essential/list
💡 说明:可以看到 build-essential 包本身只安装文档与两个清单文件(
list、essential-packages-list),没有任何二进制程序,再次印证它"元包"的本质。
4.7 查看离线目录内容
ls -lh /opt/devchain-demo/build-essential-ubuntu-test/offline/
实测回显:
total 8.0K
-rw-r--r-- 1 root root 4.7K Oct 6 06:22 build-essential_12.9ubuntu3_amd64.deb
4.8 离线安装演练
在离线服务器上,把下载好的 .deb 拷贝到目标机后,用 dpkg -i 安装。正式执行前可先用 dpkg --dry-run -i 做一次模拟安装(--dry-run 只打印将要执行的动作,不真正安装):
dpkg --dry-run -i /opt/devchain-demo/build-essential-ubuntu-test/offline/build-essential_12.9ubuntu3_amd64.deb
实测回显:
(Reading database ... 24654 files and directories currently installed.)
Preparing to unpack .../build-essential_12.9ubuntu3_amd64.deb ...
💡 说明:
--dry-run执行到"准备解包"即停止,不会真正安装。确认无误后,把--dry-run去掉,执行dpkg -i /opt/devchain-demo/build-essential-ubuntu-test/offline/build-essential_12.9ubuntu3_amd64.deb即可完成离线安装。⚠️ 注意:离线服务器若依赖未装齐,
dpkg -i可能报依赖错误,此时需按缺失项补齐对应.deb,或安装全部依赖后执行apt -f install修复依赖关系。
五、命令与参数详解
build-essential 是一个元包,没有独立 CLI 程序,无法直接执行 build-essential 命令。对它的一切操作都通过包管理器完成,因此本节逐条详解与之相关的 apt、apt-cache、dpkg 系列命令及其参数,每条命令均给出"一行说明 + 真实命令 + 真实回显"。
5.1 元包概念与 Build-Essential 字段
元包自身不含可执行文件,仅在 dpkg 数据库中登记元信息,并通过 Depends 字段拉取真正的工具。apt show 的输出中 Build-Essential: yes 标记说明该包属于 Debian 定义的 build-essential 集合,APT-Manual-Installed: yes 表示它是用户手动安装(而非作为依赖被自动带入)。
元包内文件 /usr/share/build-essential/list 记录了"构建必需包"清单(BEGIN LIST OF PACKAGES ... END LIST OF PACKAGES),核心条目与 Depends 一一对应:
libc6-dev [!alpha !ia64 !hurd-i386] | libc0.3-dev [hurd-i386] | libc6.1-dev [alpha ia64] | libc-dev
gcc (>= 4:10.2)
g++ (>= 4:10.2)
make
dpkg-dev (>= 1.17.11)
另一个文件 /usr/share/build-essential/essential-packages-list 则列出所有 Essential: yes 的系统级必需包(base-files、bash、coreutils、dpkg 等 24 个)。
5.2 apt show —— 查看软件包详细信息
apt show 显示软件包的详细信息(版本、依赖、大小、描述等),是了解元包最快的方式:
apt show build-essential
实测回显:
WARNING: apt does not have a stable CLI interface. Use with caution in scripts.
Package: build-essential
Version: 12.9ubuntu3
Priority: optional
Build-Essential: yes
Section: devel
Origin: Ubuntu
Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
Original-Maintainer: Matthias Klose <doko@debian.org>
Bugs: https://bugs.launchpad.net/ubuntu/+filebug
Installed-Size: 21.5 kB
Depends: libc6-dev | libc-dev, gcc (>= 4:10.2), g++ (>= 4:10.2), make, dpkg-dev (>= 1.17.11)
Task: ubuntustudio-video, ubuntu-mate-core, ubuntu-mate-desktop
Download-Size: 4744 B
APT-Manual-Installed: yes
APT-Sources: http://archive.ubuntu.com/ubuntu jammy/main amd64 Packages
Description: Informational list of build-essential packages
💡 说明:
Depends行中|表示"或"关系(libc6-dev | libc-dev二选一),(>= 4:10.2)是版本下限约束。Download-Size: 4744 B说明整个元包仅 4.7 KB,再次印证其"空壳 + 依赖"的本质。
5.3 apt-cache depends —— 查看依赖树
apt-cache depends 以树形列出指定包的全部依赖,| 开头的行表示或依赖(可选项),<...> 内是备选包名:
apt-cache depends build-essential
实测回显:
build-essential
|Depends: libc6-dev
Depends: <libc-dev>
libc6-dev
Depends: gcc
Depends: g++
Depends: make
make-guile
Depends: dpkg-dev
💡 说明:
Depends: make下方的缩进make-guile表示 make 这一依赖可由make或make-guile满足;Depends: <libc-dev>下的libc6-dev是备选包的实际提供者。
5.4 apt-cache policy —— 查看候选版本与优先级
apt-cache policy 显示包当前安装版本、候选版本及各版本来源与优先级(500 来自软件源,100 来自本地 dpkg 状态):
apt-cache policy build-essential
实测回显:
build-essential:
Installed: 12.9ubuntu3
Candidate: 12.9ubuntu3
Version table:
*** 12.9ubuntu3 500
500 http://archive.ubuntu.com/ubuntu jammy/main amd64 Packages
100 /var/lib/dpkg/status
💡 说明:
***标记当前安装版本;Candidate是默认安装/升级目标版本,本例安装版本与候选版本一致,因此"已经是最新版本"。
5.5 apt-cache show —— 查看仓库元数据
apt-cache show 显示软件源中登记的完整元数据,比 apt show 多出包文件位置与校验和(Filename、Size、SHA256 等),适合核对包来源:
apt-cache show build-essential | head -20
实测回显:
Package: build-essential
Architecture: amd64
Version: 12.9ubuntu3
Priority: optional
Section: devel
Origin: Ubuntu
Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
Original-Maintainer: Matthias Klose <doko@debian.org>
Bugs: https://bugs.launchpad.net/ubuntu/+filebug
Installed-Size: 21
Depends: libc6-dev | libc-dev, gcc (>= 4:10.2), g++ (>= 4:10.2), make, dpkg-dev (>= 1.17.11)
Filename: pool/main/b/build-essential/build-essential_12.9ubuntu3_amd64.deb
Size: 4744
MD5sum: 8f82837be1c86fc816b51ac9b519268a
SHA1: 3f4d2e9af10adff4b07c92df6b7b697bc0be8dd2
SHA256: 1e464c41488d154b9f5ca19d2e9ac8b18913ae16e3dca713c3ba0223fae2cccc
SHA512: 65452b51286fa167cb80ffbecbb9c4fb94324aefe19a792a3996a62c24cfefc937ddbcabaaab6f94c507aa0fabf20eb8e4a90e6f88a1ee89de90a4eb3f9cc65e
Description: Informational list of build-essential packages
Description-md5: 90ef0ef86cafda0bd16f746eb621d9da
Task: ubuntustudio-video, ubuntu-mate-core, ubuntu-mate-desktop
💡 说明:
Filename给出 deb 在软件源中的路径,配合Size/SHA256可用于校验离线下载的包是否完整一致。
5.6 dpkg -L —— 查看包安装的文件列表
dpkg -L 列出指定包已安装的全部文件路径:
dpkg -L build-essential
实测回显:
/.
/usr
/usr/share
/usr/share/build-essential
/usr/share/build-essential/essential-packages-list
/usr/share/build-essential/list
/usr/share/doc
/usr/share/doc/build-essential
/usr/share/doc/build-essential/AUTHORS
/usr/share/doc/build-essential/changelog.gz
/usr/share/doc/build-essential/copyright
/usr/share/doc/build-essential/essential-packages-list
/usr/share/doc/build-essential/list
💡 说明:整个包只装了
list、essential-packages-list两个数据文件与若干文档,没有任何可执行程序,直观印证元包定义。
5.7 dpkg -s —— 查看包状态与详情
dpkg -s 显示包的详细状态信息,第一行 Status: install ok installed 表示已正确安装:
dpkg -s build-essential
实测回显:
Package: build-essential
Status: install ok installed
Priority: optional
Section: devel
Installed-Size: 21
Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
Architecture: amd64
Version: 12.9ubuntu3
Depends: libc6-dev | libc-dev, gcc (>= 4:10.2), g++ (>= 4:10.2), make, dpkg-dev (>= 1.17.11)
Description: Informational list of build-essential packages
If you do not plan to build Debian packages, you don't need this
package. Starting with dpkg (>= 1.14.18) this package is required
for building Debian packages.
.
This package contains an informational list of packages which are
considered essential for building Debian packages. This package also
depends on the packages on that list, to make it easy to have the
build-essential packages installed.
.
If you have this package installed, you only need to install whatever
a package specifies as its build-time dependencies to build the
package. Conversely, if you are determining what your package needs
to build-depend on, you can always leave out the packages this
package depends on.
.
This package is NOT the definition of what packages are
build-essential; the real definition is in the Debian Policy Manual.
This package contains merely an informational list, which is all
most people need. However, if this package and the manual disagree,
the manual is correct.
Original-Maintainer: Matthias Klose <doko@debian.org>
⚠️ 注意:
Status若显示install ok unpacked或deinstall ok config-files,说明包未完成安装或已被移除,需重新安装。
5.8 apt list --installed —— 过滤已安装包
apt list --installed 列出所有已安装包,配合 grep 过滤出 build-essential:
apt list --installed | grep build-essential
实测回显:
WARNING: apt does not have a stable CLI interface. Use with caution in scripts.
build-essential/jammy,now 12.9ubuntu3 amd64 [installed]
💡 说明:
now表示这是当前实际安装版本,[installed]标记已安装状态。
5.9 apt-get install --dry-run —— 模拟安装
apt-get install --dry-run(简写 -s/--simulate)只模拟安装过程,展示将要执行的操作而不真正改动系统:
apt-get install --dry-run build-essential
实测回显:
Reading package lists...
Building dependency tree...
Reading state information...
build-essential is already the newest version (12.9ubuntu3).
0 upgraded, 0 newly installed, 0 to remove and 8 not upgraded.
💡 说明:在未安装 build-essential 的机器上执行,会打印
Inst build-essential ...、Inst gcc ...等模拟安装行,可用于提前评估安装影响。
5.10 apt install --download-only —— 只下载不安装
--download-only 让 apt 仅把软件包下载到 /var/cache/apt/archives/,不执行安装,常用于离线部署前的打包(详见第四节):
apt install --download-only --no-install-recommends -y build-essential
实测回显:
WARNING: apt does not have a stable CLI interface. Use with caution in scripts.
Reading package lists...
Building dependency tree...
Reading state information...
build-essential is already the newest version (12.9ubuntu3).
0 upgraded, 0 newly installed, 0 to remove and 8 not upgraded.
5.11 apt download —— 直接下载 deb 文件
apt download 将指定包的 .deb 文件下载到当前目录(不检查安装状态、不做依赖处理),适合单独获取包文件(详见 4.3 节):
apt download build-essential
实测回显:
WARNING: apt does not have a stable CLI interface. Use with caution in scripts.
Get:1 http://archive.ubuntu.com/ubuntu jammy/main amd64 build-essential amd64 12.9ubuntu3 [4744 B]
Fetched 4744 B in 1s (9210 B/s)
W: Download is performed unsandboxed as root as file '/opt/devchain-demo/build-essential-ubuntu-test/build-essential_12.9ubuntu3_amd64.deb' couldn't be accessed by user '_apt'. - pkgAcquire::Run (13: Permission denied)
5.12 dpkg-deb -I / -c —— 解析 deb 包内容
dpkg-deb -I <包>:显示 deb 的 control 元信息(版本、依赖、描述),详见 4.5 节;dpkg-deb -c <包>:列出 deb 内含文件清单,详见 4.6 节。
两条命令均不修改系统,是离线校验 deb 包的首选工具。
5.13 dpkg --dry-run -i —— 模拟安装本地 deb
dpkg --dry-run -i <deb> 模拟执行 dpkg -i,打印将要执行的动作而不实际安装(实测该参数受支持,详见 4.8 节):
dpkg --dry-run -i /opt/devchain-demo/build-essential-ubuntu-test/offline/build-essential_12.9ubuntu3_amd64.deb
实测回显:
(Reading database ... 24654 files and directories currently installed.)
Preparing to unpack .../build-essential_12.9ubuntu3_amd64.deb ...
5.14 dpkg -l —— 列出包状态(含状态符号含义)
dpkg -l 以表格列出包名、版本、架构与描述,首行前的两个字母是状态码(ii 表示期望安装且已安装):
dpkg -l build-essential
实测回显:
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name Version Architecture Description
+++-===============-============-============-==============================================
ii build-essential 12.9ubuntu3 amd64 Informational list of build-essential packages
💡 说明:首列
ii中第一个i表示期望状态为安装(install),第二个i表示实际状态为已安装(installed);若显示un(未安装)或rc(已删除但保留配置),说明包不在可用状态。
5.15 组内成员工具版本验证
安装 build-essential 后验证组内工具 gcc、g++、make 的版本:
gcc --version
实测回显:
gcc (Ubuntu 11.4.0-1ubuntu1~22.04.3) 11.4.0
Copyright (C) 2021 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
g++ --version
实测回显:
g++ (Ubuntu 11.4.0-1ubuntu1~22.04.3) 11.4.0
Copyright (C) 2021 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
make --version
实测回显:
GNU Make 4.3
Built for x86_64-pc-linux-gnu
Copyright (C) 1988-2020 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
快速获取纯版本号(供脚本判断版本用):
gcc -dumpversion
实测回显:
11
gcc -dumpfullversion
实测回显:
11.4.0
5.16 组内工具安装状态一览
使用 dpkg -l 配合 grep 过滤,一次性查看 build-essential 与 gcc、g++、make 相关包的安装状态:
dpkg -l | grep -E 'build-essential|gcc|g\+\+|make' | head
实测回显:
ii build-essential 12.9ubuntu3 amd64 Informational list of build-essential packages
ii g++ 4:11.2.0-1ubuntu1 amd64 GNU C++ compiler
ii g++-11 11.4.0-1ubuntu1~22.04.3 amd64 GNU C++ compiler
ii gcc 4:11.2.0-1ubuntu1 amd64 GNU C compiler
ii gcc-11 11.4.0-1ubuntu1~22.04.3 amd64 GNU C compiler
ii gcc-11-base:amd64 11.4.0-1ubuntu1~22.04.3 amd64 GCC, the GNU Compiler Collection (base package)
ii gcc-12-base:amd64 12.3.0-1ubuntu1~22.04.3 amd64 GCC, the GNU Compiler Collection (base package)
ii libgcc-11-dev:amd64 11.4.0-1ubuntu1~22.04.3 amd64 GCC support library (development files)
ii libgcc-s1:amd64 12.3.0-1ubuntu1~22.04.3 amd64 GCC support library
ii make 4.3-4.1build1 amd64 utility for directing compilation
💡 说明:可以看到
gcc、g++实际是过渡包(依赖具体版本包 gcc-11、g++-11),真正提供编译器二进制的是gcc-11/g++-11;gcc-12-base出现说明系统中还带有 GCC 12 的运行时基础库。
六、配置说明
6.1 无配置文件
build-essential 是纯元包,安装后不需要任何配置,不产生配置文件、不启动服务、不设置环境变量。安装完成即可直接使用 gcc、g++、make。
6.2 命令路径与符号链接
gcc、g++ 的命令路径由 dpkg 通过符号链接管理:
ls -l /usr/bin/gcc /usr/bin/g++ /usr/bin/make
实测回显:
lrwxrwxrwx 1 root root 6 Aug 5 2021 /usr/bin/g++ -> g++-11
lrwxrwxrwx 1 root root 6 Aug 5 2021 /usr/bin/gcc -> gcc-11
-rwxr-xr-x 1 root root 255696 Feb 15 2022 /usr/bin/make
💡 说明:
/usr/bin/gcc是指向gcc-11的符号链接,这是 Ubuntu 管理多版本编译器的默认方式(/usr/bin/<工具> -> <工具>-<版本>)。
6.3 多版本编译器共存
若需在同一台机器上同时使用多个 GCC 大版本(如 gcc-10、gcc-12),可安装对应版本包后手动切换符号链接,或使用 update-alternatives 注册管理。实测当前环境 gcc 未注册 alternatives:
update-alternatives --list gcc
实测回显:
update-alternatives: error: no alternatives for gcc
💡 说明:
no alternatives for gcc表示当前 gcc 完全由 dpkg 的符号链接机制管理,未纳入 alternatives 体系。如需用update-alternatives --config gcc交互切换版本,需先执行update-alternatives --install手动注册各版本。
七、常见问题(FAQ)
Q1:执行 apt install build-essential 报 E: Unable to locate package build-essential
原因:软件包索引过期,或软件源未包含 main 组件。解决:
apt update
apt install -y build-essential
若仍报错,检查 /etc/apt/sources.list 中是否包含 jammy main 行(详见 3.2 节)。
Q2:执行 gcc --version 报 gcc: command not found
原因:build-essential 未安装(gcc 由它带入)。解决:
apt install -y build-essential
Q3:如何确认当前 gcc 的实际版本
gcc --version
或取纯版本号:
gcc -dumpversion
Q4:apt install --download-only 下载的 deb 包存放在哪里
存放在 /var/cache/apt/archives/。注意:若包已安装且是最新版本,apt 不会重复下载(实测回显 build-essential is already the newest version,缓存目录为空)。需要强制获取包文件时可改用 apt download。
Q5:dpkg --dry-run -i 是否支持模拟安装
支持。实测 dpkg --dry-run -i xxx.deb 会打印 (Reading database ...) 与 Preparing to unpack ... 后停止,不真正安装。
Q6:普通用户执行 apt 提示权限不足
apt 安装类命令需要 root 权限。普通用户请在命令前加 sudo:
sudo apt install -y build-essential
Q7:离线服务器 dpkg -i 安装报依赖错误
离线安装必须把 build-essential 及其全部依赖(gcc、g++、make、libc6-dev、dpkg-dev)的 deb 一并下载拷贝。若仍报缺依赖,可在联网机器用 apt install --download-only --no-install-recommends -y build-essential 完整下载依赖树后整体拷贝,并在目标机执行:
dpkg -i /opt/offline/*.deb
若部分依赖已存在导致顺序问题,可随后执行:
apt -f install
修复未满足的依赖。
Q8:build-essential 和 gcc 有什么关系
build-essential 依赖 gcc(C 编译器)与 g++(C++ 编译器),安装 build-essential 会自动安装 gcc、g++、make 等工具;单独安装 gcc 则不会带入 g++ 与 make。
八、卸载与清理
⚠️ 注意:本节演示命令均为只读查询,不会真正卸载 build-essential;卸载命令仅作为参考给出,未在本环境执行。
8.1 查询当前安装状态
dpkg -l build-essential
实测回显:
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name Version Architecture Description
+++-===============-============-============-==============================================
ii build-essential 12.9ubuntu3 amd64 Informational list of build-essential packages
8.2 查询包仓库信息
apt-cache show build-essential | head
实测回显:
Package: build-essential
Architecture: amd64
Version: 12.9ubuntu3
Priority: optional
Section: devel
Origin: Ubuntu
Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
Original-Maintainer: Matthias Klose <doko@debian.org>
Bugs: https://bugs.launchpad.net/ubuntu/+filebug
Installed-Size: 21
Depends: libc6-dev | libc-dev, gcc (>= 4:10.2), g++ (>= 4:10.2), make, dpkg-dev (>= 1.17.11)
8.3 卸载命令(参考,未执行)
如需卸载 build-essential(保留 gcc/g++/make 等依赖):
apt remove -y build-essential
如需连依赖一并清理(谨慎使用):
apt remove -y build-essential && apt autoremove -y
⚠️ 注意:卸载 build-essential 本身不会删除 gcc、g++、make;
apt autoremove只清理因它而安装、且无其他包依赖的"孤儿"包。若服务器仍用于编译,建议保留 gcc/g++/make。
8.4 清理下载缓存
清理 /var/cache/apt/archives/ 中已下载的 deb 包:
apt clean
💡 说明:
apt clean删除缓存中的全部 deb 文件,释放磁盘空间;apt autoclean则只删除已不再使用的部分。
九、参考链接
- Ubuntu 官方文档:https://ubuntu.com/server/docs
- Debian 软件包管理手册(dpkg/apt):https://www.debian.org/doc/manuals/debian-reference/
- Debian Policy Manual —— build-essential 定义(第 4 章"Package relationships"):https://www.debian.org/doc/debian-policy/
- apt 手册页:
man apt、man apt-get、man apt-cache - dpkg 手册页:
man dpkg、man dpkg-deb - Ubuntu Packages 仓库(jammy build-essential 页面):https://packages.ubuntu.com/jammy/build-essential