管理员apt
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 | 目标用户 root | root | 已为 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,随后通过图形界面更换镜像。实际步骤是:
- 打开 Ubuntu 应用菜单,启动紫色图标的 Software & Updates。
- 在 Ubuntu Software 页找到 Download from。
- 选择 Other...,在国家列表中展开 China。
- 视频选中
mirrors.aliyun.com,点击 Choose Server。 - 输入当前普通用户的密码完成管理员认证。
- 点击 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:核对只使用可信软件源和安装包的安全原则。