终端与shell的关系
终端
- 终端是用户与计算机系统进行输入输出的命令行界面
1.1 早期的终端是物理终端(如电传打字机),用来直接与计算机系统交互
1.2 现在终端是软件终端(也叫终端仿真器,因为真正的终端其实是物理终端),它通过接收键盘输入与计算机系统进行交互 - 它本质就是个应用程序,当我们打开终端时就是运行这个程序
shell
- shell是一个命令解释器,本质也是一个应用程序,它为用户提供一个命令行接口来与操作系统交互
- shell会从终端的接收输入,然后根据环境变量寻找程序执行,并把执行结果返回给终端。
- 用户通过shell来调用Linux内核;

终端与shell的关系:终端为Shell提供工作环境
- 当你运行一个终端时,操作系统会为该终端启动一个新的进程(因为终端就是一个应用程序,运行一个应用程序要用一个进程);终端进程随后会再开个子进程运行一个shell命令解释器。
- Shell进程在终端进程环境中运行
- 意味着Shell进程是终端进程的直接子进程,Shell继承着终端进程的环境变量、目录状态和权限设置等。这确保了用户在Shell中执行任何命令都是在终端提供的环境中运行的。
- 终端和shell的输入输出重定向:设置shell的标准输入(stdin)、标准输出(stdout)和标准错误(stderr)与终端本身关联
- 终端进程控制着与用户的直接交互(键盘输入和屏幕输出),而终端的输入(标准输入stdin)会重定向给shell进程的标准输入,也就是用户在终端中输入的命令会传递给shell。
- 也包括信号输入处理:例如当用户在终端输入通过特定组合键Ctrl+C时,终端会向shell发送一个中断信号(SIGINT),Shell则会终止当前正在执行的命令。
- Shell进程处理这些输入,执行相应的命令,然后把输出 重定向到终端显示(终端的标准输出和标准错误),供用户看
- 终端进程控制着与用户的直接交互(键盘输入和屏幕输出),而终端的输入(标准输入stdin)会重定向给shell进程的标准输入,也就是用户在终端中输入的命令会传递给shell。
总结:
所以终端并不等于shell,终端只是运行了shell应用程序,而shell会接收 用户输入到终端的指令 并执行相应的程序,最终返回结果 给终端进行显示。






