[Linux] Shell 命令及运行原理
在 Linux中学到 Shell 应该是每个学习进阶系统系统人都必须要系统了解的基础课题。作为操作系统进行操控的主要接口,知道 Shell 为什么能运行命令,以及其内部原理,对于报错调试和系统深入了解尤为重要。
本文将通过主要两个部分介绍 Shell 的基础知识和命令执行的原理流程。
1. 什么是 Shell?
Shell 是 Linux 和 Unix 系统中的 命令行解释器,调用用户输入的命令来与操作系统核心进行交互。
- 进入 Shell 就像进入一个为您开放的环境,你可以在这里输入指令。
- Shell 能夠识别命令,解释为可执行的代码,然后通过系统调用为你进行实现。
常见的 Shell 系统
- Bash – 最常用的 Shell,默认的 Linux Shell;
- Zsh – 增强了 Bash 功能,配置性很强。
- Fish – 一个主要在美观和友好性方面做了优化的 Shell;
- Sh – Unix 原生的一种 Shell。
2. Shell 命令的运行原理
在 Shell 中输入命令后,一个命令会经历一系列流程来执行:
流程图
用户输入命令
↓
Shell 解析命令(变量替换、通配符展开等)
↓
查找命令(内置、外部或自定义脚本)
↓
添加命令到子进程中,fork 和 exec
↓
运行命令,返回结果,显示于终端
对于 外部命令,运行过程更加详细:
- Shell 程序通过 fork 调用创建一个新的子进程;
- 子进程通过 exec 调用加载命令对应的执行文件;
- Shell 等待子进程运行完成,返回选择状态和输出结果。
3. Shell 命令分解步骤
以输入一条命令为例:
ls -l /home/user
分解步骤:
- 解析
- Shell 分解命令,被分成 ls(命令名),
-l
(选项),以及/home/user
(参数)。
- Shell 分解命令,被分成 ls(命令名),
- 变量替换
- 如果有变量,进行替换。
- 查找命令
- Shell 通过
PATH
环境变量查找ls
命令在文件系统中的位置。
- Shell 通过
- fork
- Shell 通过
fork()
创建子进程。
- Shell 通过
- exec
- 子进程通过
exec()
加载/bin/ls
实现进程执行。
- 子进程通过
- 返回结果
- 命令执行结果显示在终端上。
4. 总结
Shell 在操作系统中起着课程解释和命令执行的重要作用,其原理根据以下步骤运行:
- 输入解析
- 查找命令
- fork 和 exec 执行命令
- 结果显示
深入了解这个流程,可以在命令行上可以更好地调试和解决问题。