文章目录
- 前言
- 一、操作系统(OS)和操作系统内核(Kernel)
- 1.操作系统架构
- 2.内核在操作系统中的具体位置
- 二、了解Shell
- 是什么?
- 的类型
- 的功能?
- 的工作原理?
- 示例
- 三、Linux命令的执行的过程(原理)
- 总结
前言
首先,先向Linux创始人 Linus Torvalds 以及Linux的整个开源社区致敬,没有Linus的Linux内核,没有开源社区对Linux系统做出的贡献,就没有操作系统生态的多样性,就没有现在的CentOS、Ubantu。
Linux作为一款优秀的开源操作系统,自诞生以来就以其稳定性、安全性和高度的可定制性赢得了全球开发者和用户的青睐。开源与*作为Linux的核心理念之一直深受用户们赞扬,现在Linux不仅是一款操作系统,更是一个开放、协作、创新的象征。
今天和大家分享操作系统(OS)、操作系统内核(Kernel)和Shell的概念原理以及他们之间是如何相互配合完成任务的。
一、操作系统(OS)和操作系统内核(Kernel)
1.操作系统架构
典型的操作系统架构可以分为几个层次:
用户层(User Space)
内核层(Kernel Space)
硬件层(Hardware)
以下是对这几个层次的具体描述
-
用户层(User Space)
*用户层包括所有运行在操作系统上的应用程序和用户进程。用户层程序通过系统调用接口与内核进行交互,借助内核提供的服务来完成各种任务。
应用程序:用户运行的各种软件,如浏览器、文本编辑器、游戏等。 用户库:提供给应用程序使用的标准库和第三方库,如 C标准库(glibc)、图形库等。*
-
内核层(Kernel Space)
内核层是操作系统的核心部分,运行在特权模式下,拥有对系统硬件和资源的完全控制权。内核负责管理和协调系统的各个部分,确保系统的稳定性、安全性和高效运行。
进程管理:负责创建、调度、终止进程和线程,提供进程间通信(IPC)机制。
内存管理:管理系统内存,包括内存分配、虚拟内存、内存保护等。
文件系统:管理文件和目录的创建、删除、读写操作,提供文件系统接口。
设备驱动:提供对硬件设备(如硬盘、网络卡、显示器等)的访问和控制。
网络管理:管理网络连接、数据传输和协议栈。
安全管理:提供用户认证、权限控制、审计日志等安全功能。 -
硬件层(Hardware)
硬件层包括计算机的物理设备和组件,如 CPU、内存、硬盘、输入输出设备等。内核直接与硬件交互,通过设备驱动程序和硬件接口控制和管理硬件资源。
2.内核在操作系统中的具体位置
+----------------------+
| 应用程序 |
+----------------------+
| 用户库 |
+----------------------+
| 系统调用接口 |
+----------------------+
| 内核层 |
| +-----------------+ |
| | 进程管理 | |
| | 内存管理 | |
| | 文件系统 | |
| | 设备驱动 | |
| | 网络管理 | |
| | 安全管理 | |
| +-----------------+ |
+----------------------+
| 硬件层 |
+----------------------+
二、了解Shell
是什么?
Shell 是操作系统中的一种程序,它为用户提供了一种与操作系统内核和计算机硬件进行交互的界面。用户可以通过 Shell 输入命令来执行各种任务,如文件管理、程序执行和系统配置等。
的类型
Shell 可以分为两大类:
-
命令行界面 (CLI) Shell:提供文本界面,用户通过输入命令与操作系统交互
常见的 CLI Shell 包括:
Bash (Bourne AgainShell):最常用的 Shell,功能强大,兼容性好。(这也是CentOS默认的Shell)
Zsh (Z Shell):功能丰富,支持高级自动补全和插件系统。
Fish(Friendly Interactive Shell):注重用户友好性,提供智能建议和语法高亮。
Csh (C Shell) 和Tcsh:基于 C 语言风格的 Shell,Tcsh 是 Csh 的增强版本。
Ksh (Korn Shell):功能强大的Shell,支持编程和脚本功能。 -
图形用户界面 (GUI) Shell:提供图形界面,用户通过图形控件(如按钮、窗口)与操作系统交互
在 Linux 系统中,图形界面通常由桌面环境(如 GNOME、KDE Plasma)提供 。
的功能?
命令解释:Shell 解析用户输入的命令并传递给操作系统内核执行。
脚本编写:Shell 支持编写脚本文件(通常以 .sh 为扩展名),实现自动化任务。
变量管理:Shell 支持定义和管理变量,用于存储数据和配置信息。
文件操作:提供各种命令(如 ls、cp、mv、rm)用于文件和目录的管理。
进程管理:提供命令(如 ps、top、kill)用于查看和管理系统进程。
环境配置:允许用户配置和定制环境变量、别名和功能。
的工作原理?
读取命令:Shell 从用户输入或脚本文件中读取命令。
解析命令:Shell 解析命令行,将命令和参数拆分为可执行单元。
查找命令:Shell 查找命令的路径,确定是内建命令、外部命令还是脚本。
执行命令:Shell 调用操作系统内核执行命令,传递参数和环境变量。
返回结果:Shell 显示命令执行的结果或输出,并返回提示符等待下一条命令。
示例
#列出当前目录中的文件
ls
#显示当前路径
pwd
#创建新目录
mkdir new_directory
#复制文件
cp source_file destination_file
#移动文件
mv old_location new_location
#删除文件
cat file_to_display
#显示文件内容
cat file_to_display
这些都是Shell,也就是我们常说的“命令”
三、Linux命令的执行的过程(原理)
1. 用户输入
用户在Shell中输入命令
2. Shell解析
Shell将用户输入解析为命令名和参数
例如,对于命令ls -l:
命令名:ls
参数:-l
3. 查找命令
Shell在PATH环境变量指定的目录中查找名为ls的可执行文件。如果找到了这个文件,Shell就知道需要调用这个软件
4. 系统调用
当Shell找到命令的可执行文件后,会通过系统调用fork()和exec()来创建一个新的进程,并在这个新进程中执行可执行文件
fork(): Shell创建一个子进程。子进程是父进程(Shell)的副本。
exec(): 子进程使用exec()系统调用将自身的程序替换为命令的可执行文件。这一步实际上就是“调用”了对应的软件注意:在 Unix 和 Linux 系统中,通过 fork() 和 exec() 这两个系统调用来执行命令,而不是直接在原进程中执行是为了实现进程隔离
1.通过创建子进程,可以确保即使执行的命令或程序崩溃或出现错误,Shell 自身不会受到影响。Shell 可以继续运行,并接受后续命令。
2.子进程与父进程(Shell)在内存空间和资源上是隔离的,这意味着子进程的操作不会直接影响父进程的状态和数据。
3.子进程拥有自己的独立资源,包括文件描述符、内存空间等。这意味着每个命令的执行环境是独立的,不会因为资源冲突而出现问题。
5. 执行命令
新的进程开始执行该可执行文件中的代码,即运行相应的软件。在我们的例子中,ls命令的可执行文件会被加载到内存中并执行,完成列出目录内容的功能
6. 返回结果
命令执行完成后,进程通过exit()系统调用返回退出状态,Shell接收到这个状态后可以继续执行其它命令或显示提示符等待用户输入
流程大致如下:
+-----------------+ 用户输入 +----------------+
| User Input: | ------------> | Shell |
| "ls -l" | | |
+-----------------+ +----------------+
|
|
v
+-----------------------+
| Parse Command |
| Command: "ls" | Shell解析
| Arguments: "-l" |
+-----------------------+
|
|
v
+-----------------------+
| Search Executable |
| in $PATH | 查找命令
+-----------------------+
|
|
v
+-----------------------+
| fork() | Shell创建一个子进程
+-----------------------+
|
|
v
+-----------------------+
| exec() |
| Execute "ls" Program | 子进程将自身的程序替换为命令的可执行文件
+-----------------------+
|
|
v
+-----------------------+
| Command Execution |
| "ls" Program Runs | 执行命令
+-----------------------+
|
|
v
+-----------------------+
| Return Exit Status |
| to Shell | 返回结果
+-----------------------+
总结
内核和 Shell 在操作系统中分别扮演着核心管理和用户接口的角色。内核负责底层资源管理和系统服务,而 Shell 提供了用户与内核交互的途径。Shell 通过解释用户命令、管理进程和作业、编写脚本、配置环境等功能,极大地提高了用户的工作效率和系统的可用性。内核和 Shell 的协同工作,使得操作系统能够有效地运行并满足用户需求。