
前言FDE系列内容总纲【大纲】FDE 前沿部署工程师学习系列教程-CSDN博客前置课程列表见文档结尾附录。阶段2·Day 36Linux 入门与文件操作 — 扔掉鼠标的第一天FDE 学习系列教程 · 第二阶段 · 第 4 周 · Day 1预计时长2.5 小时 | 难度★★☆☆☆ | 前置知识Python 环境、FastAPI 基本操作一句话目标在 Windows 上用 WSL2 装出一个 Ubuntu理解 Linux 文件系统掌握 15 个文件操作命令能在命令行里自如地走来走去、翻箱倒柜。 开场客户的服务器没有桌面兄弟前三周你都在 Windows 上写代码——有资源管理器、有 VS Code 图形界面、双击就能装东西。但你到客户现场运维扔给你的通常是这样一串东西ssh fde10.20.30.40 密码********黑底白字一个终端没有桌面、没有图标、没有鼠标指针。客户的服务器 90% 以上跑的是 Linux。你要做的一切——看日志、改配置、重启服务、备份数据——全靠敲命令。听着像退回原始社会恰恰相反命令行是老司机的高速通道在几百个日志文件里搜ERROR一条命令 3 秒鼠标点开每个文件 CtrlF半小时给 100 台设备的配置文件批量改一个 IP一条命令手动改改到怀疑人生今天我们不折腾真服务器先在你自己的 Windows 里白嫖一个 Linux——用 WSL2 装个 Ubuntu零成本、零风险练坏了删掉重装就行。相关参考文档【基础】Windows开发设置入门8Windows 子系统 (WSL)操作入门_windows子系统-CSDN博客 一、WSL2 是个啥先搞懂再装WSL 全称Windows Subsystem for LinuxWindows 里的 Linux 子系统。微软官方做的兼容层让你在 Windows 里直接跑一个真正的 Linux不用装虚拟机、不用双系统。┌────────────────────────────────────────────┐ │ 你的 Windows 电脑 │ │ │ │ ┌──────────────┐ ┌──────────────────┐ │ │ │ VS Code │ │ 浏览器/微信... │ │ │ │ 浏览器 │ │ │ │ │ └──────────────┘ └──────────────────┘ │ │ │ │ ┌──────────────────────────────────────┐ │ │ │ WSL2真正的 Ubuntu Linux 内核 │ │ │ │ ┌────────┐ ┌──────┐ ┌──────────┐ │ │ │ │ │ bash │ │ python│ │ 文件系统 │ │ │ │ │ └────────┘ └──────┘ └──────────┘ │ │ │ └──────────────────────────────────────┘ │ └────────────────────────────────────────────┘ Windows 和 WSL 还能互相串门 · WSL 里访问 Windows 的 C 盘/mnt/c/ · Windows 资源管理器访问 WSL 文件\\wsl$ 或 \\wsl.localhost 为什么选 WSL2 而不是虚拟机虚拟机要给 Linux 分固定内存、启动要等一两分钟WSL2 轻量、秒开、和 Windows 共享文件专门给开发者准备的。️ 二、安装 WSL2 Ubuntu步骤 1以管理员身份打开 PowerShell按Win 键输入powershell在 Windows PowerShell 上右键 → 以管理员身份运行。弹出蓝底窗口。步骤 2一条命令安装wsl --install这条命令会自动帮你启用 WSL 功能 → 下载 WSL2 内核 → 安装默认的Ubuntu发行版。等待下载完成然后重启电脑。⚠️ 常见报错处理提示虚拟化未启用重启进 BIOS开机狂按 F2/Del/F10看品牌找到Intel VT-x或AMD-V/SVM选项设为 Enabled提示需要更新 WSL 内核按提示去微软商店搜 Windows Subsystem for Linux 更新或执行wsl --update想装指定版本wsl --install -d Ubuntu-22.04步骤 3第一次启动 Ubuntu重启后开始菜单里会出现一个新应用Ubuntu点开它。第一次启动会等一两分钟初始化然后让你创建 Linux 用户名和密码Installing, this may take a few minutes... Please create a default UNIX user account. Enter new UNIX username: fde New password: Retype new password: passwd: password updated successfully用户名建议填fde本教程都按这个写密码输入时屏幕不显示任何字符连星号都没有——这是 Linux 的正常设计不是键盘坏了盲打完回车即可这个密码是你在 Linux 里的管理员密码后面用sudo时要输记住它看到下面这个提示符说明你正式进入 Linux 了fdeDESKTOP-ABC123:~$ └┬┘ └─────┬──────┘ └┬┘ │ │ └─ 当前目录~ 家目录 /home/fde │ └─ 主机名 └─ 你的用户名步骤 4验证三件套whoami # 我是谁 → fde pwd # 我在哪 → /home/fde uname -a # 系统信息 → Linux ... x86_64 ... Ubuntu ...再顺手更新一下软件源相当于手机的应用商店刷新列表sudo apt update sudo apt upgrade -y解说部分含义sudo以管理员root权限执行后面的命令第一次会让你输刚才设的密码。以后看到命令前面带sudo心里默念管理员模式即可。aptDebian/Ubuntu 的包管理工具update更新软件源索引不是更新软件本身apt update做什么去/etc/apt/sources.list及sources.list.d/里配置的软件仓库下载最新的软件包清单。这份清单记录了每个软件当前有哪些版本、从哪里下载。它不安装、不升级任何软件只是刷新目录信息让你知道有哪些新版本可用。 类比相当于刷新应用商店的商品目录但还没下载安装任何东西。连接符表示逻辑与只有前一条命令成功执行返回 0才会执行后一条。若apt update失败比如网络问题后面的upgrade就不会执行避免在信息过期的情况下盲目升级。部分含义sudo同样需要管理员权限apt upgrade升级已安装的软件包到最新版本-y对所有询问自动回答yes无需手动确认apt upgrade做什么根据刚才update拿到的最新清单把系统里已安装的软件升级到新版本。它不会删除已有软件包也不会安装新依赖来满足升级这是它和dist-upgrade/full-upgrade的区别。-y的作用正常情况下升级会提示Do you want to continue? [Y/n]需要手动敲y。加了-y就自动确认适合脚本、自动化、远程无人值守场景。VS Code 联动强烈推荐在 VS Code 扩展商店装一个WSL扩展微软官方下载量最高那个。装好后在 Ubuntu 终端里cd ~/fde_project然后敲code .VS Code 就直接在 Linux 环境里打开了这个目录——终端、编辑器、调试全是 Linux 的体验丝滑。 三、Linux 文件系统先认路再走路Linux 的目录结构和 Windows 完全不是一个思路。别慌FDE 日常打交道的就下面这几个/ ← 根目录一切的起点相当于此电脑 ├── home/fde/ (~) ← 你的家目录你的文件都放这等价于 C:\Users\你 ├── etc/ ← 系统配置文件nginx.conf、各种 .conf 都在这 ├── var/ │ ├── log/ ← 日志日志日志排障第一现场 │ └── lib/ ← 服务产生的数据MySQL 数据默认在这 ├── tmp/ ← 临时文件重启可能清空 ├── usr/ │ └── bin/ ← 系统命令的可执行文件ls、cp 都在这 └── mnt/ ├── c/ ← Windows 的 C 盘挂载在这里 └── d/ ← D 盘Linux vs Windows 路径三大差异对比WindowsLinux分隔符反斜杠C:\Users\fde正斜杠/home/fde盘符C: D: E: 多个盘没有盘符一切从/开始家目录C:\Users\ThinkPad/home/fde简写~大小写不敏感A.TXTa.txt严格敏感A.TXT和a.txt是两个文件路径里的特殊符号高频务必记牢~ 家目录 cd ~ → /home/fde . 当前目录 ./hello.sh → 当前目录下的 hello.sh .. 上一级目录 cd .. → 从 /home/fde 到 /home - 上一次所在目录 cd - → 在两个目录间反复横跳 / 根目录开头时 cd / → 回到最顶层绝对路径 vs 相对路径绝对路径从/出发的完整地址如/home/fde/project/main.py在哪都能用相对路径相对于你当前所在目录如./data/a.csv、../config/x.yml判断技巧开头是/就是绝对路径其余是相对路径。️ 四、导航四件套pwd / ls / cd / find正式开练。在 Ubuntu 终端里逐条敲边敲边看输出命令这东西看十遍不如手敲一遍。# ① pwd我现在站在哪个目录 pwd # /home/fde # ② ls这个目录里有什么 ls # 普通列表隐藏文件不显示 ls -l # 长格式权限、大小、时间全显示 ls -a # all连隐藏文件以 . 开头的也显示 ls -lh # human文件大小显示成 K/M/G 而不是字节数 ls -lah # 三个参数组合最常用建议背下来 # ③ cd换目录 cd /tmp # 绝对路径去 /tmp pwd # /tmp cd ~ # 回家 cd /var/log # 去看系统日志目录 ls # 里面有 syslog、nginx/、mysql/ 等 cd - # 嗖地一下回到上一个目录/tmp cd .. # 回上一级/tmp → / cd # 不带参数 cd ~直接回家ls -l输出逐列拆解明天细讲权限今天先混眼熟$ ls -lh -rw-r--r-- 1 fde fde 2.1K Sep 18 10:00 app.log drwxr-xr-x 2 fde fde 4.0K Sep 18 09:30 data └─┬──┘└┬┘ └┬┘ └┬┘ └┬┘ └────┬────┘ │ │ │ │ │ └─ 修改时间 │ │ │ │ └─ 文件大小-h 后人类可读 │ │ │ └─ 所属组 │ │ └─ 所有者 │ └─ 硬链接数现在忽略它 └─ 权限 类型第一个字符d目录-普通文件l快捷方式# ④ find按条件找文件FDE 找配置/找日志神器 find /tmp -name *.txt # 在 /tmp 下递归找所有 .txt find ~ -name *.py # 家目录下找所有 Python 文件 find ~ -maxdepth 2 -name *.py # 只往下找 2 层太深的不翻 find ~ -name *.log -mtime -1 # 24 小时内被修改过的 .log find . -type d -name data # 只找名为 data 的目录-type f 则只找文件find是 Linux 里最强大的查找命令没有之一。参数组合极多但 FDE 日常 80% 场景就是find 目录 -name 模式先把这一招用熟。️ 五、增删改移mkdir / touch / cp / mv / rmcd ~ # ① mkdir建目录 mkdir myproject # 建一个 mkdir -p a/b/c # -p 一口气建多层父目录不存在也不报错 tree a 2/dev/null || sudo apt install -y tree tree a # a/ # └── b/ # └── c/ # ② touch建空文件主要用来快速创建文件 touch hello.txt ls -l hello.txt # 大小 0 # ③ echo 重定向写内容进文件 echo 第一行 hello.txt # 覆盖写入 echo 第二行 hello.txt # 追加写入注意区别 cat hello.txt # 看一下两行都在 # 第一行 # 第二行 # ④ cp复制 cp hello.txt hello_backup.txt # 复制文件 cp -r myproject myproject_copy # 复制目录必须加 -r递归 # ⑤ mv移动 / 重命名Linux 里这俩是同一个命令 mv hello_backup.txt moved.txt # 重命名 mv moved.txt myproject/ # 移动到目录里 ls myproject/ # ⑥ rm删除⚠️ Linux 删除不进回收站删了就没了 rm moved.txt # 等等moved.txt 已经在 myproject 里了 rm myproject/moved.txt # 这样才对 rm -r myproject_copy # 删目录要加 -r rm -rf a # -r 递归 -f 不询问目录非空也照删 关于 rm 的红线警告❌ 绝对绝对不要敲的命令 rm -rf / rm -rf /* sudo rm -rf / 含义从根目录开始无差别强删整个系统。 没有回收站、没有确认、没有后悔药。 系统文件删坏 → 当场去世只能重装。 ✅ 安全习惯 1. 删之前先 ls 一眼你要删的路径对不对 ls myproject/ ← 先看看里面有啥 rm -r myproject/ ← 确认无误再删 2. 用 Tab 补全路径别手敲长路径 3. 重要数据先备份再删 4. 生产服务器上慎用 -f先用不带 -f 的看提示Tab 补全是你最好的朋友敲命令或路径时按一下Tab 键系统自动补全连按两下列出所有可能的开头。既能提速又能防止路径敲错。从第一天就养成习惯。️ 六、查看文件cat / head / tail / less / wc排障时 90% 的时间在看文件——配置文件、日志文件、数据文件。# 先造一个 20 行的练习文件 for i in $(seq 1 20); do echo 第 $i 行内容 sample.txt; done # ① cat一次性打印整个文件适合小文件 cat sample.txt cat -n sample.txt # -n 显示行号 # ② head只看开头 head -3 sample.txt # 前 3 行 # 第 1 行内容 # 第 2 行内容 # 第 3 行内容 # ③ tail只看结尾看日志最新报错就靠它 tail -3 sample.txt # 最后 3 行 tail -f sample.txt # ⭐ follow实时追踪新增内容 # 文件有新内容会立刻刷出来CtrlC 退出 # FDE 排障黄金命令tail -f /var/log/nginx/error.log # ④ less大文件分页查看几百 MB 的日志别用 cat会刷屏到天荒地老 less sample.txt # less 里面的操作键 # 空格 / f 下一页 # b 上一页 # g 跳到文件开头 G 跳到文件末尾 # /关键词 向下搜索n 下一个N 上一个 # q 退出 # ⑤ wc数行数/词数/字节数 wc -l sample.txt # 20 sample.txt-l lines 行数 wc -w sample.txt # -w words 词数命令适用场景记忆点cat小文件全看、拼接文件小猫咪一口吞下head -n N看文件开头 N 行配置文件看头部tail -n N看文件结尾 N 行日志看最新tail -f实时追踪日志排障第一神器less大文件翻页搜索少即是多进得去出得来qwc -l数行数统计错误条数️ 七、在 WSL 里部署你的 FastAPI 项目学了这么多命令立刻用起来——把第 2 周的 FastAPI 项目搬到 Linux 里跑。这一步会暴露 Windows/Linux 的两个经典差异。# ① 建项目目录 mkdir -p ~/fde_project cd ~/fde_project # ② Ubuntu 自带 Python3确认一下 python3 --version # Python 3.10.x 或更高 # ③ 装 pip 和 venv 工具 sudo apt update sudo apt install -y python3-pip python3-venv # ④ 建虚拟环境注意 Linux 的激活路径 python3 -m venv venv source venv/bin/activate # ⭐ Linux 写法 # Windows 是venv\Scripts\activate # 激活成功后提示符前面会出现 (venv) # ⑤ 装依赖 pip install fastapi uvicorn -i https://pypi.tuna.tsinghua.edu.cn/simple # ⑥ 写一个最小 main.py用 nano 或直接 VS Code 的 code . cat main.py EOF from fastapi import FastAPI import uvicorn app FastAPI() app.get(/) def root(): return {msg: Hello from Linux!, env: WSL2 Ubuntu} app.get(/health) def health(): return {status: ok} if __name__ __main__: uvicorn.run(app, host0.0.0.0, port8000) EOF # ⑦ 跑起来 uvicorn main:app --reload --host 0.0.0.0 --port 8000新开一个 Ubuntu 终端窗口验证curl http://localhost:8000/ # {msg:Hello from Linux!,env:WSL2 Ubuntu} curl http://localhost:8000/health # {status:ok}看到返回的 JSON恭喜——你的 API 已经跑在 Linux 上了。在 Windows 浏览器里打开http://localhost:8000/docs同样能访问WSL2 的端口和 Windows 是共享的。⚠️Windows → Linux 切换最容易踩的两个坑路径分隔符\→/虚拟环境激活venv\Scripts\activate→source venv/bin/activate另外 Ubuntu 里 pip 装的命令可能提示找不到用python3 -m pip install xxx或pip3更稳。让命令停下来CtrlCuvicorn --reload会一直占着终端。在 Linux 里想中断前台运行的程序按Ctrl C不是关窗口。这个操作今天会用很多次记住它。 八、不会命令怎么办三个求助渠道Linux 命令几百个没人背得完关键是会查# ① --help快速看参数最常用 ls --help # 内容多配合 less ls --help | less # ② man完整说明书manual man ls # 空格翻页/搜关键词q 退出 # ③ which某个命令到底装没装、在哪 which python3 # /usr/bin/python3 which nginx # 没输出就是没装 新手常见困惑参数前面什么时候一个横杠什么时候两个 约定俗成单字母缩写用一个横杠-l、-a完整单词用两个--all、--human-readable。ls -lah和ls -l -a -h完全等价单字母参数可以抱团。 本课小结类别命令一句话环境wsl --install一键装 Ubuntu身份whoami/sudo我是谁 / 管理员模式导航pwd我在哪导航ls -lah看目录内容最常用组合导航cd ~cd ..cd -回家 / 上级 / 上一个位置查找find 路径 -name 模式按名字找文件建目录mkdir -p a/b/c递归建多层建文件touch/echo 建空文件 / 写内容复制cp/cp -r文件 / 目录移动mv移动和重命名是同一个删除rm/rm -r/rm -rf文件 / 目录 / 强删危险查看catheadtail -fless全文 / 头 / 尾实时 / 分页计数wc -l数行数求助--help/man查用法 / 查手册中断Ctrl C停止前台程序 核心认知Linux 世界一切皆文件——配置是文件、日志是文件、连硬件设备也表现为文件。所以文件操作命令是所有后续操作的地基。今天不用求多先把ls / cd / find / cat / tail -f这五个练成肌肉记忆。 课后练习练习 1用纯命令搭出项目目录树约 20 分钟不允许用 VS Code只用终端命令建出下面结构~/fde_lab/ ├── src/ │ ├── main.py │ └── utils/ │ └── helper.py ├── tests/ │ └── test_main.py ├── data/ │ └── sample.csv └── README.md提示mkdir -p src/utils tests data一次搞定多层目录空文件用touch。最后用tree ~/fde_lab没装就sudo apt install tree截图式验证。练习 2文件查看三连约 15 分钟# 往 data/sample.csv 写 5 行设备数据 cat ~/fde_lab/data/sample.csv EOF device,temperature 注塑机A1,65 注塑机A2,82 注塑机A3,91 冲压机B1,75 冲压机B2,88 EOF然后分别用cat、head -2、tail -2、wc -l查看说出每种命令适合什么场景。练习 3find 大搜查约 15 分钟用find找出家目录下所有.py文件应该能找到 main.py、helper.py、test_main.py 三个找出/var/log下所有.log文件用find ~ -name *.csv确认 sample.csv 的绝对路径是什么 下节预告今天你学会了在 Linux 里走来走去。明天上三个硬货权限机制——为什么你总看到Permission deniedrwxr-xr--这串鬼画符到底啥意思进程管理——服务卡死了怎么找到它、干掉它文本三剑客 grep / awk / sed 管道——在几万行日志里揪出报错的终极武器这是 FDE 排障的看家本领命令行的真正威力明天才开始显现咱们接着干附录前置课程列表阶段一认知启蒙AI 认知与 FDE 角色AI 认知【FDE系列】阶段1Day 1AI 层级关系 — 四个嵌套的圈-CSDN博客【FDE系列】阶段1Day 2AI 三阶段发展史 — 会认 → 会判断 → 会创造-CSDN博客【FDE系列】阶段1Day 3符号 AI vs 机器学习 — 两条路线的本质区别-CSDN博客【FDE系列】阶段1Day 4Transformer 的历史意义 — 2017 年的分水岭-CSDN博客【FDE系列】阶段1Day 5本周复习与自测 — 检验你的 AI 认知地基-CSDN博客【FDE系列】阶段1Day 6Transformer 架构 — 一张图纸盖出千千万万栋楼-CSDN博客【FDE系列】阶段1Day 7LLM 本质 — 文字接龙机器-CSDN博客【FDE系列】阶段1Day 8Token — 模型眼中的最小单位-CSDN博客【FDE系列】阶段1Day 9AI 幻觉 — 为什么会一本正经地胡说八道-CSDN博客【FDE系列】阶段1Day 10上下文窗口 — 模型的记忆力上限 本周复习-CSDN博客【FDE系列】阶段1Day 11Prompt — 给模型立规矩-CSDN博客【FDE系列】阶段1Day 12Memory — 让模型记住上下文【FDE系列】阶段1Day 13RAG — 给模型配图书管理员-CSDN博客【FDE系列】阶段1Day 14Tool Use — 让模型动手操作-CSDN博客【FDE系列】阶段1Day 15MCP — 统一的工具接口标准 第三周复习-CSDN博客FDE 基础概念【FDE系列】阶段1Day 16什么是 FDE — 把 AI 变成客户结果的人-CSDN博客【FDE系列】阶段1Day 17FDE vs 传统实施 — 三大本质区别-CSDN博客【FDE系列】阶段1Day 18FDE 三重身份 C6 胜任力模型-CSDN博客【FDE系列】阶段1Day 19七阶段行动路径 行业经验的价值-CSDN博客【FDE系列】阶段1Day 20阶段总结与产出物 — 第一阶段收官-CSDN博客阶段二技术地基Python FastAPI SQL Docker API 集成Python基础【FDE系列】阶段2Day 21Python 环境搭建 — 写出你的第一行代码-CSDN博客【FDE系列】阶段2Day 22变量、数据类型、条件判断 — Python 的“记忆“和“判断“-CSDN博客【FDE系列】阶段2Day 23循环与函数 — 让代码跑 100 遍、把逻辑打包复用-CSDN博客【FDE系列】阶段2Day 24数据结构 — 列表、字典、集合、元组-CSDN博客【FDE系列】阶段2Day 25文件读写与 JSON — 让程序连通外部数据第一周收官-CSDN博客【FDE系列】阶段2Day 26模块化编程 — 把代码拆成“抽屉柜“-CSDN博客【FDE系列】阶段2Day 27异常处理与日志 — 让程序“摔不烂、查得到“-CSDN博客FastAPI入门到进阶【FDE系列】阶段2Day 28FastAPI 入门 — 把你的函数变成 API 服务-CSDN博客【FDE系列】阶段2Day 29FastAPI 进阶 — Pydantic 模型与完整 CRUD 实战-CSDN博客【FDE系列】阶段2Day 30生产代码规范 — 测试、类型注解、配置管理第二周收官-CSDN博客SQL基础【FDE系列】阶段2Day 31SQL 基础 — 增删改查一把梭-CSDN博客【FDE系列】阶段2Day 32多表查询 — JOIN 与聚合-CSDN博客【FDE系列】阶段2Day 33进阶查询 — 窗口函数与 CTE-CSDN博客【FDE系列】阶段2Day 34数据清洗 — 把脏数据捋干净-CSDN博客【FDE系列】阶段2Day 35Python SQL — 工单接入 MySQL 本周收官-CSDN博客