CS1602计算导论
Lab 8Part 3 问题求解与 AI 协作AI Level 1

Linux 入门与 AI 代码审查实战

上半场是 Linux 命令行——几乎所有服务器和计算集群都跑在上面。下半场是 AI 代码审查:不写代码,找别人代码里的问题。

截止:小作业 3 · 11 月 17 日 周二 23:59
本页目录

本次目标

  • 会用命令行在文件系统里走动、看文件、找东西
  • 用 ruff 和调试器审查代码
  • 独立发现 AI 生成代码里的四类问题
  • 写出合格的 AI 使用声明

上半场:Linux 命令行

为什么要学

你写的程序,将来大概率跑在没有图形界面的服务器上。科学计算集群、云服务器、CI 流水线——只有命令行。

而且很多工具本来就是命令行的:装包、跑测试、查看日志、管理版本。

怎么开一个 Linux 环境

你的系统怎么做
macOS直接用「终端」。macOS 是 Unix,绝大多数命令通用
Windows装 WSL(Windows Subsystem for Linux):管理员开 PowerShell,运行 wsl --install,重启后就有一个真的 Ubuntu
Linux你已经在用了

走动与查看

pwd                 # 我在哪
ls                  # 这里有什么
ls -l               # 详细信息:权限、大小、修改时间
ls -a               # 包括隐藏文件(以 . 开头的)
ls -lh              # 大小用 KB/MB 显示

cd /path/to/dir     # 进入某目录
cd ..               # 上一级
cd ~                # 回到家目录
cd -                # 回到上一个目录

文件操作

mkdir mydir             # 建目录
mkdir -p a/b/c          # 一次建多级

touch file.txt          # 建空文件
cp a.txt b.txt          # 复制
cp -r dir1 dir2         # 复制整个目录
mv a.txt b.txt          # 改名 / 移动
rm file.txt             # 删文件
rm -r dir               # 删目录

看文件内容

cat file.txt            # 全部打印出来(适合小文件)
head file.txt           # 前 10 行
head -n 20 file.txt     # 前 20 行
tail file.txt           # 后 10 行
tail -f log.txt         # 持续跟踪新增内容(看日志用)
less file.txt           # 分页浏览,按 q 退出,按 / 搜索
wc -l file.txt          # 数行数

查找

grep "error" log.txt            # 找包含 error 的行
grep -i "error" log.txt         # 忽略大小写
grep -n "error" log.txt         # 显示行号
grep -r "TODO" .                # 在当前目录递归搜索

find . -name "*.py"             # 找所有 .py 文件
find . -name "*.py" -size +10k  # 而且大于 10KB

管道:把命令串起来

| 把前一个命令的输出,喂给后一个命令。这是命令行最强大的地方。

ls -l | wc -l                       # 数这个目录有多少个文件
cat data.txt | grep "2026" | wc -l  # 数含 2026 的行有几行
ps aux | grep python                # 找正在跑的 python 进程
history | grep git                  # 回忆自己敲过什么 git 命令

跑 Python

python3 hello.py            # 运行脚本
python3 -c "print(2**10)"   # 直接执行一句
python3 -m pip install ruff # 装包(推荐这种写法,避免装错解释器)
python3 -m pytest           # 跑测试(L11 会用)

其他有用的

man ls              # 看某个命令的手册,按 q 退出
which python3       # 这个命令实际是哪个文件
echo $PATH          # 看环境变量
chmod +x script.sh  # 给文件加可执行权限
df -h               # 磁盘还剩多少
top                 # 看谁在占 CPU,按 q 退出

下半场:AI 代码审查

8-1 命令行热身

在你的 Linux 环境(或 macOS 终端)里完成,把每一步的命令和输出记录到提交说明里:

  1. 在家目录下建一个 cs1602/lab08 目录
  2. 进去,建三个文件 a.py b.py c.txt
  3. 用 ls -l 列出,把输出贴上来
  4. 在 a.py 里写一行 print("hello"),用 python3 a.py 运行
  5. 用一条命令数出你的 Lab 1–7 代码目录里有多少个 .py 文件
  6. 用 grep 在你自己的代码里找出所有 TODO 或 print( 出现的位置

8-2 让 ruff 审你自己的代码

python3 -m pip install ruff
ruff check .

对你 Lab 1 到 Lab 7 的所有代码跑一遍。在提交说明里回答:

  1. 一共报了多少个问题?
  2. 出现最多的是哪三类?
  3. 挑三条你不理解的,查清楚它为什么这么要求,各写一句话解释

8-3 审查四段代码

下面每段代码都有恰好一个问题。对每一段,在提交说明里写:

  • 问题是什么(属于 L8 讲的哪一类)
  • 怎么发现的(读出来的?跑出来的?测出来的?)
  • 改对的版本
# A
def second_largest(nums: list[int]) -> int:
    s = sorted(nums, reverse=True)
    return s[1]
# B
def title_case(s: str) -> str:
    return s.capitalize_words()
# C
def has_duplicate(items: list[int]) -> bool:
    for i in range(len(items)):
        for j in range(len(items)):
            if i != j and items[i] == items[j]:
                return True
    return False
# D
def count_chars(s):
    d = {}
    for i in range(len(s)):
        c = s[i]
        if c in d:
            d[c] = d[c] + 1
        else:
            d[c] = 1
    return d

8-4 用 AI 写一个函数,然后拆了它

这道题必须用 AI 完成第一步。

  1. 让 AI 写 is_valid_ipv4(s: str) -> bool,判断字符串是否是合法的 IPv4 地址
  2. 先别看它的代码。 自己列出至少 8 个测试用例,包含:
    • 至少 3 个合法的
    • 至少 5 个非法的(想想:段数不对?超过 255?有前导零?空字符串?有空格?负数?)
  3. 用你的用例测它
  4. 记录:它通过了几个?失败在哪?
  5. 如果它失败了,先自己改对,再问 AI 为什么它会漏掉这种情况

在提交说明里附上:你的测试用例、AI 的原始代码、测试结果、你的修正。

8-5 用调试器走一遍递归

用 VS Code 的调试器,在你 L7 写的 hanoi() 或 factorial() 上:

  1. 在递归调用那一行设断点
  2. 按 F5 启动,用 F11 步进
  3. 观察左侧的调用栈面板,截图一张递归到第 3 层时的样子
  4. 在提交说明里回答:调用栈面板显示了什么?和你在 L7 用缩进 print 看到的有什么对应关系?

8-6 写一份 AI 使用声明

为你本次实验的整体工作写一份 AI 使用声明。参考 L8 里的例子,包含三要素:用了什么、生成了哪部分、如何验证。

如果你这次完全没用 AI,就写”本次未使用 AI”,并说明原因——这同样是合格的声明。

提交前自查

  • 8-1 的六步命令和输出都记录了
  • 8-2 挑出了三条不理解的规则并查清楚了
  • 8-3 四段代码都写了「怎么发现的」,且不全是”读出来的”
  • 8-4 的测试用例是看代码之前写的,至少 8 个
  • 8-5 有调用栈面板的截图
  • 8-6 AI 使用声明写了
  • 个人项目 A 已提交(本周日截止,Level 0)