Shell 是什么
Bash/Zsh/Fish、CLI vs GUI。
Shell 是什么
这一课你将能做到
- 说清楚 Shell、终端、Bash 三者的关系,以及它们和图形界面操作的区别
- 写出第一个带 shebang 的 Shell 脚本,赋权执行并看到输出
- 说出运维一台 Java 服务器时,Shell 能帮你干哪些「图形界面干不了」的活
为什么要学
你写的 Spring Boot 项目最终要跑在 Linux 服务器上。部署要执行命令、看日志要翻文件、查问题要看进程和端口——这些活全靠 Shell 完成。面试官问「线上服务挂了你怎么办」,你的排查路径(看进程、看日志、看端口、看磁盘)每一步都是 Shell 命令。
人话:图形界面像自动挡汽车,好用但进了机房没屏幕没鼠标你就抓瞎;Shell 是手动挡,直接和系统对话,服务器只给你一个黑窗口时,它是唯一的驾驶方式。掌握了它,你才能对服务器「指哪打哪」。
先建立图像
一次命令执行的三层结构:
你输入:grep "ERROR" app.log | wc -l
│
▼
┌─────────────── 终端(Terminal)───────────────┐
│ 负责画界面:显示黑窗口、接收键盘输入 │
│ ┌──────────── Shell(Bash)────────────┐ │
│ │ 负责翻译:读懂你的命令,调用对应程序 │ │
│ │ ┌──────── 系统内核(Kernel)──────┐ │ │
│ │ │ 真正干活:读写磁盘、分配内存 │ │ │
│ │ └─────────────────────────────────┘ │ │
│ └───────────────────────────────────────┘ │
└───────────────────────────────────────────────┘
常见 Shell 一览:
| 名称 | 特点 | 场景 |
|---|---|---|
| bash | Linux 默认,资料最多 | 学习和运维首选 |
| zsh | macOS 默认,插件生态强 | 本地开发很舒服 |
| sh | 最老的 POSIX Shell | 老脚本兼容用 |
| fish | 开箱即用,语法不兼容 bash | 不建议当学习对象 |
你学的语法以 bash 为准,在 99% 的 Linux 服务器上直接可用。
跟着做
Windows 用户先装环境:推荐 WSL2(微软商店搜 Ubuntu),或轻量的 Git Bash。下面的命令在 Ubuntu 服务器 / WSL / Git Bash 里都能跑。
步骤 1:确认你用的是哪个 Shell
echo $SHELL # 默认登录 Shell,通常输出 /bin/bash
echo $0 # 当前正在运行的 Shell
echo 是最基础的输出命令,相当于 Java 的 System.out.println。
步骤 2:把终端当计算器和打印器
echo "hello, $(hostname)" # 命令替换:先执行 hostname 再拼进字符串
date # 当前时间,日志排查时经常用它对时间线
whoami # 当前用户,确认自己是不是 root
步骤 3:写下第一个脚本
mkdir -p ~/shell-lab && cd ~/shell-lab
vim hello.sh
vim 里按 i 进入插入模式,输入以下内容,然后按 Esc、输入 :wq 回车保存退出:
#!/bin/bash
# 我的第一行 Shell 代码
echo "当前用户:$(whoami)"
echo "当前目录:$(pwd)"
echo "参数个数:$#"