Lab 05: Linux 哲学践行

Lab 05: Linux 哲学践行

1. 实验目标

  1. 能够通过 /proc 和 /sys 文件系统获取系统信息(验证「一切皆文件」)。
  2. 能够使用 sysctl 查看、临时修改、持久化内核参数(体验「参数即文件」)。
  3. 能够构造多级管道命令,从原始文本数据中精确提取目标信息。
  4. 能够用 Unix 三大哲学支柱分析真实工具的设计理念。
  5. 建立从「会用」到「理解设计」的系统思维。

2. 实验环境说明

本实验需在三种环境中完成,核心目标是体验「同一哲学在不同环境中的体现与差异」:

环境 /proc & /sys 访问 sysctl 修改 注意事项
WSL2 Ubuntu 22.04 完整 有 root 内核信息反映 Windows 层;PID 1 可能非 systemd
VirtualBox Ubuntu 24.04 完整 有 root 网络接口名可能为 ens33/enp0s3 而非 eth0
共享服务器 受 ACL 限制 无 root A6 改为只读分析模式(见题目说明)

温馨提示:三种环境的差异不是 Bug,而是本实验的 Feature。当你发现某个命令在不同环境表现不同时,恭喜你正在亲身体验「一切皆文件」在权限与隔离层面的真实含义。

3. 任务清单

任务 A: 一切皆文件 — 系统信息寻宝

用「只能读文件」的方式回答以下系统信息问题。

禁止使用 psfreelscpunprocipifconfigdf 等专用工具。 只能使用 catheadgrepawkwc 等通用文本工具读取 /proc/sys 下的文件。

A1: CPU 核心数

只看 /proc/cpuinfo,回答:系统有多少个 CPU 核心?

环境差异提示:WSL2 中 /proc/cpuinfo 显示的是宿主 Windows 的 CPU 信息,可能与 VirtualBox 分配的 vCPU 数量不同。请在三种环境中都执行并对比。

A2: PID 1 的真面目

只看 /proc/1/status,回答:PID 为 1 的进程名称(Name 字段)和当前状态(State 字段)是什么?

环境差异提示:WSL2 中 PID 1 可能是 init 而非 systemd;共享服务器中受 ACL 限制,你可能无法读取所有字段——记录你实际能读到的内容和报错信息。

A3: 可用内存

只看 /proc/meminfo,回答:系统当前可用的物理内存是多少 MB?(提取 MemAvailable 的值并换算)

A4: 文件描述符上限

只看 /proc/sys/fs/file-max,回答:系统支持的最大同时打开文件数是多少?

A5: 网络接口统计

只看 /sys/class/net/ 下的文件,回答:默认网络接口的已发送(tx_packets)和已接收(rx_packets)数据包数分别是多少?

环境差异提示:不同环境的网络接口名不同。先 ls /sys/class/net/ 查看有哪些接口,再进入对应目录查找 statistics/

A6: 内核参数调优(分级任务)

有 root 环境(WSL2 / VirtualBox)

  1. 用 sysctl 查看 net.ipv4.ip_forward 当前值
  2. sysctl -w 临时开启 IP 转发并验证
  3. 写一条永久配置规则到 /etc/sysctl.d/ 并验证重启后生效

无 root 环境(共享服务器)

  1. sysctl -a 查看所有可读参数,找到 net.ipv4.ip_forward 的当前值
  2. 尝试执行 sysctl -w net.ipv4.ip_forward=1,记录报错信息
  3. 分析:为什么普通用户不能修改内核参数?这与「一切皆文件」有什么关系?(提示:ls -l /proc/sys/net/ipv4/ip_forward

加分项:记录三个环境中 A6 操作结果的差异,并分析「文件权限如何保护系统安全」(2-3 句话)。

每题提交要求


任务 B: 文本流的威力 — 管道挑战赛

下载统一数据文件 system-snapshot.txt,它模拟了一份系统状态快照,包含四个区域:

每道题指定目标输出格式,你需构造 一条管道命令 精确产生该输出。

温馨提示:每道题的答案在三种环境中完全相同——因为数据是统一的。鼓励你在自己系统上也尝试类似的管道分析(如分析 /var/log/syslog),记录在「拓展探索」中可获加分。

B1: ERROR 日志筛选

从 system-snapshot.txt 中筛选所有 ERROR 级别的日志行,只输出日志的 日期(第一个字段)和 错误信息ERROR 之后的所有内容)。

目标输出格式(前 3 行示例):

2026-01-15T08:01:12 Failed password for invalid user admin from 10.0.0.15 port 34522 ssh2
2026-01-15T08:01:14 Failed password for invalid user admin from 10.0.0.15 port 34523 ssh2
2026-01-15T08:03:45 upstream timed out (110: Connection timed out) while connecting to upstream

提示:注意过滤掉以 # 开头的注释行。

B2: 每服务 ERROR 计数

统计每个服务出现的 ERROR 次数,按次数 降序 排列。

目标输出格式

12 nginx
10 sshd
 3 docker
 2 cron
 1 systemd

提示:日志格式为 日期 主机 服务名[PID]: LEVEL ...,需要提取服务名部分。

B3: 磁盘使用率 Top 3

找出磁盘使用率最高的 3 个分区,输出 使用率挂载点

目标输出格式

95% /archive
90% /data
70% /

B4: 内存占用 Top 3 进程

找出占用内存(%MEM)最大的前 3 个进程,输出 内存百分比进程命令名

目标输出格式

15.6% /usr/sbin/mysqld
8.3% /usr/bin/dockerd
4.2% nginx: worker process

提示:进程数据区域以 USER PID %CPU %MEM ... 开头,注意跳过表头行和注释行。

B5: 综合统计(进阶)

用一条管道命令输出:错误最多的服务名错误总数,格式为 服务名 数量

目标输出

nginx 12

提示:在 B2 的基础上继续管道。

每题提交要求


任务 C: 回顾与反思 — Unix 哲学在我身边

回顾 Lab 01 ~ Lab 04,选择 3 个 你印象最深的工具或操作,分析它们如何体现 Unix 三大哲学支柱。

要求

参考方向(不给出完整答案,请用自己的语言组织):


4. 提交要求

提交 lab05/report.md

  1. 任务 A: 每题三个环境的命令、输出、环境差异说明、哲学原则说明。
  2. 任务 B: 每题的管道命令、输出结果、工具职责说明。
  3. 任务 C: Unix 哲学反思(200-400 字)。
  4. 操作录屏: asciinema 录屏转存文件 .cast(建议命名 lab05/lab05.cast,便于后续转为 text 进行智能批改)。
  5. 问题复盘: 记录在实验过程中遇到的至少 1 个问题及解决方法。