惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

月光博客
月光博客
MongoDB | Blog
MongoDB | Blog
Apple Machine Learning Research
Apple Machine Learning Research
The GitHub Blog
The GitHub Blog
博客园 - 聂微东
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
大猫的无限游戏
大猫的无限游戏
WordPress大学
WordPress大学
云风的 BLOG
云风的 BLOG
H
Help Net Security
H
Hackread – Cybersecurity News, Data Breaches, AI and More
A
About on SuperTechFans
Hugging Face - Blog
Hugging Face - Blog
罗磊的独立博客
Y
Y Combinator Blog
Recent Announcements
Recent Announcements
Martin Fowler
Martin Fowler
博客园 - 司徒正美
Stack Overflow Blog
Stack Overflow Blog
B
Blog
博客园 - Franky
小众软件
小众软件
Recorded Future
Recorded Future
B
Blog RSS Feed
爱范儿
爱范儿
宝玉的分享
宝玉的分享
L
LangChain Blog
博客园 - 【当耐特】
The Register - Security
The Register - Security
P
Proofpoint News Feed
V
Visual Studio Blog
Blog — PlanetScale
Blog — PlanetScale
雷峰网
雷峰网
Last Week in AI
Last Week in AI
Microsoft Azure Blog
Microsoft Azure Blog
GbyAI
GbyAI
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
M
MIT News - Artificial intelligence
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
MyScale Blog
MyScale Blog
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
aimingoo的专栏
aimingoo的专栏
D
Docker
酷 壳 – CoolShell
酷 壳 – CoolShell
阮一峰的网络日志
阮一峰的网络日志
有赞技术团队
有赞技术团队
G
Google Developers Blog
S
SegmentFault 最新的问题
Microsoft Security Blog
Microsoft Security Blog

博客园 - smil、梵音

C语言标准(C89/C90)中的32个关键字全列表 Windows 系统的 vscode 通过 Remote-SSH 连接虚拟机的 Ubuntu 系统运行 C 语言的代码 Windows 系统 vscode Remote-SSH 远程连接虚拟机里面的Ubuntu系统的失败处理 Ubuntu虚拟机里安装了SSH,开启SSH服务的时候报错 VS Code的Remote - SSH功能 C语言是不是必须得通过gcc编译成可执行的程序? c语言用gcc编译过后,执行 ./hello.c 报错 ./hello.c: 权限不够 windows系统的虚拟机里面的Ubuntu系统安装VMware Tools Ubuntu的应用中心搜索 vscode 的时候,筛选条件为Snap包、debian包是什么意思,如何安装vscode Ubuntu系统是否就是Linux系统,安装软件和Windows系统有何区别 Ubuntu系统里面vscode运行C语言的第一个 Hello World 程序 vscode 中安装C/C++相关的插件 Ubuntu 安装一个轻量级的中文输入法Fcitx5 Ubuntu安装百度网盘 Ubuntu系统里面安装vscode 乌版图系统截屏快捷键 Ubuntu 系统里面运行C++ TortoiseGit 的安装与汉化 安装虚拟机+ ubuntu24.04 系统 联想小新安装 ubuntu24.04 双系统 | 安装乌版图系统 | windows安装 ubuntu24.04 双系统 利用faststone capture制作gif动图 Sublime Text 常用编辑快捷键速查表 vscode 中的 css 样式代码不显示折叠图标的解决方法 IDEA中git的Cherry-Pick的可视化使用(个人总结) IDEA中git的Cherry-Pick的使用 IDEA中如何实现git的cherry-pick可视化操作? Windows11添加系统环境变量 VS Code——Live Server的简介、安装与使用 vue3中 pinia 的运用 vscode使用region折叠任意想折叠的代码块 我本地分支代码推送到远程的另一个分支,怎么操作? idea中打开多文件编辑器换行展示 本地代码强制覆盖远程代码,本地代码强制和远程某一个分支保持一致,再覆盖远程代码 css头部固定,内容区域高度自适应剩余的屏幕高度,内容区域过多显示竖向滚动条 flex为1的元素宽度自适应的同时,文本太长的时候显示省略号 idea中项目文件目录消失如何解决 vue3插入图片 vue3使用构建工具时,关于本地图片的引用 vue3 中父组件调用子组件的方法,子组件是不是必须暴露方法 如何改变type="checkbox"的input复选框的样式 vue3中非父子组件、非祖先-后代组件之间传递方法 解决 IntelliJ IDEA 中项目右键没有 Git 菜单的问题 关于 ref 为 DOM 元素或子组件实例动态创建引用的总结 Git 合并时出现 Please enter a commit message to explain why this merge is necessary 问题解决 拉取远程其他分支的最新代码
Ubuntu系统里面安装 g++ ,sudo apt update 的含义
smil、梵音 · 2026-06-23 · via 博客园 - smil、梵音

一、sudo apt update 是什么意思?

在Ubuntu(乌版图)系统中,sudo apt update 是一个非常核心且高频的命令。用一句话概括它的核心作用:“刷新本地软件包信息缓存,让系统知道软件源里有哪些最新的软件版本,但此时并不安装或升级任何软件。”

为了帮你彻底理解,我从三个层面拆解:

1. 拆解命令的每个部分

  • sudo:以超级管理员(root)权限执行。因为要读取和更新系统目录(/var/lib/apt/lists/)下的核心文件,普通用户无权操作。

  • apt:高级包管理工具(Advanced Packaging Tool),是Ubuntu管理软件安装、卸载、升级的“大管家”。

  • update同步索引。它会去读取你软件源列表(/etc/apt/sources.list)中配置的官方服务器或镜像站,下载最新的软件包列表(包含每个软件叫什么、版本号是多少、依赖关系如何)。

2. 最关键的认知误区(Update ≠ Upgrade)

初学者最容易混淆这两个命令:

  • sudo apt update:相当于“刷新购物网站的首页”。你只是把商家最新的“商品目录册”(版本列表)下载到了本地电脑上。此时,你看到的软件信息是最新的,但你手里的旧软件一点都没变。

  • sudo apt upgrade:相当于“点击一键升级所有已购商品”。系统会根据刚才刷新的最新目录册,实际下载并安装所有已安装软件的新版本。

结论:如果你想装新软件或升级系统,必须先执行 update 拿到最新清单,再执行 upgrade 才能生效。如果只执行 upgrade 而不先 update,系统只会照着旧清单去升级,导致遗漏最新补丁。

3. 执行时屏幕输出的含义

当你输入该命令后,终端会滚动一堆文字,这代表它在连接各个软件源服务器:

  • Hit(命中):本地缓存的软件信息与服务器一致,无需更新。

  • Get(获取):服务器有新的软件信息,正在下载到本地缓存。

  • Ign(忽略):该文件无需处理或暂时跳过,通常不影响后续操作。

最后,终端会提示 “可升级的软件包数量”,这就意味着你已经完成了“查看有哪些更新”的准备工作,接下来可以决定是否执行 sudo apt upgrade 来进行真正的升级了。

补充一个小建议:建议在每次执行 sudo apt install 某软件 安装新软件之前,也先顺手敲一遍 sudo apt update,这样可以确保你安装的是软件源里的最新版本,避免因为本地缓存过旧而装到老版本。如果执行过程中出现报错,通常是网络连接或软件源(镜像源)配置有问题,需要调整 /etc/apt/sources.list 文件。


二、如果我想安装 g++,用来编译C++的代码,是不是需要先运行 sudo apt update ,然后再安装 g++ ?

是的,完全正确! 而且你正好抓住了这个命令最标准的应用场景。

在安装 g++ 之前,强烈建议先运行 sudo apt update。我给你拆解一下为什么,并附上最稳妥的安装步骤:

1. 为什么必须先 update

  • 如果你不先执行 update,你的本地“软件目录册”可能是几天甚至几周前的旧版本。

  • 此时直接运行 sudo apt install g++,系统会拿着旧目录去找软件源服务器,很容易出现 “404 找不到文件”“依赖关系缺失” 的错误(因为服务器上的文件已经更新换代了,旧的哈希值对不上)。

  • 执行 update 后,系统就知道了当前服务器上 g++ 最新且可用的具体版本号和下载链接,安装成功率接近 100%。

2. 针对 C++ 开发的“专业建议”

在 Ubuntu 中,直接安装 g++ 有时只会装最核心的编译器,可能会缺少标准库的头文件。业内更标准的做法是安装 build-essential 元包,它会一次性把 g++gccmake 以及 C/C++ 的标准库头文件全部装齐,省去后续的麻烦。

所以,你的完整操作流程应该是这样的:

# 第一步:刷新本地软件包索引(确保拿到最新清单)
sudo apt update

# 第二步:安装全套 C++ 编译工具(推荐)
sudo apt install build-essential

# 如果你只想单独安装 g++,也可以用下面这句(但不如上面全面)
# sudo apt install g++

3. 安装完成后,如何验证是否成功?

装完后,你可以输入以下命令查看版本号,出现版本信息就代表安装成功了:

此时你就可以正常编译你的 C++ 代码了,比如:g++ hello.cpp -o hello

另外提个醒:update 只是刷新清单,如果你在运行 sudo apt update 时看到末尾有提示 “xx 个软件包可以升级”,那只是告诉你系统里有旧软件,这不影响你安装 g++,你可以先不管它,先把 g++ 装好再说。如果在安装过程中遇到依赖报错,可以再告诉我,我帮你分析具体原因。


三、sudo apt upgrade 是不是把系统中所有的已经安装的旧软件都更新到最新的版本?

你的理解基本正确,但有一个极其重要的“安全刹车”机制

简单来说:sudo apt upgrade 会把所有已安装的软件升级到最新版本,但前提是“不删除任何已安装的软件包”。

如果升级某个软件需要卸载另一个冲突的旧软件,或者需要额外安装大量新的依赖包,upgrade 命令会直接跳过这个软件,把它“按住”不动(终端里会显示“保留”(held back))。

为了让你彻底清楚,我对比一下两个极易混淆的命令:

命令 核心原则 是否删除现有软件? 是否处理内核/大版本升级?
sudo apt upgrade 保守升级。只升级那些“不添乱”的软件,确保不会因为升级而删掉你电脑上已有的任何东西。 绝不会删除任何已安装的软件包。 通常不会升级Linux内核,因为内核升级往往伴随旧内核的删除。
sudo apt full-upgrade(或 dist-upgrade 智能升级。如果升级A必须卸载B,系统会智能地处理依赖关系,自动卸载B来安装新版的A。 智能地移除冲突的旧软件包。 处理内核及重大系统组件的大版本更新。

举个具体的例子

假设你电脑上装了旧版的 libssl(安全库),而新版的 wget 强烈依赖新版 libssl。如果你运行 sudo apt upgrade,系统为了避免误删你的旧 libssl,会直接跳过 wget 的升级。

只有当你运行 sudo apt full-upgrade 时,系统才会“壮着胆子”把旧的 libssl 删掉,装上新的,然后把 wget 一并升上去。

针对你之前安装 g++ 的情况,给你最实用的建议:

  1. 日常安全操作:平时只用 sudo apt upgrade 就够了。它非常安全,绝对不会搞坏你的系统环境,适合每周执行一次来修补普通软件的安全漏洞。

  2. 如果想彻底更新一切:可以先执行 sudo apt upgrade,再执行 sudo apt full-upgrade。前者先安全升级大部分软件,后者再处理剩余需要“删旧换新”的顽固软件。

特别提醒full-upgrade 涉及卸载旧包,虽然Ubuntu处理得很智能,但在执行它之前,强烈建议先输入 sudo apt update 刷新列表,并且看一眼终端里提示“将被删除”的软件列表,确认没有你手动安装的特别软件(比如某些破解工具或商业驱动),再按 Y 确认。

回到你的C++开发场景:你完全不需要担心这个区别。因为安装 build-essential 只是新增软件,不是升级,所以直接 sudo apt install build-essential 就行,跟 upgrade 无关。等你日后想清理系统时,再回来参考这个区别就行了。