Linux 内核、Shell 简述

2,713 阅读5分钟

前言

  作为一名刚刚开始工作的小白,实习一段时间过后发现Linux 真的很重要。能够熟练使用Linux 不仅可以提高自己的工作效率,还很炫酷。所以决定系统的学习一下Linux。。。

一、Shell:Linux 的外衣

  用过Linux 系统的朋友应该或多或少都听说过shell,但我们不一定对shell 建立过清楚的认知。

1.1 Shell 的定义

  Shell 是一种应用程序,一种具备特殊功能的程序:它提供了用户与内核进行交互操作的一种接口。应用程序大家应该都不陌生,它是一堆在硬盘中的二进制文件,执行应用就相当于执行二进制文件中的代码。什么是内核?后面再讲。交互操作指的就是我们在Linux 中输的那些命令来让Linux 做事,比如:

输入ls , 代表展示当前目录下的文件/目录
# user @ user-computer in ~ [11:31:09]
$ ls
Desktop    Downloads  Movies     OpenSource Public     project
Documents  Library    Music      Pictures   maven      sh

  从定义中我们可以理解到Shell 就是一种让你可以和Linux 操作系统对话的一种应用程序。在用户登入Linux 系统后,它就会调入系统内存中执行,它可以把用户输入的命令转化为计算机可以理解的机械码给内核执行

网图:权侵删

1.2 简单了解一下Shell

  通过我前面的描述,我们应该知道Shell 是个什么东西了。但就像聊天工具有很多一样,Linux 中的Shell 应用也不止一种,通过命令cat /etc/shells 来查看当前Linux 中的Shell:

$ cat /etc/shells
# List of acceptable shells for chpass(1).
# Ftpd will not allow users to connect who are not using
# one of these shells.

/bin/bash 
/bin/csh
/bin/ksh
/bin/sh
/bin/tcsh
/bin/zsh

 bash脚本功能非常强大,尤其是在处理自动循环或大的任务方面可节省大量的时间。bash是许多Linux平台的内定Shell。本人采用的zsh ,因为它集合了很多比较好用的插件,类似git 的简易命令、代码自动补全什么的,比较适合我这种记不住命令的弱鸡~。切换Linux 默认Shell 的命令:chsh -s /bin/Shell的名字。

Shell 是一种脚本语言,采用解释执行,自然它的优势就比较"解释"类型:

  • 语法和结构通常比较简单
  • 学习和使用比较简单
  • 不用编译
  • 程序开发产能优于性能
  • ...

  至于Shell 操作、原理的深入浅出这里就不说了(其实我不会~)。前面我们只说了怎么和Linux 沟通,但我们并不了解Linux 到底怎么理解和处理这些命令的。下面我会通过QQ 的启动到发送消息来讲解我对Linux 内核的理解。以下内容,学习总结至极客时间-《趣谈Linux 操作系统》,一个很好的专栏,推荐购买学习!

二、内核:Linux 的心脏

  就像人与心脏的关系一样,Linux 内核并不是操作系统,它是一个完整系统的组成部分。Linux 内核控制着Linux 操作系统的基本硬件,具有很多功能,如文件管理、内存、多线程、网络 等等。

  下面我们就从打开QQ 这个例子来讲一讲Linux 内核中的一些操作关系。

1⃣️设备子系统

设备子系统,主要是管理系统设备的系统。像鼠标、键盘是输入设备,显卡、显示器是输出设备。鼠标移动,就会根据鼠标灵敏度在显示器上移动对应的距离。键盘输入字符'a' ,就会在焦点目标中显示字符'a'。

  我们可以用现有的设备,移动寻找QQ 这个应用,点击运行。

2⃣️文件子系统

  在运行之前,我们肯定会去腾讯官网下载QQ 。下载的时候它会提醒你下载到那个目录,安装的时候也会提醒安装路径。安装成功后,应用文件就会存放在硬盘上。但是硬盘的存储大小都是固定,肯定不能因为我今天装了个QQ 存储不够就把我昨天刚刚写好的代码覆盖掉了吧。。。所以需要用文件系统来管理文件的储存

3⃣️进程管理系统

  QQ 装好后,我们来打开它。前面说过:应用程序以二进制的形式保存在硬盘上。当操作系统拿到 QQ 的二进制执行文件的时候,就可以运行这个文件了。QQ 的二进制文件是静态的,称为程序(Program),而运行起来的 QQ,是不断进行的,称为进程(Process)。

  进程是不能随便操作的,需要Linux 调度。任何一个程序要想运行起来,就需要调用系统调用,创建进程。进程的执行也需要分配 CPU 进行执行,也就是按照程序里面的二进制代码执行, 所以我们需要一个进程管理系统(Process Management Subsystem)来管理进程。有时候应用开多了,感觉卡顿,可能就是因为CPU 来不及执行进程代码的缘故。

4⃣️内存管理子系统

  进程在执行的过程中会产生一些数据,就像你聊天会产生聊天记录一样。这些数据有可能是机密的,你不想让别人看到或者不想被别的修改。比如你在博客上写了1W 字的文章,切换看了下QQ,之前的就都不见,换谁也受不了吧~,所以操作系统中,不同的进程有不同的内存空间,但是整个电脑内存就这么点儿,所以需要统一的管理和分配,这就需要内存管理子系统(Memory Management Subsystem)

5⃣️网络子系统

 你在QQ 上和别人聊天的时候,发送短信,需要发送网络请求。Linux 会通过️网络子系统来管理这些请求的发送和接收。

总结与参考

  前面大概讲了一下Linux 与Shell 的关系,Linux 内核的组件系统的大致作用。初学Linux ,有错误或者优化的地方谢谢各位看官指正🙏。文章参考了:

  • 《Linux Shell 编程 从初学到精通》
  • 极客时间-《趣谈Linux 系统》-第三章