什么是 Shell

用 Linux 的人每天都在跟 Shell 打交道,但很多人说不清它到底是什么。

Shell 的定义

简单说,Shell 是一个命令解释器。你敲的命令,它负责翻译给操作系统内核听;内核干完活,它再把结果告诉你。

打个比方,Shell 就像餐厅里的服务员。你是顾客,厨房是操作系统内核。你告诉服务员要什么菜,服务员把单子送到厨房,厨房做好后服务员再端给你。你不用进厨房,也不用知道厨房怎么运作。

Shell 的位置

Linux 系统的层次结构大概是这样的:

用户 → Shell → 内核 → 硬件

用户在最外层,硬件在最底层。Shell 夹在用户和内核中间,起着桥梁作用。这种设计有好处:

  • 用户不需要了解内核细节
  • 内核不需要关心用户是谁
  • Shell 可以有很多种,用户选自己喜欢的

Shell 能做什么

交互式使用

在终端里敲命令,实时看到结果。比如:

ls -la          # 列出文件
cd /home        # 切换目录
grep "error" log.txt   # 搜索内容

脚本编程

把多条命令写进文件,批量执行。比如每天凌晨备份数据库:

#!/bin/bash
DATE=$(date +%Y%m%d)
mysqldump -u root -p123456 mydb > /backup/mydb_$DATE.sql
find /backup -name "*.sql" -mtime +7 -delete

系统管理

Shell 是系统管理员的标配工具。用户管理、进程监控、日志分析、服务启停,都离不开 Shell。

Shell 不是终端

很多人把 Shell 和终端混为一谈,其实它们是两回事:

  • 终端(Terminal):是一个程序,提供输入输出的界面。比如 GNOME Terminal、iTerm2。
  • Shell:是命令解释器,负责执行命令。比如 Bash、Zsh。

终端是壳,Shell 是核。你可以在同一个终端里切换不同的 Shell,也可以用同一个 Shell 在不同终端里跑。

查看当前 Shell

想知道自己在用哪个 Shell:

echo $SHELL

输出可能是 /bin/bash/bin/zsh 之类的。

查看系统有哪些 Shell:

cat /etc/shells

切换 Shell:

chsh -s /bin/zsh

切换后重新登录生效。

小结

Shell 是用户和操作系统之间的桥梁。它既是命令解释器,也是编程语言。理解它的定位,后面学起来就清晰多了。