Shell 简介
- 图形界面和命令行的目的一样,都是让用户控制计算机。
- 真正控制计算机硬件(CPU、内存、显示器等)的只有操作系统内核(Kernel)。
- 图形界面和命令行只是架设在用户和内核之间的一座桥梁。
- Shell 是一个应用程序,连接用户和 Linux 内核,让用户能够高效、安全、低成本地使用 Linux 内核。
- Shell 不是内核的一部分,它是在内核的基础上编写的一个应用程序,和其它软件没有什么区别。
- Shell 有它的特殊性: 开机立马启动,不启动 Shell,用户没法使用 Linux。
- Shell 熟练度反映Linux掌握程度,运维工程师、网络管理员、程序员都应该学习 Shell。
- Shell 是解释型语言或者脚本语言(Script)。
- 编译型语言速度快、硬件要求低、保密性好,适合开发操作系统、大型应用程序、数据库等。脚本语言则灵活、部署容易、跨平台性好,非常适合 Web 开发以及小工具的制作。
- Shell 脚本很适合处理纯文本类型的数据,而 Linux 中几乎所有的配置文件、日志文件(如 NFS、Rsync、Httpd、Nginx、MySQL 等),以及绝大多数的启动文件都是纯文本类型的文件。
- Shell 脚本是实现自动管理以及自动化运维必备工具。Linux管理或运维,熟练编写Shell 脚本,提升运维工作效率,减少重复劳动
Shell 是如何连接用户和内核的
-
Shell 接收用户输入的命令,并进行处理,后再将结果反馈给用户,比如输出到显示器、写入到文件等,
-
Shell 程序本身的功能是很弱的,比如文件操作、输入输出、进程管理等都得依赖内核。
-
运行命令,大部分情况下 Shell 都会去调用内核暴露出来的接口,这就是在使用内核,
-
调用过程被 Shell 隐藏了起来,它只是在背后默默进行,我们看不到而已。
-
接口其实就是一个一个的函数,使用内核就是调用这些函数,除了函数,你没有别的途径使用内核。
举例说明Shell运行过程
我们都知道在 Shell 中输入cat log.txt命令就可以查看 log.txt 文件中的内容,然而,log.txt 放在磁盘的哪个位置?分成了几个数据块?在哪里开始?在哪里终止?如何操作探头读取它?这些底层细节 Shell 统统不知道的,
- 它只能去调用内核提供的 open() 和 read() 函数,告诉内核我要读取 log.txt 文件,请帮助我,
- 然后内核按照 Shell 的命令去读取文件,并将读取到的文件内容交给 Shell,
- 最后再由 Shell 呈现给用户(其实呈现到显示器上还得依赖内核)。
- 整个过程中 Shell 就是一个中介者,它在用户和内核之间"倒卖"数据,只是用户不可见。