管理员apt

Tutorial: 卓越工程师 Category: 嵌入式 Published: 2026-10-23 11:05:29 Views: 1 Likes: 0 Comments: 0

324.2.2管理员apt

本节没有编写或展示 C 源码。视频中的 a.c 只是用 touch 创建的零字节空文件,因此标题下不添加 C 代码块,也不能根据扩展名补写程序。

视频环境是 VMware 中的 Ubuntu 20.04(代号 focal),普通用户名为 wfeng、主机名为 ubuntu。本节先演示普通用户、sudo 与 root 的区别,再安装 net-tools、检查网络、切换 APT 软件源并升级软件包。

一、管理员权限

Linux 不是把所有操作都交给“管理员模式”完成,而是让普通用户承担日常操作,只在确有需要时把某一条命令提升权限。普通 Shell 常见提示符是 $,root Shell 常见提示符是 #;提示符只是线索,真正身份应使用 id 或 whoami 确认。

课程用 Windows 中某些烧录、调试工具需要管理员权限作类比。是否真的需要管理员权限取决于设备驱动、USB 权限和软件设计,不能把“破解单片机”当成 Linux 权限规则。

1.1 例题: 管理员权限使用

1.1.1 视频中的文件创建与删除

视频开始时终端位于 /home,而不是用户家目录 /home/wfeng。教师依次执行:

# 以 root 身份在当前目录 /home 中创建空文件 a.c。
sudo touch a.c

# 查看 /home 下的条目。
ls

# 以普通用户 wfeng 的身份尝试删除 a.c。
rm a.c

rm 先询问:

rm: remove write-protected regular empty file 'a.c'?

输入 y 后又报告:

rm: cannot remove 'a.c': Permission denied

随后视频执行:

# 以 root 权限删除当前目录中的 a.c。
sudo rm a.c

# 再次查看,画面中只剩用户目录 wfeng。
ls

原笔记把失败原因概括为“普通用户不能删除由管理员创建的文件”,这并不准确。这里应拆成两层理解:

  • sudo touch a.c 让文件的所有者成为 root,普通用户对该文件本身没有写权限,所以交互式终端中的 rm 会先给出 write-protected 提示。
  • 真正决定能否删除或重命名目录项的,主要是父目录的写权限和执行(搜索)权限。视频中的 /home 通常由 root 管理,wfeng 无权在其中删除条目,所以确认后仍得到 Permission denied。
  • 如果一个 root 所有的文件位于普通用户可写的目录中,并且 sticky bit、ACL、不可变属性等机制没有额外限制,该用户仍可能删除这个目录项。文件所有者不是唯一判断条件。

遇到类似问题,应先检查对象和父目录,而不是直接反复加 sudo:

# 确认当前目录,防止在错误位置执行删除。
pwd

# 查看文件类型、权限、所有者和所属组。
ls -l -- a.c

# 查看父目录本身的权限;这里若位于 /home,点号就代表 /home。
ls -ld -- .

# 查看当前用户、主组和附加组。
id

视频中的 sudo rm a.c 确实能完成删除,但它不是通用的首选修复。若文件本应归当前用户维护,应先查清为何由 root 创建,再针对正确对象处理所有权或目录权限;不要用 chmod 777 掩盖权限设计问题。

1.1.2 sudo、root 与密码

sudo 命令 会在策略允许时,以另一身份执行这一条命令;未指定目标用户时通常是 root。Ubuntu 的默认配置通常要求输入发起者自己的密码,也就是视频中的 wfeng 密码,而不是 root 密码。用户还必须获得 sudoers 策略授权。

# 查看当前账户被允许执行哪些 sudo 命令;可能要求输入 wfeng 的密码。
sudo -l

# 只提升 touch 这一条命令,而不是长期停留在 root Shell。
sudo touch /home/a.c

终端输入密码时不会显示字符、圆点或星号,这是正常的安全行为,不代表键盘没有输入。

视频接着执行:

# 为已经存在的 root 账户设置密码。
sudo passwd root

画面先后出现 New password:、Retype new password:,成功后显示 passwd: password updated successfully。这条命令不是创建 root 用户:root 账户本来就存在,UID 为 0;它只是设置 root 密码。Ubuntu 默认锁定 root 的密码认证,日常管理推荐使用 sudo。设置 root 密码后,本机的 su 密码切换可能变得可用,但是否允许远程 root 登录仍由 SSH 等服务的独立策略决定。

视频口头建议把密码设成单个字符 0,这是严重不安全的示例,不应照做。即使只是虚拟机,也应使用强且唯一的密码,因为虚拟机可能桥接到真实局域网、保存源码或被导出共享。如果只是为课程试验临时启用了 root 密码,结束后可重新锁定:

# 锁定 root 密码;执行前确认已经有可用的 sudo 普通账户。
sudo passwd -l root
1.1.3 su 切换用户

视频设置 root 密码后输入:

# 未指定用户名时,su 默认尝试切换到 root。
su

它要求的是目标账户 root 的密码,成功后提示符变为 root@ubuntu:/home#。普通 su 会保留当前工作目录,所以仍在 /home;它不等于完整的登录环境。若确实需要 root 的登录 Shell,可用 su - root,但在 Ubuntu 中通常仍优先按命令使用 sudo。

在 root Shell 中,视频执行 su wfeng,直接得到普通用户 Shell。root 切换到其他本地用户通常无需输入该用户密码。之后普通用户执行 su root 时则必须输入 root 密码。画面还出现了:

# 错误示例:斜杠被当成用户名的一部分。
su wfeng/

因此系统报告 su: user wfeng/ does not exist。用户名后不能随意加目录斜杠,正确写法是 su wfeng;若希望同时载入该用户的登录环境,可写 su - wfeng。

从 su 启动的 Shell 返回上一级,推荐使用:

# 退出当前 Shell,回到启动它的上一层 Shell。
exit

也可按 Ctrl+D 发送文件结束符。视频用 su 在 root 与 wfeng 之间反复嵌套,会形成多层 Shell,不如逐层 exit 清晰。不同用户、不同 Shell 会话的历史记录也可能不同,所以切换后按 ↑ 看不到上一账户刚执行的命令,并不是“没有权限查看命令”。

工具默认认证对象默认执行身份适合场景
sudo 命令通常是当前发起用户通常是 root临时执行一条确需特权的命令,首选
sudo -i通常是当前发起用户root 登录 Shell连续管理任务;完成后立即 exit
su / su root目标用户 rootroot已为 root 设置密码且确有需要时
su - 用户名目标用户;root 发起时通常不询问指定用户的登录 Shell切换到该用户并加载其登录环境

最小权限原则是:普通操作用普通用户;只给确需权限的命令加 sudo;运行前检查路径和参数;执行后检查结果。root 可以绕过大量普通权限检查,一个路径或通配符错误就可能影响整个系统。

1.2 apt

APT 是 Debian/Ubuntu 的高级软件包管理工具。它根据配置的软件源获取“有哪些版本可用”的索引,再下载 .deb 软件包,解析依赖,并调用底层工具完成解包和配置。软件源、索引、已安装软件三者不能混为一谈:

软件源配置 ──apt update──> 本机软件包索引
                              │
                    apt install / upgrade
                              │
                              v
                    下载、校验、解包并配置软件

改变系统软件需要 root 权限,所以视频中的安装、更新和升级命令都带 sudo。APT 参数是软件包名,不一定等于包中提供的命令名;例如 ifconfig 命令由 net-tools 软件包提供。

1.2.1 例题: ifconfig命令使用

Windows 画面先执行 ipconfig,无线网卡显示:

  • IPv4 地址:192.168.31.118
  • 子网掩码:255.255.255.0
  • 默认网关:192.168.31.1

Ubuntu 新装系统中执行 ifconfig 时,视频得到 command not found,并看到安装建议。随后完整执行:

# 刷新过索引后,从软件源安装提供 ifconfig 的 net-tools 软件包。
sudo apt install net-tools

视频从 http://us.archive.ubuntu.com/ubuntu 的 focal/main 下载约 196 kB,安装后增加约 864 kB 磁盘占用;摘要为 0 个升级、1 个新安装、0 个删除,另有 252 个包可升级。这些数字只属于当时的软件源状态,不能当成每次安装都相同。

安装完成后,ifconfig 显示网卡 ens33 的 IPv4 地址为 192.168.31.229,掩码为 255.255.255.0,广播地址为 192.168.31.255,并显示回环接口。ens33 是该虚拟机当时的可预测接口名,不是所有 Ubuntu 都固定叫这个名称。

原笔记称 ifconfig 会显示“IP 地址、网关、子网掩码”,其中“网关”不准确:ifconfig 展示接口地址和统计信息,默认路由应另外查询;DNS 也不是由 ifconfig 给出。现代 Ubuntu 已默认提供 iproute2,通常无需为了基本诊断专门安装旧式 net-tools:

# 简洁显示所有接口的启停状态和地址。
ip -br address

# 查看路由;以 default 开头的记录通常给出默认网关。
ip route

# 查看 systemd-resolved 管理的各链路 DNS 状态。
resolvectl status

若旧版系统没有 resolvectl,可尝试 systemd-resolve --status。课程安装 net-tools 是为了认识和兼容 ifconfig,并不表示它是联网或使用 APT 的必需组件。

1.2.2 例题: ifconfig命令联网使用

视频中的 Windows 主机是 192.168.31.118/24,Ubuntu 虚拟机是 192.168.31.229/24;两者都处在 192.168.31.0/24 网段。结合前一节使用的桥接网络,这使它们具备直接通信的条件,但同网段本身不能保证一定互通,主机防火墙、无线客户端隔离、虚拟网卡状态等仍可能拦截流量。

视频从 Ubuntu 执行:

# 持续向 Windows 主机发送 ICMP Echo 请求,直到手动停止。
ping 192.168.31.118

画面收到连续回复,按 Ctrl+C 停止后统计为 12 个包发送、12 个收到、0% 丢包,说明当时两端之间的 ICMP 往返可用。它不能证明 SSH、HTTP 等其他端口或服务一定可用。做有限次数的测试更便于记录:

# 只发送 4 个请求后自动结束。
ping -c 4 192.168.31.118

随后测试 ping 192.168.31.11,画面由本机 192.168.31.229 返回 Destination Host Unreachable,统计为 0 个回复并有错误。原讲解据此判断“没有 11 这个设备”过于绝对:目标可能不存在或关机,也可能是 ARP、路由、防火墙、VLAN 或 ICMP 策略造成不可达。ping 是连通性线索,不是设备存在性的唯一证据。

视频还介绍了:

# 从已配置的软件源下载并刷新本机软件包索引,不升级已安装软件。
sudo apt update

# 根据现有索引升级可升级的软件包,不删除已安装软件包。
sudo apt upgrade

把 update 类比为“更新歌曲目录”、把 upgrade 类比为“升级播放器”,只能帮助初步记忆。准确关系是:通常先 update 获取最新可用版本信息,再由 upgrade 根据这份信息执行实际升级。

1.2.3 例题: 网络工具安装使用

视频强调安装前要保证虚拟机联网。对于从远程镜像首次下载的包和依赖,这一点成立;但若软件包已完整存在于本机缓存,或使用局域网仓库、安装介质等离线源,也可能不访问公网。因此更准确的前提是:APT 必须能访问当前配置所指向的软件包来源。

安装软件前可按层次检查:

# 1. 查看接口是否有地址。
ip -br address

# 2. 查看是否存在默认路由。
ip route

# 3. 测试到网关的路径;网关地址以实际 ip route 输出为准。
ping -c 4 192.168.31.1

# 4. 刷新软件包索引;这里同时验证 DNS、镜像可达性和仓库元数据。
sudo apt update

若 apt update 失败,应保存完整错误,而不是只看“能否打开网页”。常见类别包括域名解析失败、连接超时、证书或系统时间异常、发行版代号不匹配、仓库缺少 Release 文件以及签名验证失败。不要为了绕过错误而关闭签名验证或加入不可信仓库。

软件包安装的一般形式是:

# 安装一个软件包。
sudo apt install net-tools

# 空格分隔即可一次安装多个软件包;pkg1、pkg2 是占位符。
sudo apt install pkg1 pkg2

看到 Do you want to continue? [Y/n] 时,应先核对将安装、升级、删除的包数、下载量和磁盘变化,再输入 y;不能把提示符当作必须无条件确认的流程。

1.2.4 例题: 软件换源操作

视频最初从美国区的 us.archive.ubuntu.com 获取 net-tools,随后通过图形界面更换镜像。实际步骤是:

  1. 打开 Ubuntu 应用菜单,启动紫色图标的 Software & Updates。
  2. 在 Ubuntu Software 页找到 Download from。
  3. 选择 Other...,在国家列表中展开 China。
  4. 视频选中 mirrors.aliyun.com,点击 Choose Server。
  5. 输入当前普通用户的密码完成管理员认证。
  6. 点击 Close,再点击 Reload,让系统按新配置重新加载软件包索引。

原笔记说新建虚拟机后“必须换源”,这是过度概括。只要默认镜像可达、速度和完整性满足需要,就可以继续使用;距离近也不保证某一镜像在所有网络和时段都最快。可优先用界面中的 Select Best Server 测试,或选择 Ubuntu 已列出的可信镜像,且必须匹配当前发行版代号和仓库组件。

换源前后要注意:

  • 视频选择的是特定时间、特定网络下的阿里云镜像,不构成永久推荐。镜像可用性会变化。
  • 第三方 .deb、PPA 和随意复制的源配置都能以高权限安装代码,只添加来源明确、确实需要且受信任的软件源。
  • 视频使用 Ubuntu 20.04 focal。Ubuntu 20.04 的标准安全维护已于 2025 年 5 月 31 日结束;更换下载镜像不会延长发行版生命周期。当前长期联网使用应迁移到受支持版本,或根据需要启用 Ubuntu Pro/ESM。
  • 修改完成后必须让 Reload 或 sudo apt update 成功结束,并检查是否有 404、缺少 Release 文件或签名错误,不能只凭界面关闭就认定成功。
1.2.5 ubuntu换源

图形界面与命令行换源最终都在改变 APT 的软件源配置,并重新生成本机索引。视频中的 Ubuntu 20.04 通常使用:

/etc/apt/sources.list
/etc/apt/sources.list.d/*.list

Ubuntu 24.04 的默认 Ubuntu 源已迁移到 deb822 格式的 /etc/apt/sources.list.d/ubuntu.sources。因此不能在所有版本上都机械编辑 /etc/apt/sources.list。先识别系统版本,再查看真实配置:

# 查看发行版名称、版本和代号;本视频环境应能看到 focal。
cat /etc/os-release

# 查看 APT 主配置目录中的源文件名称和权限。
ls -l /etc/apt/sources.list /etc/apt/sources.list.d/

初学阶段优先使用系统自带的 Software & Updates,避免手工输错代号、组件或地址。若在 Ubuntu 20.04 上确需编辑 /etc/apt/sources.list,应先备份:

# 仅适用于确认该文件确实承载当前源配置的系统。
sudo cp -- /etc/apt/sources.list /etc/apt/sources.list.bak

编辑后运行 sudo apt update,以命令退出状态和完整输出验收。若失败,应根据备份还原正确配置,而不是继续执行升级。

课程提到 Linux “一切皆文件”。这是一条帮助理解 Unix 设计的概括:设备、进程信息和很多内核接口会以文件或类文件接口暴露,许多图形工具也通过读写配置文件工作;它不是说所有对象和界面操作都只是普通磁盘文件。本例中,Software & Updates 修改 APT 配置并触发索引刷新,图形界面和命令行达成的是同一管理目标。

1.3 详解Linux中apt命令的使用

常见 APT 操作可整理如下:

命令作用关键边界
sudo apt update从已配置软件源刷新本机包索引不升级已安装软件
apt list --upgradable查看当前索引判定可升级的包只列出,不执行升级
apt show 包名查看包的描述、版本、依赖等信息信息来自本机索引
sudo apt install 包名...安装一个或多个包,或安装指定包的可用新版本参数是包名,不一定是命令名
sudo apt upgrade升级已安装包;需要新依赖时可以安装新包,但不会删除现有包需要删除包才能完成的升级会被保留
sudo apt full-upgrade在处理依赖时允许删除已安装包风险更高,必须审阅计划,本视频未演示
sudo apt remove 包名...删除包,但通常保留系统级配置不等于清除所有配置或用户数据
sudo apt purge 包名...删除包及由包管理器跟踪的系统级配置不会自动删除用户家目录中的个人数据
sudo apt autoremove删除被判定为不再需要的自动安装依赖执行前必须核对列表

视频提到删除 ifconfig 时应写:

# 删除提供 ifconfig 的软件包;参数不是 ifconfig,而是 net-tools。
sudo apt remove net-tools

这再次说明“命令名”和“软件包名”可能不同。可用以下命令确认某个已安装文件属于哪个包:

# 先找出当前实际调用的 ifconfig 路径。
command -v ifconfig

# 将上一步得到的绝对路径交给 dpkg 查询所属软件包。
dpkg -S /usr/sbin/ifconfig
1.3.1 视频末尾升级输出的正确解读

图形界面的 Reload 完成后,视频在终端再次执行 sudo apt update。输出改为命中阿里云的 focal、focal-updates、focal-backports 和 focal-security,并提示 252 个包可升级。这验证了镜像地址已经改变;由于图形界面刚刷新过索引,第二次 update 很快并不单独证明镜像一定更快。

接着执行 sudo apt upgrade,画面摘要为:

252 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
192 standard LTS security updates
Need to get 374 MB of archives.
After this operation, 46.5 MB disk space will be freed.

因此原笔记和口述中的“会下载 46.5 MB”是读反了:

  • 374 MB 才是预计需要下载的归档文件总量;
  • 46.5 MB 是操作完成后的磁盘空间净变化,而且这里是释放空间,不是下载量;
  • 252 个升级和 2 个新安装只代表该虚拟机当时的计划,其他时间不会相同。

教师输入 y 后,画面开始以约 151 kB/s 下载,预计还需约 41 分钟。视频在下载过程中结束,没有录到下载完成、解包、配置和命令返回提示符,因此只能确认“升级已启动”,不能写成“升级已经成功完成”。APT 下载完成后仍需解包和配置;应保持供电和足够磁盘空间,等待命令正常结束,再检查是否有错误。

一次较稳妥的交互式维护流程是:

# 1. 刷新索引,并确认没有源、网络或签名错误。
sudo apt update

# 2. 查看有哪些包可升级。
apt list --upgradable

# 3. 执行常规升级,先审阅 APT 给出的变更摘要再确认。
sudo apt upgrade

# 4. 升级完成后检查是否建议重启;文件存在时才需要安排重启。
test -f /var/run/reboot-required && cat /var/run/reboot-required

大规模升级前应创建虚拟机快照或备份重要数据,确认电源、磁盘空间和网络稳定,并保存构建工具链版本。apt 面向人工交互,输出和默认行为可能随版本调整;自动化脚本通常应使用接口更稳定的 apt-get 并显式处理退出状态,不能仅搜索输出文字判断成功。

二、本节关键纠正

原笔记或容易误解的说法精校后的结论
普通用户不能删除 root 创建的文件删除主要受父目录写与执行权限控制;视频失败是因为对象位于普通用户不可写的 /home
sudo passwd root 创建 root 管理员账户root 早已存在;该命令只是设置 root 密码,Ubuntu 日常管理优先使用 sudo
root 密码设成 0 即可单字符密码极不安全,不应照做;终端输密码不回显是正常行为
用 su 用户名 来回切换即可返回反复 su 会嵌套 Shell;应使用 exit 或 Ctrl+D 返回上一层
sudo 和 su 输入同一种密码sudo 默认验证发起用户;su 通常验证目标用户,二者策略不同
ifconfig 显示 IP、掩码和网关它显示接口地址与统计信息;默认网关看 ip route,DNS 另查
ping 不通就说明该 IP 没有设备也可能是主机关闭、路由、ARP、防火墙或 ICMP 策略问题
安装软件必须联网必须能访问已配置的包来源;来源也可能是缓存、本地仓库或离线介质
新虚拟机必须换国内源换源是可选优化;应按可达性、速度、可信度与发行版匹配情况决定
update 会升级软件update 只刷新包索引;upgrade 才执行已安装包的常规升级
视频下载量是 46.5 MB预计下载 374 MB;46.5 MB 是完成后预计释放的磁盘空间
视频证明升级成功完成视频结束时仍在下载,只证明升级开始,未证明最终成功
“一切皆文件”表示任何对象都是普通文件它是设计概括;本例的图形工具确实修改配置并刷新索引,但不能无限外推

核对依据

  • 本地 videos/324.2.2管理员&apt.mp4:逐帧核对 /home/a.c 的创建与删除、sudo passwd root、su 用户切换、ifconfig/net-tools、Windows 与 Ubuntu 地址、两次 ping、图形界面换源以及 APT 最终摘要;视频时长约 16 分 04 秒。
  • 本地 transcripts/324.2.2管理员&apt.txt 与 .srt:核对教师讲述,并结合画面纠正 passwd、su、ifconfig、net-tools、Software & Updates、Download from、Choose Server、apt update、apt upgrade 等语音识别错误。
  • Ubuntu Focal apt 手册:核对 update、upgrade、full-upgrade、install、remove、purge、autoremove 的语义,以及交互式 apt 与脚本中 apt-get 的适用边界。
  • Ubuntu 官方命令行入门教程与Ubuntu sudoers 手册:核对 Ubuntu 默认 root 管理方式、sudo 的执行身份和认证提示。
  • GNU Coreutils 权限说明与rm 手册:核对目录读、写、搜索权限与删除目录项的关系,以及 rm 对不可写文件的交互提示。
  • Ubuntu 官方网络配置文档与网络核心概念:核对接口地址、子网、默认网关、DNS、ip address 和 ip route 的职责边界。
  • Ubuntu 24.04 发行说明、Ubuntu 20.04 支持说明与Ubuntu 官方发布周期:核对 24.04 的 ubuntu.sources 迁移,以及 Ubuntu 20.04 于 2025 年 5 月 31 日结束标准支持后的维护选择。
  • Ubuntu 安全文档:不受信任的 .deb:核对只使用可信软件源和安装包的安全原则。