Linux学习笔记之(1)~Linux有趣的历史概览

 献给知道mono,了解Jexus,对.net混搭技术感兴趣的朋友。

  1965年,Bell、MIT和GE公司发起Multics计划,目标是实现一个操作系统可以让大型主机实现连接三百个终端的目标。(那个时候的分时操作系统可不像现在。。。)

  1969年,Multics计划滞后,资金紧缺,Bell实验室退出该计划,但原本参与Multics计划的人员,却从中得到了一些启发。 Ken Thompson就是其中一位。

  据说 Ken Thompson为了移植一套"太空旅游"的游戏,希望研发一套操作系统以满足自己的需求。经过四个星期的奋斗(这厮简直不是人。。),他终于以汇编语言(Assembler)写出了一组核心程序,同时包括一些核心工具程序, 以及一个小小的文件系统。那个系统就是 Unix 的原型! 当时 Thompson 将 Multics 庞大而复杂系统简化了不少,于是同实验室的朋友都戏称这个系统为:Unics。  

  由于Thompson 写的那个操作系统实在太好用了,所以在贝尔实验室内部广为流传,并且数度经过改版。后来 Thompson 与 Ritchie 合作想将 Unics 改以高阶程序语言来撰写。当时现成的高级程序语言有B语言。 但是由 B 语言所编译出来的核心功能效能不太好。后来 Dennis Ritchie 将 B 语言改写为C语言(换句话说C语言就是这个时候被开发完成的),接着再以C语言重新改写和编译Unics的核心,最后发行出Unix的正式版本。(这群高级黑客。。。)

  由于贝尔实验室是隶属二美国电信大厂 AT&T 公司的, 只是 AT&T 当时忙于其他商业活劢,对于Unix并不支持也不排斥。此外,Unix在这个时期的发展着都是贝尔实验室的工程师,这群工程师对程序相当有研究,但是,Unix在当时可不是一般人可以接受的。不过对于学术界的学者来说,Unix真是学者们进行研究的福音,因为程序代码可以改写并且作为学术研究之用啊。

  1977年,Unix的重要版本,BSD诞生。

  1979年,AT&T 由由于在商业上的考虑,以及在当时现实环境下的思考,于是想将 Unix 的版权收回去。因此, AT&T 在 1979 年发行的第七版 Unix 中,特别提到了不可对学生提供源码的严格限制。同时,也造成 Unix 业界之间的紧张气氛,并且也引爆了很多的商业纠纷~

  这是最不爽的是谁呢?教授。想一想,如果没有核心原始码,那举如何教导学生认识 Unix 呢?这问题对于 Andrew Tanenbaum(谭宁邦)教授来说,实在是很伤脑经!不过,学校的课程还得继续,那怎么办?谭宁邦教授于是乎自己动手写了 Minix 这个 Unix Like 的核心程序! 在撰写的过程中,为了避免版权纠纷,谭宁邦完全不看 Unix 核心原始码!(不愧是教授。。。) 并且强调他的inix 必须能够与 Unix 兼容才行!谭宁邦在 1984 年开始撰写核心程序, 到了 1986 年终于完成。称之为Minix(意思为:mini unix)

  Minux 操作系统的开发者仅有谭宁邦教授,因为学者很忙啊!加上谭宁邦始终认为 Minix 主要用在教育用途上面, 所以对于 Minix 是点到为止!没错,Minix 是很受欢迎,不过,使用者的要求/需求的声音可能就比较没有办法上升到比较高的地方了!

  这个时候是不是Linux就出现了呢,还没有,介绍另一条故事主线。

  在谭宁邦教授撰写minix时,同时进行的还有另外一件事。那就是GNU计划。GNU计划是由Richard Mathew Stallman(史托曼)发起,这个计划对于现今的自由软件风潮,具有不可磨灭的作用。

  Richard Mathew Stallman(生于 1953 年)从小就很聪明。他在1971 年的时候,进入黑客圈中相当出名的人工智能实验室(AI Lab.),当时的黑客圈对于软件的着眼点几乎都是在『分享』,所以并没有专利方面的困扰, 这个特色对于史托曼影响很大,不过,后来由于管理阶层的问题,导致实验室里优秀黑客离开该实验室, 并进入其他商业公司继续发展优秀的软件。但史托曼不服输,仍然持续在原来的实验室开发新的程序和软件。 后来,他发现到,自己一个人并无法完成所有的工作,于是想要成立一个开放的团队来继续努力。

  1983 年以后,因为实验室硬件的更换,使得史托曼无法继续以原有的硬件和操作系统继续自由程序的撰写~ 而且他进一步发现到,过去他所使用的Lisp 操作系统,是麻省理工学院的专利软件, 是无法共享的,这对于想要成立一个开放团体的史托曼是个阻碍。二是他便放弃了 Lisp 这个系统。 后来,他接触到 Unix 这个系统,并且发现,Unix 在理论上与实际上,都可以在不同的机器间进行移植。虽然 Unix 依旧是专利软件, 但至少 Unix 架构上还是比较开放的!于是他开始转而使用 Unix 系统。

  1984 年,史托曼开始 GNU 计划, 这个计划的目的是:建立一个自由、开放的 Unix 操作系统(Free Unix)。 但是建立一个操作系统谈何容易啊!而且在当时的 GNU 是仅有自己一个人单打独斗的史托曼~ 这实在太麻烦,但又不想放弃这个计划,那可怎么办啊?

  聪明的史托曼干脆反其道而行~『既然操作系统太复杂,我就先写可以在 Unix 上面运行的小程序,这总可以了吧?』在这个想法上, 史托曼开始参考 Unix 上面现有的软件,幵依据这些软件的作用开发出功能相同的软件,在开发期间史托曼绝不看其他软件的原始码, 以避克吃上官司。后来一堆人知道免费的 GNU 软件,开始实际使用后发现与原有的专利软件相比差不了太多,于是便转而使用 GNU 软件, GNU 计划逐渐打开知名度。

  虽然 GNU 计划渐渐打开知名度,但是能见度还是不够。这时史托曼又想:不论是什么软件, 都得要事先编译成为事二进制文件(binary program)后才能够执行,如果能够写出一个不错的编译程序,那不就是大家都需要的软件了吗? 因此他便开始撰写 C 程序的编译程序,那就是现在相当有名的 GNU C Compiler(gcc)!(linux上著名的编译器浮出水面咯~!),在撰写过程中,他成立自由软件基金会(FSF, Free Software Foundation)。此外,他还撰写了更多可以被呼叫的 C 函式库(GNU C library),以及可以被使用来操作操作系统的基本接口 BASH shell!

这些都在 1990 年左右完成了!(linux上著名的bash shell又浮出水面了咯~!)

  到了 1985 年,为了避克 GNU 所开发的自由软件被其他人所利用而成为专利软件, 所以他与律师草拟了有名的通用公共许可证(General Public License, GPL), 并且称呼他为 copyleft(相对与利软件的 copyright!)(玩git都知道GPL吧,但是不知道有多少人知道这一段历史~)

  由于有 GNU 所开发的几个重要软件(比如GCC,Glibc,bash shell)造成后来很多的软件开发者可以藉由这些基础的工具来进行程序开发! 进一步壮大了自由软件团体,这是很重要的。不过,对于 GNU的最初构想 『建立一个自由的 Unix 操作系统』来说,这些优秀的程序是仍无法满足, 因为,当下并没有『自由的 Unix 核心』存在...所以这些软件仍只能在那些专利的 Unix 平台上工作~~一直到 Linux 的出现...

   1991 年,芬兰的赫尔辛基大学的的Linus Torvalds 在 BBS 上面贴了一则消息, 宣称他以 bash, gcc 等工具写了一个小小的核心程序,这个核心程序可以在 Intel 的 386 机器上面运作, 让很多人很感兴趣!从此开始了 Linux 不平凡的路程!

  Linus Torvalds(托瓦兹, 1969 年出生)的外祖父是赫尔辛基大学的统计学家, 他的外祖父为了让自己的小孙子能够学点东西,所以很小就将托瓦兹带到身边来管理一些微计算机。 在这个时期,托瓦兹接觉了汇编语言(Assembly Language),那是一种直接和芯片对谈的程序语言,也就是所谓的低级语言。必须要很了解硬件的架构,否则很难以汇编语言编写程序的。

  在 1988 年间,托瓦兹顺利的进入了赫尔辛基大学,幵选读了计算机科学系。在就学期间,因为学业的需要和自己的兴趣, 托瓦兹接触到了 Unix 这个操作系统。当时整个赫尔辛基叧有一部最新的 Unix 系统,同时仅提供 16 个终端机(terminal)。 早期的计算机仅有主机具有运算功能,terminal 仅负责提供Input/Output 而已。在这种情冴下, 实在很难满满足托瓦兹的需求,因为.....光是等待使用 Unix 的时间,就很耗时~为此,他不禁想到: 『我何不自己搞一部 Unix 来玩?』不过,就如同 Stallman 当年的 GNU 计划一样,要写核心程序,谈何容易~不过,幸运之神并未背离托瓦兹,因为不久之后,他就知道有一个类似 Unix 的系统, 并且和 Unix 完全兼容,还可以在 Intel 386 (就是教科书上的I386咯) 机器上面跑的操作系统, 那就是我们上面提过的,谭宁邦教授为了教育需要而撰写的 Minix 系统!(真的不要小看教授们。。。) 他在购买了最新的 Intel 386 的个人计算机后,就立即安装了 Minix 这个操作系统。 另外,Minix 这个操作系统是有附上原始码的, 所以托瓦兹也经由这个原始码学习到了很多的核心程序的设计概念。

  托瓦兹跟在研究Minix的过程中,发现 Minix 虽然真的很棒,但是谭宁邦教授就是不愿意进行功能的加强,导致一堆工程师在操作系统功能上面的欲求不满! 这个时候年轻的托瓦兹就想:『既然如此,那我何不自己来改写一个我想要的操作系统?』 二是他就开始了核心程序的撰写了。

  撰写程序需要什么呢?首先需要的是能够进行工作的环境,再来则是可以将原始码编译成为可执行文件的编译秳序。 好在有 GNU 计划提供的 bash 工作环境软件以及 gcc 编译程序等自由软件, 让托瓦兹得以顺利的撰写核心秳序。他参考 Minix 的设计理念和书上的程序代码,然后仔绅研究出 386 个人计算机的性能优化, 然后使用 GNU 的自由软件将核心程序代码不 386 紧紧的结合在一起,最终写出他所需要的核心程序。 而这个小玩意竟然真的可以在 386 上面顺利的跑起来~还可以读取 Minix 的文件系统。 真是太好了!不过还不够,他希望这个程序可以获得大家的一些修改建议, 二是他便将这个核心放置在网绚上提供大家下载,同时在 BBS 上面贴了一则消息:(这就是Linux出现时的宣言吧)

  Hello everybody out there using minixI‘m doing a (free) operation system (just a hobby,won‘t be big and professional like gnu) for 386(486) AT clones.I‘ve currently ported bash (1.08) and gcc (1.40), and things seem to work. This implies that i‘ll get something practical within a few months, and I‘d like to know what features most people want. Any suggestions are welcome, but I won‘t promise I‘ll implement them :-)

  他说,他完成了一个小小的操作系统,这个核心是用在 386 机器上的, 同时,他真的仅是好玩,并不是想要做一个跟 GNU 一样大的计划! 另外,他希望能够得到更多人的建讧与回馈来发展这个操作系统!这个概念跟 Minix 刚好背道而驰。 这则新闻引起很多人的注意,他们也去托瓦兹提供的网站上下载了这个核心来安装。 有趣的是,因为托瓦兹放置核心的那个 FTP 网站的目录为:Linux, 因此,大家便称这个核心为 Linux 了。(此时的 Linux只是现在linux的 kernel)

  后续的故事我就不讲了,Linux发展到现在,已经尽人皆知了

时间: 2024-10-29 19:07:47

Linux学习笔记之(1)~Linux有趣的历史概览的相关文章

Linux学习笔记四:Linux的文件搜索命令

1.文件搜索命令  which 语法:which [命令名称] 范例:$which ls  列出ls命令所在目录 [[email protected] ~]$ which ls alias ls='ls --color=auto' /bin/ls 另外一个命令:whereis [名称名称],也可以列出命令所在目录. [[email protected] ~]$ whereis ls ls: /bin/ls /usr/share/man/man1/ls.1.gz /usr/share/man/ma

Linux学习笔记三:Linux的权限处理命令

1.改变文件或目录权限  chmod 语法:chmod [{ugo} {+-=} {rwx}] [文件或目录] 或 [mode] [文件或目录] 第一种语法中: 这里的u是所有者,g是指所属组,o是指其他人 +是指增加权限,-是指减少权限,=是指赋予权限 r是指读权限,w是指写权限.x只是执行权限 第二种语法中: 在这里,r的值是4,w的值是2,x的值是1. 这里写的mode,是指一组数字.如:421.这里的421,是指所有者所拥有权限的数字总和是4,所属组所拥有权限的总和是2,其他人所拥有权限

Linux学习笔记二:Linux的文件处理命令

1.文件处理命令:ls 作用:显示目录文件 语法:ls [选项] [文件或目录] [选项]:-a 显示所有文件,包括隐藏文件   -l 显示详细信息 -d 查看目录属性 [文件或目录]:当省略时默认将当前路径作为参数 实例: · ls 显示当前文件夹下所有文件(不包括隐藏文件)的信息 · ls -l 显示当前文件夹下所有文件(不包括隐藏文件)的详细信息 · ls -ld  显示当前文件夹的详细信息 技巧:要查看文件夹的信息,必须加-d参数:要查看详细参数,必须加-l参数. 2.文件的属性 使用”

linux学习笔记一:linux版本查询

最近在部署was时,发现有些命令不能使用,查资料发现不同linux发行版本,部分命令有差异.在部署软件之前要充分了解linux的版本信息,查询版本信息主要有以下几个命令:1.uname,uname-r,uname -a,cat /proc/version  查看系统的内核版本,命令适用于aix,hp_ux等系统:[[email protected] etc]# unameLinux[[email protected] etc]# uname -r2.6.32-220.el6.x86_64[[em

linux学习笔记二:linux文件系统

各大linux的版本都遵循着FHS(Filesystem Hierarchy Standard)文件系统目录标准,是一个树形结构的组织文件.在此简要记录各目录. linux下所有文件都处在/文件下. 树形结构图: /boot:  系统启动相关的文件 主要文件 1.vmliunx:内核    2.initramfs:磁盘映像文件   3.grub(bootloader) /dev:设备文件 块设备:随机访问设备. 字符设备:线性设备,顺序访问.按字符为单位.键盘.鼠标. 设备号:主设备号(majo

Linux学习笔记十:Linux用户管理

本笔记说的Linux用户管理主要包括以下内容: 1.用户配置文件(/etc/passwd  /etc/shadow) 2.组配置文件(/etc/group  /etc/gshadow) 3.用户缺省配置文件(/etc/login.defs  /etc/default/useradd) 4./etc/motd文件./etc/issue文件 5.SetUID权限.SetGID权限.黏着位 6.典型案例之一:手动创建一个用户 7.典型案例之二:批量添加用户 8.典型案例之三:限制用户使用su 9.典型

linux学习笔记3:linux的网络配置,rpm包,shell以及samba服务器的使用和安装

1.linux下的shell<linux命令.编辑器和shell编程> (1)shell种类有很多,常用的有三种,在linux可以通过ls -l /bin/*sh 来显示所有已安装的shell种类  1)bourne  /bin/sh    2)C     /bin/csh  3)Kom     /bin/ksh (2)查看目前使用的是哪种shell的命令来看请里面的内容可以知道  env      意思是可以显示当前操作系统的环境变量 (3)修改使用shell的版本所使用的指令是:  chs

【linux学习笔记之一】linux系统目录结构以及常用系统命令

序 ???这破笔记也要序?? 昨天开始学linux,做好笔记以备日后翻阅 Linux系统目录结构图 bin  --主要用于存放二进制文件(如:命令文件) boot--引导目录 dev  --设备目录 ect  --配置文件夹 home--用户文件夹 lib  --库文件夹 mnt  --挂载目录 opt  --通常大型软件安装在这里 proc--实时的信息(只存在内存中) sbin--  super bin只有root用户才能执行 sys   -- 系统文件夹 tmp  --临时文件夹 usr 

【Linux学习笔记八】Linux编程-编译(gcc)与调试(gdb)

[注]文章中的所有截图均为centos下实验结果,亲测命令正确= ̄ω ̄= [参考资料]<Linux从入门到精通(第2版)>刘忆智 等编著 1.编译一个C程序 :以用vim写成的summary.c为例 $ gcc summary.c            ##编译文件,生成名为 a.out 的可执行文件      $ ./a.out            ##执行文件      $ gcc -o sum summary.c            ##为编译生成的可执行文件命名为sum