03 Linux 及 Shell — 学习指南
学习理念:Linux 不是靠背命令学的,而是靠理解「这个命令解决什么场景的问题」。 命令记不住就问 AI,你只需要知道「有这个东西、能干什么、什么场景下用」。
学习路径
环境搭建(1次)→ 理解目录结构 → 掌握核心命令 → 学会 Shell 编程
① 🟢 环境搭建(软件替代方案)
② 🟢 Linux 目录结构(一棵树的思维)
③ 🟢 包管理 & 帮助命令(怎么装软件、怎么看文档)
④ 🟢 文件目录操作(最常用的命令集)
⑤ 🟢 文件处理(echo/重定向/链接)
⑥ 🟠 vim 编辑器(⚠️ 需要上手适应)
⑦ 🟡 用户与权限管理(多用户系统的核心)
⑧ 🟢 系统管理命令(find/grep/管道/tar/进程/定时)
⑨ 🟢 Shell 编程-基础(变量/运算/条件)
⑩ 🟢 Shell 编程-流程控制(if/case/for/while)
⑪ 🟡 Shell 函数 & 文本处理(cut/awk)本节 AI 替代率:~93% | 人工干预率:~7%
AI 擅长:写 Shell 脚本、解释命令参数、分析权限配置。
人类需决策:理解 Linux 设计哲学、选择合适的工具组合、排查实际环境问题。
1. 环境搭建
原始课程提供的软件
| 软件 | 作用 | 替代方案 | 推荐 |
|---|---|---|---|
| VMware Workstation 17 | 在 Windows 上运行 Linux 虚拟机 | WSL2(Windows Subsystem for Linux) | ⭐ 推荐 WSL2 |
| Ubuntu 22.04.4 ISO | Linux 系统安装镜像 | Microsoft Store 直接安装 Ubuntu | ⭐ 更方便 |
| Xshell 8 | SSH 客户端(连接远程 Linux) | Windows Terminal(系统已内置) | ⭐ 推荐 |
| Xftp 8 | SFTP 文件传输 | scp 命令 或 VS Code Remote 插件 | ⭐ 命令行足矣 |
为什么推荐 WSL2?
- 无需虚拟机,直接在 Windows 内核上运行 Linux
- 启动速度秒级,不像 VMware 需要开机引导
- 与 Windows 文件系统互通(
\\wsl.localhost\Ubuntu\)- 无需 VMware 许可证激活
WSL2 安装命令
bash
# 以管理员身份打开 PowerShell,运行:
wsl --install -d Ubuntu-22.04
# 安装完成后重启,设置用户名和密码即可安装完 WSL2 后,在 Windows Terminal 中输入
wsl即可进入 Linux 环境。所有 Linux 命令都在 WSL2 终端里操作。
2. Linux 目录结构 — 一棵倒挂的树
李永乐式比喻:Linux 的目录结构就像一棵倒着长的树。
/是树根(根目录),所有东西都从这里长出来- Windows 用盘符(C: D:)区分不同存储,Linux 只有一个根
/,一切设备都挂载在某个目录下
一句话记住:
/bin放命令、/etc放配置、/home放用户数据、/var放日志、/tmp放临时文件。 你大部分时间都在/home/你的用户名/下活动。
3. 包管理 & 帮助命令
apt — Ubuntu 的"应用商店"
bash
# 更新软件列表(装软件前先运行)
sudo apt update
# 安装软件
sudo apt install nginx
# 卸载软件
sudo apt remove nginx
# 搜索软件
apt search python
# 查看已安装的软件
apt list --installed帮助命令(遇到不会的命令怎么办?)
bash
# man: 最详细的帮助文档(按 q 退出)
man ls
# --help: 命令自带的快速帮助
ls --help
# whatis: 一句话告诉我这个命令是干什么的
whatis lsAI 时代的方式:遇到不会的命令,直接问 AI "ls 的 -l 参数是什么意思?"比查 man 文档快 10 倍。
4. 文件目录操作 — 最常用的命令集
李永乐式比喻:把 Linux 文件系统想象成一个巨大的文件柜——
pwd= 你现在站在哪个柜子前面?ls= 打开柜子看看里面有什么cd= 走到另一个柜子前cp= 把文件复印一份放到另一个位置mv= 把文件从这格挪到那格rm= 把文件扔进碎纸机(⚠️ 不可恢复!)mkdir= 在柜子里加一个新隔层
| 命令 | 英文全称 | 作用 | 常用示例 |
|---|---|---|---|
pwd | Print Working Directory | 查看当前在哪个目录 | pwd -> /home/alice |
ls | List | 列出目录内容 | ls -la(显示所有文件含隐藏) |
cd | Change Directory | 切换目录 | cd /etc, cd ~(回家目录) |
mkdir | Make Directory | 创建目录 | mkdir -p a/b/c(递归创建) |
touch | — | 创建空文件或更新时间戳 | touch file.txt |
cp | Copy | 拷贝文件 | cp -r dir1 dir2(递归拷贝目录) |
mv | Move | 移动或重命名 | mv old.txt new.txt(重命名) |
rm | Remove | 删除(⚠️ 不进回收站) | rm -rf dir(⚠️ 危险!) |
cat | Concatenate | 查看文件内容 | cat file.txt |
tail | — | 查看文件末尾 | tail -f log.log(实时跟踪日志) |
⚠️
rm -rf /会删除整个系统。永远不要在生产环境运行这个命令。
5. 文件处理:echo / 重定向 / 链接
bash
# echo: 打印内容到终端
echo "Hello World"
# >: 重定向输出到文件(覆盖)
echo "第一行" > file.txt
# >>: 重定向输出到文件(追加)
echo "第二行" >> file.txt
# |: 管道符(⭐ 最重要)前一个命令的输出作为后一个命令的输入
ls -la | grep ".txt" # 找出所有 .txt 文件
cat file.txt | wc -l # 统计文件行数
# ln: 链接
# 硬链接 = 给文件取了个新名字(指向同一个数据块)
ln file.txt link.txt
# 软链接 = 快捷方式(指向文件路径)
ln -s /usr/bin/python3 python36. vim 编辑器(⚠️ 需要上手适应)
李永乐式比喻:vim 像一个带三种模式的遥控器——
- 普通模式 = 遥控器待机状态。按按键不会输入文字,而是执行命令(
dd=删除行、yy=复制行)- 插入模式 = 按下"编辑"按钮。此时按键盘才会输入文字
- 命令模式 = 按下"设置"按钮。输入
:w保存、:q退出
速查表(记住 5 个就够了)
| 操作 | 命令 | 说明 |
|---|---|---|
| 进入插入模式 | i | 从普通模式进入插入模式 |
| 回到普通模式 | ESC | 从任何模式回到普通模式 |
| 保存 | :w | 在命令模式下输入 |
| 退出 | :q | 在命令模式下输入 |
| 保存并退出 | :wq 或 ZZ | 最常用的操作 |
AI 时代:直接在 VS Code 或任何 GUI 编辑器中编辑文件,没必要在 vim 里写代码。
7. 用户与权限管理
用户管理
bash
# root 用户(Linux 的"超级管理员")
# 普通用户操作需要 root 权限时,用 sudo
sudo apt update
# 添加用户
sudo useradd -m alice # -m 创建家目录
sudo passwd alice # 设置密码
# 删除用户
sudo userdel -r alice # -r 同时删除家目录
# 切换用户
su - alice文件权限
李永乐式比喻:文件权限就像三重门禁系统——
r(读)= 能不能看到门牌号w(写)= 能不能改门牌号x(执行)= 能不能进门
bash
# 查看文件权限
ls -l file.txt
# -rwxr-xr-- 1 alice staff 1024 Jun 26 10:00 file.txt
# ^^^^^^^ 权限位
# 前3位 = 文件所有者(owner)的权限
# 中3位 = 同组用户(group)的权限
# 后3位 = 其他用户(other)的权限
# 权限的数字表示
# r = 4, w = 2, x = 1
# rwx = 4+2+1 = 7
# r-x = 4+0+1 = 5
# r-- = 4+0+0 = 4
chmod 755 file.txt # rwxr-xr-x
chmod 644 file.txt # rw-r--r--
# 修改文件所有者
sudo chown alice:staff file.txt8. 系统管理命令
李永乐式比喻:
find= 在图书馆里找一本书,你可以按书名、作者、出版年份搜索grep= 翻开书,在文字里搜索某个关键词管道 |= 工厂的传送带,一个机器的输出直接传给下一个机器tar= 把一堆文件装进一个行李箱(打包),还能压缩(拉上拉链)
| 命令 | 用途 | 常用示例 |
|---|---|---|
find | 查找文件 | find /home -name "*.txt" |
grep | 搜索文件内容 | grep "error" log.txt |
| ` | ` | 管道符 |
tar | 打包压缩 | tar -czf archive.tar.gz dir/ |
df -h | 磁盘使用情况 | 看看硬盘还剩多少空间 |
du -sh | 目录占用空间 | 看看这个文件夹多大 |
ping | 网络连通测试 | ping google.com |
ps aux | 查看进程 | 看看哪些程序在运行 |
kill | 终止进程 | kill -9 PID(强制杀掉) |
crontab | 定时任务 | crontab -e 编辑定时任务 |
crontab 格式(记住就行,AI 帮你写)
* * * * * command
│ │ │ │ │
│ │ │ │ └── 星期 (0-7, 0=周日)
│ │ │ └──── 月份 (1-12)
│ │ └────── 日期 (1-31)
│ └──────── 小时 (0-23)
└────────── 分钟 (0-59)
示例:
0 3 * * * /backup.sh # 每天凌晨 3 点备份
*/5 * * * * /check.sh # 每 5 分钟检查一次9. Shell 编程基础(变量 / 运算 / 条件)
李永乐式比喻:Shell 脚本就像写一个做菜步骤清单——
- 变量 = 便利贴(写上"盐=10克",用的时候直接拿)
- 运算 = 计算器(3 + 5 = 8)
- 条件判断 = 如果锅热了就放油,如果没热就继续等
Hello World
bash
#!/bin/bash
# 第一行 #!/bin/bash 告诉系统用哪个解释器执行
echo "Hello World"变量
bash
#!/bin/bash
# 定义变量(等号两边不能有空格!)
name="Alice"
age=25
# 使用变量(加 $ 符号)
echo "My name is $name"
echo "I am ${age} years old"
# 特殊变量
echo "脚本名: $0"
echo "第一个参数: $1"
echo "第二个参数: $2"
echo "参数个数: $#"
echo "所有参数: $@"
echo "上条命令的退出码: $?"算术运算
bash
#!/bin/bash
# 方式一:$(( ))
a=10
b=3
sum=$((a + b))
echo "10 + 3 = $sum" # 13
echo "10 - 3 = $((a - b))"
echo "10 * 3 = $((a * b))"
echo "10 / 3 = $((a / b))" # 整数除法 = 3
echo "10 % 3 = $((a % b))" # 取余 = 1
# 方式二:expr
sum=$(expr $a + $b)条件判断
bash
#!/bin/bash
# test 命令或 [ ],注意空格!
# 数值比较
if [ $age -ge 18 ]; then
echo "成年人"
fi
# 常用比较运算符
# -eq 等于, -ne 不等于, -gt 大于, -ge 大于等于
# -lt 小于, -le 小于等于
# 文件判断
if [ -f "/etc/passwd" ]; then
echo "文件存在"
fi
# -f 文件存在, -d 目录存在, -e 存在(不限类型)
# 字符串判断
if [ "$name" == "Alice" ]; then
echo "Hello Alice"
fi10. Shell 流程控制
李永乐式比喻:
if= 如果是晴天就去爬山,如果是雨天就待在家case= 自助餐厅的选择:1号套餐、2号套餐、3号套餐for= 挨个点名:张三、李四、王五……while= 没吃饱就一直吃,吃饱了就停
if 分支
bash
#!/bin/bash
score=$1
if [ $score -ge 90 ]; then
echo "优秀"
elif [ $score -ge 60 ]; then
echo "及格"
else
echo "不及格"
ficase 分支
bash
#!/bin/bash
case $1 in
start)
echo "启动服务"
;;
stop)
echo "停止服务"
;;
restart)
echo "重启服务"
;;
*)
echo "用法: $0 {start|stop|restart}"
;;
esacfor 循环
bash
#!/bin/bash
# 遍历列表
for fruit in apple banana orange; do
echo "水果: $fruit"
done
# 遍历数字序列
for i in {1..5}; do
echo "第 $i 次循环"
done
# C 风格 for
for ((i=0; i<5; i++)); do
echo "i = $i"
donewhile 循环
bash
#!/bin/bash
count=1
while [ $count -le 5 ]; do
echo "计数: $count"
count=$((count + 1))
done11. Shell 函数 & 文本处理
函数
bash
#!/bin/bash
# 定义函数
greet() {
local name=$1 # local = 局部变量
echo "Hello, $name!"
}
# 调用
greet "Alice"
# 带返回值的函数
add() {
return $(( $1 + $2 ))
}
add 3 5
echo "3 + 5 = $?" # $? 获取上条命令的返回值cut — 按列裁剪文本
bash
# /etc/passwd 的文件格式:用户名:密码:UID:GID:描述:家目录:Shell
# 用 cut 提取第 1 列和第 7 列(-d 指定分隔符,-f 指定列)
cut -d: -f1,7 /etc/passwd
# 输出:
# root:/bin/bash
# alice:/bin/bashawk — 强大的文本处理工具(⚠️ 相对复杂)
李永乐式比喻:awk 就像一个自动化的 Excel 处理流水线—— 你告诉它"每一行按照什么规则处理",它自动逐行执行
bash
# 基础用法:awk '{print $1}' = 打印每行的第 1 列
# awk 默认以空格/制表符分隔
# 打印第 1 列和第 3 列
ls -l | awk '{print $1, $3}'
# 带条件的 awk:只打印文件大小 > 1000 的行
ls -l | awk '$5 > 1000 {print $9, $5}'
# 统计文件总大小
ls -l | awk '{sum += $5} END {print "总大小:", sum}'AI 协作指南
AI 能做的:
- 写任何 Shell 脚本(备份、定时任务、日志分析)
- 解释 Linux 命令的每个参数含义
- 分析权限配置是否正确
- 把 Windows 命令行操作翻译成 Linux 命令
人类需决策的:
- 用什么工具组合去解决实际问题
- 实际环境中的路径、权限、依赖问题排查
- 选择 WSL2 还是虚拟机还是云服务器
最高效的学习方式:
- 不背命令,遇到需求直接问 AI "用 Linux 命令怎么实现 X"
- 让 AI 解释你遇到的错误信息
- 让 AI 帮你写 Shell 脚本,你检查逻辑是否正确
- 把 AI 当成"即时 Linux 命令手册"附录:原始资料处理说明
| 原始文件 | 处理方式 |
|---|---|
尚硅谷大模型技术之Linux(Ubuntu)1.0.docx | 内容已整合到本文档各章节 |
尚硅谷大模型技术之Shell1.0.docx | 内容已整合到本文档第 8~11 章 |
| VMware + Ubuntu ISO + Xshell/Xftp 安装包 | 不推荐安装,详见第 1 章 WSL2 替代方案 |
| 视频(39 个) | 跳过 |
| 代码目录(空) | 无可用代码 |