Skip to content

Linux

Target

在本系列,将叙述如下内容






什么是Linux

要明白这个问题,首先要观望计算机操作系统的发展历史,如果时间有限,可以直接跳转到什么是linux?


操作系统的发展
  1. 早期计算机的运算速度虽然较现代计算机慢,但仍远超人类的计算速度。由于计算机体积庞大,通常不会只为一个人提供计算服务,因此出现了批处理系统,即一组程序员排队将自己准备的一组打孔纸带投入计算机的情景。这样的批处理系统使得用户需要排队等待,效率受到一定影响。

  2. 随着技术的发展,人们逐渐意识到批处理系统的缺点,于是出现了分时操作系统,使多个用户能够通过终端与计算机进行交互,从而减少了用户等待时间,提高了效率。

  3. 然而,即便有了分时操作系统,仍然存在效率提升的空间。随着并发和并行计算以及多核处理器的发展,多任务操作系统应运而生。这种操作系统允许计算机在多个程序之间切换,从而能够同时执行多个任务,进一步提高了计算机的利用率。

  4. 在硬件方面,电子管、晶体管、三极管等元件的不断迭代使得计算机体积不断缩小,促进了个人计算机的普及。在1980年代,个人计算机开始逐渐普及,成为人们日常生活和工作中不可或缺的工具。


Uinx之渊源

Unix操作系统是由美国贝尔实验室于1969年完成的操作系统,由汇编语言编写,经历过一次C语言重写,兼容性很高,能够轻松地移植到各个计算机。但其是闭源、付费的操作系统,必须支付一定的费用购买才能使用。

1983年,Richard Stallman 极度厌恶Unix的闭源行为,于是创立GNU(GNU is Not Unix)计划, 旨在创建自由和开放的Unix类操作系统和开源的程序、代码、工具和库,并撰写了GPL(GNU General Public License)。

虽然GNU收集了大量的库、程序等操作系统所需,但仍在操作系统内核、驱动、守护进程等方面待填补


Linux产生

Minix 是由Andrew Tanenbaum开发的小型 UNIX 类操作系统,用于教育和学术研究。

1990年代,Linus Torvalds在赫尔辛基大学就读期间,对Minix仅适用于教育和学术使用感到不太满意,因此他开始尝试使用C语言编写一个类Unix的内核,即Linux内核,以供自己使用。为了在自己的内核上使用Minix的软件服务,Linus选择使用GNU的开源软件作为替代品。最终,Linus决定将Linux内核的限制商用的协议改为GPL(GNU General Public License)协议。

同时,许多GNU拥护者受到Linux内核吸引,他们不断为Linux内核进行开发迭代,并整合新的功能、驱动和工具,逐渐使Linux操作系统变得更加完整和丰富。Linux内核与GNU工具的结合创造出了完整的自由开源操作系统,被称为GNU/Linux。


什么是Linux?

Linux或许指的是Linux操作系统,但严格的说,Linux是指Linux内核,GNU/Linux才是一个完整的操作系统。

Linux内核从操作系统的角度来说,就是持续运行一个系统级应用程序,相比于用户级程序, Linux内核代表着系统的核心和基础,负责管理系统的资源和提供基本的系统服务。


Linux的发展

基于Linux的操作系统吸引了越来越多的开发者和用户,他们为其不断迭代和发展,促使如今出现了各种各样的Linux发行版本,例如RedHat系列、Debian系列等。这些发行版在不同的用户群体和使用场景中得到了广泛的应用和认可,为用户提供了多样化的选择。通过各种发行版的竞争和合作,Linux生态系统得到了不断丰富和壮大,为用户提供了更加灵活和定制化的操作系统体验。

今天的Linux👈



终端和命令行及命令
Terminal Shell
终端

终端机(Computer Terminal)

早期的计算机终端是硬件设备,用于与计算机系统进行交互。这些终端主要基于文本界面,被称为“哑终端”,因为它们只能显示文本字符并接受文本输入,效率相对较低。

随着技术的进步,智能终端出现,它们具备了更多的功能,能够定位光标和控制显示位置,使用户能够更灵活地与计算机进行交互,但仍然是基于文本的。

随着计算机图形化界面的兴起,智能终端无法满足复杂的图形和多媒体体验,于是图形终端出现。图形终端具备显示矢量图和位图的能力,但受到硬件性能的限制。

如今的虚拟终端一般在图形环境内运行,与特定硬件设备基本无关。它们使用显示器呈现图形和文本信息,使用键盘作为主要输入设备。虚拟终端通常在现代操作系统中运行,提供了强大的命令行界面,并且可以访问其他应用程序的图形用户界面。虚拟终端的灵活性和功能性使其成为计算机系统中不可或缺的一部分。


命令

Command

命令是用于执行控制操作系统、应用程序等资源的操作或动作的指令。

在不同的操作系统上,可能会有不同的命令集,例如,Windows 使用MS-DOS命令,而Mac OS则使用类似于Unix的命令集。

命令作为计算机操作的基本构建块,使用户能够控制和配置计算机系统的各个方面,执行任务和自动化操作。无论是在命令行界面还是在图形用户界面中,命令都扮演着重要的角色,用户可以通过输入命令来操作系统、管理文件、启动程序等。命令的灵活性和功能性使其成为计算机操作中不可或缺的一部分。


Shell解释器

shell interpreter

shell解释器,我们无需知道内核是如何工作的,只需要提交需要执行的命令,另外,其还能够执行一系列的命令(脚本),实现自动化操作。

Linux操作系统通常支持多个解释器,Bash、Zsh、Fish等,可自行选择下载喜好的解释器,它们的语法会有一定区别


命令行界面

Command-Line Interface (CLI)

命令行界面是用户与操作系统进行交互的一种方式,通过输入命令来执行操作。CLI可以在终端、文本控制台等环境中使用。

终端通常被用于打开CLI,它是一种用户与计算机交互的工具。而CLI则是一种交互方式,强调了用户通过命令来操作系统的特性。虚拟终端是一个软件工具,用于在图形环境中运行CLI,但虚拟终端与CLI是不同的概念,两者不能混为一谈。

用于和操作系统交互的CLI。充当用户和操作系统(Linux)内核之间的中间层,是内核的用户界面

它接受用户输入的命令,解释并协调内核执行操作。




什么是运行时

Runtime是指程序在运行时的环境和状态。

运行时环境的重要性
  1. 程序执行的上下文管理: 运行时环境是程序在执行过程中的上下文管理者。它负责在程序执行期间分配内存、管理变量的生命周期,以及调度函数的调用和返回。这种上下文管理确保了程序在运行过程中的正常执行。

  2. 资源的动态分配与释放: 运行时环境负责动态分配和释放程序所需的资源,如内存、文件句柄等。这种动态管理使得程序能够在运行时根据需要进行资源的调整和利用,提高了资源利用效率。

  3. 交互与系统调用的桥梁: 运行时环境充当了程序与操作系统之间的桥梁,通过调用系统API和处理系统调用,实现了程序与操作系统之间的交互。这种交互包括文件操作、网络通信、进程管理等,使得程序能够与外部环境进行有效的交互。


不同语言的Runtime
  • Java & Python

Java的运行时环境由Java虚拟机(JVM)和Java类库组成。JVM负责将Java字节码转换为机器码,并提供了内存管理、垃圾回收等功能。Java类库则提供了丰富的标准库和API,支持各种功能的实现。 Python的运行时环境由Python解释器和标准库组成。Python解释器负责解释和执行Python代码,实现了动态类型检查、自动内存管理等特性。标准库则提供了大量的模块和函数,支持了各种常用的功能和操作。

由于Java和Python都有独立的运行时环境,因此它们的程序可以在不同平台上运行,而不受操作系统的限制。这种跨平台性使得Java和Python成为了流行的跨平台开发语言。

  • C/C++

C/C++的运行时环境更多地依赖于底层操作系统提供的支持。虽然没有像Java或Python那样的独立运行时环境,但C/C++程序仍然需要考虑内存管理、系统调用等操作。此外,C/C++程序也可以使用一些运行时库(如C标准库、C++标准模板库等)来提供一些常用功能的支持。

虽然C/C++程序的运行时环境更依赖于底层操作系统,但仍然可以通过编写可移植的代码和使用跨平台的库来实现跨平台性。例如,使用标准的C/C++库和遵循平台无关的编程规范,可以使得C/C++程序在不同平台上编译和运行。