第 2 章 · 终端、Shell 与文件系统
本章目标:熟练使用 bash 导航与文件操作;理解 FHS 标准目录;掌握绝对/相对路径、通配符、Tab 补全、历史命令与 man;在 dev-workspace 搭建与 shop-demo 一致的目录骨架。
学时建议:4~5 小时(含 2.5 小时跟练)
前置:完成 linux-shell ch01;可登录 Linux 终端。
2.1 场景说明:在服务器上找配置文件
运维在 xiaozi-cloud 节点上排查 api-go-demo 无法启动:需快速定位 unit 文件、环境变量、日志目录。本章建立 「去哪找文件」 的肌肉记忆。
/ (根)
├── etc/ 配置(nginx、systemd)
├── var/ 可变数据(log、lib)
├── home/ 用户家目录 → ~/dev-workspace
├── usr/ 用户态程序
├── tmp/ 临时(重启可能清空)
└── opt/ 可选大型软件
2.2 Shell 与终端 emulator
| 概念 | 说明 |
|---|---|
| Terminal | 字符界面窗口(Windows Terminal、GNOME Terminal) |
| Shell | 命令解释器,默认 bash |
| Prompt | user@host:~/dev-workspace$ |
$ vs # | 普通用户 vs root |
echo $SHELL
bash --version
type cd
type ls
2.3 导航:pwd、cd、ls
pwd # 打印当前目录
cd ~/dev-workspace
cd .. # 上一级
cd - # 上一次目录
ls -la # 含隐藏文件与权限
ls -lh # 人类可读大小
ls -lt # 按时间排序
| 路径类型 | 示例 |
|---|---|
| 绝对路径 | /home/alice/dev-workspace/shop-demo |
| 相对路径 | shop-demo/cmd/api |
| 家目录 | ~/dev-workspace |
| 当前目录 | ./logs |
| 父目录 | ../linux-notes |
2.4 FHS 与 Linux 部署路径对照
| FHS 目录 | 典型内容 | 本课对照 |
|---|---|---|
/etc/nginx/ | 反代配置 | linux-shell ch14 |
/etc/systemd/system/ | unit 文件 | api-go-demo 服务 |
/var/log/ | syslog、应用日志 | ch10 |
/home/<user>/dev-workspace | 源码 | git-collab |
ls /etc | head
ls -ld /var/log /tmp /home
2.5 创建与复制:mkdir、touch、cp、mv、rm
在 shop-demo 骨架中练习(与 gin-web 布局类似):
cd ~/dev-workspace
mkdir -p shop-demo/{cmd/api,internal/handler,configs,scripts}
touch shop-demo/cmd/api/main.go
touch shop-demo/configs/app.env.example
cp shop-demo/configs/app.env.example shop-demo/configs/app.env.local
mv shop-demo/configs/app.env.local shop-demo/configs/.env.local
安全删除:
rm -i shop-demo/scripts/unused.sh # 交互确认
rm -rf shop-demo/tmp/ # 慎用 -rf
生产禁止rm -rf /;教学目录外先pwd确认。
2.6 查看文件:cat、less、head、tail
echo 'package main' > shop-demo/cmd/api/main.go
cat shop-demo/cmd/api/main.go
head -n 5 /etc/passwd
tail -n 20 ~/dev-workspace/logs/linux-ch01.log 2>/dev/null || true
less /etc/services # 按 q 退出
模拟 api-go-demo 日志:
mkdir -p ~/dev-workspace/logs
for i in $(seq 1 50); do echo "$(date -Iseconds) INFO request_id=$i slug=usb-c-cable"; done >> ~/dev-workspace/logs/api.log
tail -f ~/dev-workspace/logs/api.log # Ctrl+C 退出
grep slug ~/dev-workspace/logs/api.log | head
2.7 通配符与路径展开
cd ~/dev-workspace/shop-demo
touch internal/handler/product.go internal/handler/order.go
ls internal/handler/*.go
ls internal/handler/[po]*.go
echo internal/handler/{product,order}.go
| 通配符 | 含义 |
|---|---|
* | 任意长度 |
? | 单字符 |
[abc] | 字符集 |
{a,b} | brace 展开 |