Linux基础知识——Linux是什么及发展史

news2024/11/6 0:31:17

文章目录

  • Linux是什么
  • Linux之前Unix发展史
    • Multics
    • Unics
    • Unix
    • UNIX分支--BSD
    • UNIX分支--System V
    • Minix
    • GUN计划
    • GPL
    • XFree86
    • Linux
  • 开源软件和闭源软件
    • 开源软件
    • 闭源软件/专利软件(copyright)
  • Linux的内核版本
  • Linux发行版

Linux是什么

Linux到底是操作系统还是应用程序呢?Linux其实就是一个操作系统!

Linux就是内核与系统调用接口那两层,应用程序并不算Linux

image-20240220185451847

操作系统(Operating System,缩写:OS)主要在管理与驱动硬件,因此必须要能够管理内存、管理设备、负责任务管理以及系统调用等。因此,只要能够让硬件准备妥当的情况下,就是一个普通的操作系统

Linux之前Unix发展史

早在Linux出现之前就有一个相当稳点而成熟的操作系统存在,那就是Linux的大哥UNIX

image-20240221193958508

Multics

1969年以前:一个伟大的梦想-Bell,MIT与 GE的“Multics”系统

在1969年以前的早期计算机时代,普通人很难接触计算机,除了一些军事、高科技或学术单位使用。因为那时的计算机操作系统不像现在这么方便,只能进行批处理型操作,需要把要输入的信息打在读卡纸上面打洞,然后将读卡纸插入读卡机并等待计算机运算完毕。而且这时的计算机主机很少,需要多人排队等待使用。所以,在那个时候想要使用计算机是件很麻烦的事情。

1960年代初期麻省理工学院(MIT)开发了兼容分时系统(CTSS)后,大型主机可以通过提供终端来连接多个用户,多个用户也可以通过终端同时连接到主机上使用计算机,让计算机资源得到更好地利用。

架构图如下:

image-20231117103335502

1964年由贝尔实验室(Bell)、麻省理工学院(MIT)和通用电器公司(GE)共同发起了Multics计划,目的是让大型计算机提供 300 个以上的终端用于联机使用。但是,到了1969年前后,计划进度比较慢,钱不够,所以贝尔实验室退出了计划的研究工作。虽然计划还在继续研究,但贝尔实验室退出了该计划的研究工作。

`注:最终Multics还是成功开发出了它们的系统,完整历史参考 https://www.multicians.org/ 网站内容。

Unics

1969 年: Ken Thompson 的小型 file server system

1969年,贝尔实验室退出了Multics计划,认为这个计划不可能成功。有些人从这个计划中得到了启发,其中包括Ken Thompson(肯·汤普逊)。

在贝尔实验室退出Multics后,习惯使用Multics的工程师们无法继续使用该系统。Ken Thompson为Multics写了一个名为“Space Travel(太空旅行)”的游戏。为了继续开发这个游戏,他开始重新编写一个操作系统。Ken在DEC推出的PDP-7上用汇编语言写了一组内核程序、内核工具程序和一个小文件系统,这就是Unix的雏形。Thompson简化了Multics庞大的系统,因此他的朋友戏称这个系统为Unics(Unics表示单一,与Multics相反)。Ken最初的目标是游戏开发,而不是操作系统,因此他接受了朋友们给系统起的这个名字。

Ken Thompson的这个文件系统有两个重要概念:

  • 所有程序或系统设备皆文件
  • 不管程序本身还是附属文件,所写的程序只有一个目的,且要有效的完成目标

Unix

1973年: UNIX 的正式诞生,Dennis Ritchie 等人用 C 语言写出第一个正式 UNIX 内核

因为 Thompson 写的 Unics 很实用,贝尔实验室内部流传甚广。但是由于当时计算机架构不同,每次安装到不同的机器都得重新编写汇编语言,非常不方便。

于是,Ken Thompson和Dennis Ritchie合作,想用高级程序语言重新编写 Unics,最初使用的是 B 语言,但是 B 语言编译后的内核性能并不理想。Ritchie将 B语言改写成C语言,并用C语言重新编写和编译了Unics内核。最终,这个内核版本被命名为 UNIX,并正式发布了。这个改变也使得UNIX很容易被移植到不同的机器上面。

UNIX分支–BSD

1977年由Bill Joy发布BSD(Berkeley Software Distribution)这些称为UNIX-like的操作系统

虽然贝尔实验室属于AT&T,但是AT&T此时对于Unix是采取较为开放的态度,Unix是以C语言写程的,具有可移植性。所以在1973年后,Unix与学术界合作开发。最重要的就是与加州伯克利大学的合作。

伯克利大学的Bill Joy(比尔·乔伊)取得了Unix的内核源代码后,修改成适合自己机器的版本,并且增加了很多工具软件编译器(如Vi编辑器,TCP/IP等),最终将他命名为(Berkeley Software Distribution,简称BSD)

UNIX分支–System V

System V架构与版权声明

由于Unix具有可移植性和强大性能,以及缺乏版权纠纷,许多公司开始开发自己的Unix操作系统,并与他们的硬件配套推出自家的主机。然而,在早期,由于缺乏标准化协议,每家计算机公司的硬件都不相同,因此为各自的硬件开发适配的Unix系统成为必要,早期的Unix主要与服务器或大型工作站相关联。

1979年,AT&T推出了System V第七版Unix,这一版本的重要之处在于它支持X86架构的个人计算机,使得System V可以在个人计算机上运行。 由于商业考量,AT&T决定收回Unix的版权。特别提到“不可对学生提供源代码”的严格限制。

Minix

1984年:x86架构的Minix操作系统诞生

在1984年,Unix系统的版权仍受AT&T公司严密控制,明确规定不允许提供给学生使用。荷兰一位大学教授Andrew Stuart “Andy” Tanenbaum(安德鲁·斯图尔特·塔能鲍姆)为了给学生上课,仿照Unix系统编写了一款名为Minix的操作系统。为避免版权问题,Andrew在编写过程中完全不参照Unix内核源代码。

1986年,他完成了Minix的内核程序,并发行了相关书籍。由于Minix最初只是用于课堂教学,没有大规模商业推广的打算,因此实际使用Minix操作系统的人数并不多。

GUN计划

GUN计划目标

1984年由Richard Mathew Stallman(理查德 马修斯 托曼)提倡GUN(名称来自GNU’s Not Unix!)计划,这个计划目的是:建立一个自由开放的UNIX操作系统。

软件开发策略

鉴于操作系统开发复杂,Stallman决定从开发可以在UNIX系统上运行的小程序开始,而不是直接构建整个操作系统。斯托曼参考现有UNIX软件,开发出功能相同的自由软件,避免看其他软件源代码以免侵权。

发展自由软件

GNU软件逐渐广为人知,人们开始了解并使用这些免费的GNU软件,提升了GNU计划的知名度。 为了提高GNU计划的曝光度,斯托曼开始开发C语言编译器,即著名的GNU C Compiler(gcc)。他希望通过编写一款优秀且高性能的C语言编译器来吸引更多的人关注GNU计划。此时,C语言的编译器大多数都是专有软件,如果gcc编译器能够表现出色,那么GNU计划就有更大的机会为大众所接受。 然而,开始编写gcc并不顺利。为了继续推动GNU计划,斯托曼转而将他之前已经开发好的Emacs编辑器写成可以在UNIX上运行的软件,并公开了源代码。Emacs是一款功能强大的程序编辑器,可以在程序编写过程中进行语法检查,从而减少程序员的调试时间。由于Emacs的优秀表现,很多人直接向斯托曼购买了该软件。

成立FSF

Stallman通过以磁带方式销售Emacs软件来赚取一些资金,然后全力以赴地编写其他软件,并于1985年成立了自由软件基金会(Free Software Foundation,FSF),邀请更多的工程师和志愿者参与自由软件的开发。最终,他成功完成了gcc编译器,这比Emacs编辑器还要有助于推动GNU计划的发展。此外,他还编写了更多可供调用的C函数库(GNU C Library)以及用于操作系统的基本接口的Bash shell。这些工作大致在1990年左右完成。

GPL

GUN的通用公共许可证

在1985年,为了避免GNU开发的自由软件被私有化,Richard Stallman与律师起草了著名的通用公共许可证(GPL),并称其为copyleft的概念。

下图来自百度百科

image-20240221151811718

GNU开发的重要软件,例如Emacs、GNU C Compiler(gcc)、GNU C Library(glibc)和Bash shell等,为许多软件开发者提供了基础工具,帮助壮大了自由软件团体。

然而,尽管这些软件为GNU计划做出了贡献,但在当时的环境下,仍缺少一个自由的UNIX内核,导致这些软件只能在专有的UNIX平台上运行。 事实上GNU开发的自主内核称为Hurd,是一个设计相当先进的内核。由于开发过程中对系统要求过于严格,导致推出时间一再延后。因此,直到Linux内核的出现才实现了GNU计划建立自由UNIX操作系统的目标。Linux内核的出现填补了GNU计划中缺少的自由UNIX内核这一空缺。

GPL是什么?为什么要将自由软件使用GPL这个版权声明?

斯托曼强调了GPL中的"Free"一词,并指出自由软件指的是具有自由权力而非免费的软件。

自由软件可以自由执行、复制、再发行、学习、修改和强化自由软件。通过使用GPL版权声明,软件成为自由软件,具备取得软件与源代码、复制、修改和再发行的特点。

使用自由软件时,你可以根据自己的需求自由使用、复制和修改,并可以将修改过的程序自由发行,并向社区回馈。然而,你不能修改授权一个GPL授权的自由软件,也不能单纯销售自由软件。销售自由软件需要提供售后服务和相关手册,这些需要工本费。很多Linux开发商销售的是售后服务,而非自由软件本身。自由软件工作者维生的主要方式是通过提供服务收费。所以,自由软件确实具有商业空间。

GPL对于自由软件的作者有何优点?

  • 软件安全性能较好
  • 软件运行性能较好
  • 软件除错时间较短
  • 贡献的源代码永远都存在

因为计软是提供源代码的自由软件,那么你的程序代码将会有很多人帮你检查,如此一你来,程序的漏洞与程序的优化将会进展的很快。

XFree86

1988年:XFree86诞生,即x86版UNIX上的GUI系统

1988年,为满足不断增长的图形用户界面(Graphical User Interface, GUI)需求,MIT与其他第三方合作发布了XWindow System,并于同年成立了非营利性质的XFree86组织。XFree86实际上是XWindow System、Free和x86的组合名称。XFree86的GUI接口在1994年发布的Linux内核1.0版本中整合到了Linux操作系统中。

Linux

1991年:Linux诞生,Linus Torvalds发布的运行在386机器上的内核程序

芬兰赫尔辛基大学的在校生Linus Torvalds便是其中一员,他在1991年10月使用bash解释器和gcc编译器等开源工具编写出了一个名为Linux的全新的系统内核,并且在技术论坛中低调地上传了该内核的0.02版本。该系统内核因其较高的代码质量目基于GNU GPL许可证的开放源代码特性,迅速得到了GNU源代码开放计划和一大批黑客程序员的支持,随后Linux正式进入如火如荼的发展阶段。

开源软件和闭源软件

开源软件

什么是开源?

开源软件指的是在软件发布时将源代码公开并与软件一同提供的软件。源代码是程序员编写但尚未被编译的代码。

从自由软件到开源软件

1998年成立的开放源代码促进会(Open Source Initiative)提出了“开放源代码”(open source)这一术语,以解决“自由软件”(free software)一词中存在的歧义。自由软件一词中的“free”既可以表示“自由”的意义,也可以表示“免费”的含义,容易引起误解。因此,开放源代码这一术语更加准确地传达了其核心概念。需要注意的是,并非所有可读取源代码的软件都可以被称为开源软件。该软件的授权必须要符合下面的基本需求,才可以算是开源软件。

  • 公布源代码并允许用户修改和编译程序代码
  • 可以再发布:允许任意分发和销售软件的副本,且程序代码可成为其他软件的组件之一作者不该宣称具有拥有权或收取其他额外费用。
  • 允许修改或衍生作品,并使用相似的授权再发布
  • 允许以不同的名称或编号发布
  • 不得限制个人或团体的使用权;
  • 不得限制特定领域的应用,例如商业行为或学术研究等
  • 不得限制程序代码在不同产品中的应用
  • 不得具有排他条款,例如限制软件不能用于教育类的研究等

常见的开放源代码授权有哪些?

  • GPL
  • BSD
  • MIT
  • Apache
  • LGPL

闭源软件/专利软件(copyright)

什么是闭源软件

闭源软件(也称为专有软件或专利软件)与开源软件不同,它不公开源代码,仅提供可执行的二进制程序。

闭源软件优缺点

闭源软件的优点包括有专人维护和支持,用户无需修改代码。然而,闭源软件的缺点是用户的灵活度受限,无法按照自己的需求修改程序样式。此外,如果存在恶意软件或安全漏洞,修复问题可能需要相当长的时间。

Linux的内核版本

Linux内核下载地址:https://www.kernel.org/

Linux内核版本编号类似如下样子

3.10.0-1160.108.1.el7.x86_64
主版本.次版本.发布版本-修改版本
  • “3”:这是Linux内核的主要版本号。
  • “10”:这是次要版本号,指示了内核功能的更新程度。
  • “0”:这是发布版本号,表明内核发布的修订数量。
  • “1160.108.1”:修改版本
  • “.el7”:表示适用于RHEL 7版本
  • “x86_64”:CPU结构,64位

Linux的内核版本的种类分为稳定版开发版,主要是以次版本数字的奇偶性来区分,偶数代表稳定版本,奇数代表开发版本。

Linux发行版

要区分Linux内核与Linux发行版的不同

  • Linux内核由Linus Torvalds及其他贡献者开发和维护,提供硬件抽象层、磁盘、文件系统控制及多任务功能的系统核心程序
  • Linux发行版是我们常说的Linux操作系统,也就是由Linux内核+软件+工具+可完全安装程序的东西,我们称之为Linux发行版或Linux发行套件系统

image-20240221174706581

常见的Linux发行版有:

  • Deepin(国产操作系统)

  • Red Hat

  • SUSE

  • Ubuntu

  • Fedora

  • Debian

官方网址

Deepin: https://www.deepin.org/

Red Hat: https://www.redhat.com/

SUSE: https://www.suse.com/

Fedora: https://getfedora.org/

CentOS: https://www.centos.org

Debian: http://www.debian.org/

Ubuntu: http://www.ubuntu.com/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1463463.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2024最佳住宅代理IP服务商

跨境出海已成为了近几年的最热趋势,大批量的企业开始开拓海外市场,而海外电商领域则是最受欢迎的切入口。新兴的tiktok、Temu,老牌的Amazon、Ebay,热门的Etsy、Mecari等等都是蓝海一片。跨境入门并不难,前期的准备中不…

论文精读--Noisy Student

一个 EfficientNet 模型首先作为教师模型在标记图像上进行训练,为 300M 未标记图像生成伪标签。然后将相同或更大的 EfficientNet 作为学生模型并结合标记图像和伪标签图像进行训练。学生网络训练完成后变为教师再次训练下一个学生网络,并迭代重复此过程…

图形系统开发实战课程:进阶篇(上)——6.图形交互操作:拾取

图形开发学院|GraphAnyWhere 课程名称:图形系统开发实战课程:进阶篇(上)课程章节:“图形交互操作:拾取”原文地址:https://www.graphanywhere.com/graph/advanced/2-6.html 第六章 图形交互操作:拾取 \quad 在图形系统…

Linux中安装Nginx及日常配置使用

高性能的http服务器/反向代理服务器。官方测试支持5万并发,CPU、内存等消耗较低且运行稳定 使用场景 Http服务器。 Nginx可以单独提供Http服务,做为静态网页的服务器。虚拟主机。 可以在一台服务器虚拟出多个网站。反向代理与负载均衡。 Nginx做反向代理…

创建型设计模式 - 原型设计模式 - JAVA

原型设计模式 一 .简介二. 案例三. 补充知识 前言 这是我在这个网站整理的笔记,有错误的地方请指出,关注我,接下来还会持续更新。 作者:神的孩子都在歌唱 一 .简介 原型模式提供了一种机制,可以将原始对象复制到新对象&#xff0…

Linux篇:进程

一. 前置知识 1.1冯诺依曼体系结构 我们常见的计算机,如笔记本。我们不常见的计算机,如服务器,大部分都遵守冯诺依曼体系 为什么计算机要采用冯诺依曼体系呢? 在计算机出现之前有很多人都提出过计算机体系结构,但最…

vite是什么

vite 是什么 vite —— 一个由 vue 作者尤雨溪开发的 web 开发工具 Vite由两个主要部分组成 dev server:利用浏览器的ESM能力来提供源文件,具有丰富的内置功能并具有高效的HMR生产构建:生产环境利用Rollup来构建代码,提供指令用…

基于SSM的绿色农产品销售系统的设计与实现

随着电子商务在各行各业中的广泛应用,为更多的产品提供了销售渠道。但就目前来看,这些以工业产品为热销的大型综合性电商平台,农产品销售量很不理想。另外,市面上存在专门销售农产品的网站,大部分消费者没有形成在网上购买农产品的…

C语言每日一题(60)对链表进行插入排序

题目链接 力扣网 147 对链表进行插入排序 题目描述 给定单个链表的头 head ,使用 插入排序 对链表进行排序,并返回 排序后链表的头 。 插入排序 算法的步骤: 插入排序是迭代的,每次只移动一个元素,直到所有元素可以形成一个有…

虚拟列表【vue】等高虚拟列表/非等高虚拟列表

文章目录 1、等高虚拟列表2、非等高虚拟列表 1、等高虚拟列表 参考文章1 参考文章2 <!-- eslint-disable vue/multi-word-component-names --> <template><divclass"waterfall-wrapper"ref"waterfallWrapperRef"scroll"handleScro…

Kubernetes部署CNI网络组件

目录 1.概述 K8S的三种网络 VLAN和VXLAN的区别 K8S中Pod网络通信 flannel的三种模式 flannel的UDP模式工作原理 flannel的VXLAN模式工作原理 2.部署flannel 在node01节点上操作 在master01节点上操作 3.部署Calico Calico主要由三个部分组成 calico的IPIP模式工作…

Spring6学习技术|Junit

学习材料 尚硅谷Spring零基础入门到进阶&#xff0c;一套搞定spring6全套视频教程&#xff08;源码级讲解&#xff09; Junit 背景 背景就是每次Test都要重复创建容器&#xff0c;获取对象。就是ApplicationContext和getBean两个语句。通过Spring整合Junit&#xff0c;可以…

集合框架之List集合

目录 ​编辑 一、什么是UML 二、集合框架 三、List集合 1.特点 2.遍历方式 3.删除 4.优化 四、迭代器原理 五、泛型 六、装拆箱 七、ArrayList、LinkedList和Vector的区别 ArrayList和Vector的区别 LinkedList和Vector的区别 一、什么是UML UML&#xff08;Unif…

【《高性能 MySQL》摘录】第 3 章 服务器性能剖析

文章目录 3.1 性能优化简介3.1.1 通过性能剖析进行优化3.1.2 理解性能剖析 3.2 对应用程序进行性能剖析3.3 剖析 MySQL 查询3.3.1 剖析服务器负载捕获 MySQL 的查询到日志文件中分析查询日志 3.3.2 剖析单挑查询使用 SHOW PROFILE &#xff08;现已过时&#xff09;使用SHOW ST…

猫头虎分享已解决Bug || RuntimeError: size mismatch, m1: [32 x 100], m2: [500 x 10]

博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝典&#xff01;《IDEA开发秘籍》 — 提升你的IDEA技能&#xff01;《100天精通鸿蒙》 …

跑步也要飙起来:南卡、韶音、墨觉骨传导耳机大比拼

作为一个热衷于运动同时又不能离开音乐的人&#xff0c;我总是在寻找一款既能让我自由奔跑&#xff0c;又能享受到美妙音乐的耳机。记得买耳机前&#xff0c;朋友都说骨传导耳机就像个小喇叭&#xff0c;漏音厉害&#xff0c;我却不这么认为。对我来说&#xff0c;骨传导耳机不…

游戏平台如何定制开发?

随着科技的飞速发展和互联网的普及&#xff0c;游戏平台已成为人们休闲娱乐的重要选择。为了满足用户多样化的需求&#xff0c;游戏平台的定制开发显得尤为重要。本文将探讨游戏平台定制开发的过程、关键要素以及注意事项&#xff0c;为有志于涉足此领域的开发者提供参考。 一、…

MLflow【部署 01】MLflow官网Quick Start实操(一篇学会部署使用MLflow)

一篇学会部署使用MLflow 1.版本及环境2.官方步骤Step-1 Get MLflowStep-2 Start a Tracking ServerStep 3 - Train a model and prepare metadata for loggingStep 4 - Log the model and its metadata to MLflowStep 5 - Load the model as a Python Function (pyfunc) and us…

【笔试强训错题选择题】Day2.习题(错题)解析

文章目录 前言 错题题目 错题解析 总结 前言 错题题目 1. 错题解析 1. 总结

C#,二叉搜索树(Binary Search Tree)的迭代方法与源代码

1 二叉搜索树 二叉搜索树&#xff08;BST&#xff0c;Binary Search Tree&#xff09;又称二叉查找树或二叉排序树。 一棵二叉搜索树是以二叉树来组织的&#xff0c;可以使用一个链表数据结构来表示&#xff0c;其中每一个结点就是一个对象。 一般地&#xff0c;除了key和位置…