Skip to main content

Linux

1. 发展简史 —— Unix、Minix 到 Linux

  Unix 是一种古老的操作系统。在 Unix 之前,操作系统基本都只能进行批处理作业,相当于你给计算机一批任务,然后计算机逐项去自动执行,执行完了反馈给你结果,在此过程中是不具可交互性的。为了满足交互性、及时性和多用户同时访问的需要,人们希望研制分时操作系统 —— 通过时间片轮转为很多用户同时提供交互式服务。

  早期的尝试能支持的用户量很有限(MIT 推动的 MAC 计划只能让30名左右的使用者同时共享 IBM 的大型计算机,到了 1965 年最终不堪负荷),于是 MIT 决定研制更大型的分时计算机系统 —— MULTICS —— 其中通用电子公司参与了硬件开发,贝尔实验室承包了软件也就是操作系统。但是这一由众多大名鼎鼎的机构联合执行的计划最终失败了,MULTICS 被传为笑柄。

  但是,当时在贝尔实验室参与分时操作系统开发的成员在此项目中获得了宝贵的经验。贝尔实验室虽然退出了 MULTICS 项目,但为创建交互式计算环境的努力从未停止,后来汤姆森 (Ken Thompson) 与里奇 (Dennis Ritchie) 在一些机缘巧合之下开发了 Uniplexed Information and Computing System,简称 Unix,其中 Uniplexed 是对 MULTICS 首字母 Multiplexed 的嘲讽。

  历经很多版本的改进(其中重大的改进如,将内核从由汇编语言写改成由高级语言写,他们尝试过世界上第一个被推广使用的高级语言 Fortran,后来又产生了 B 语言,但是都不理想。最后改良了 B 语言,开发出了 C 语言,因而里奇被称作 C 语言之父。这一改进大大增强了 Unix 的多平台可移植性),人们发现 Unix 相比于批处理系统有很多优势,应用规模逐渐扩大。最终贝尔实验室的所有者 AT&T 公司宣布要将 Unix 商业化。由于众多衍生版的出现,在随后的几十年中,Unix的发展经常伴随着产权纠纷。

  20世纪80年代,随着硬件计算能力的提升,计算机市场不断扩大。可供选用的操作系统中,Unix 是商业软件,AT&T 制定的价格昂贵;DOS 系统是单用户单任务的,且源代码被微软当作商业机密;MacOS 系统只能用于苹果电脑。这在教学上给老师出了难题,因为找不到开源的例子。一名教授就编写了一个操作系统 Minix 来讲解操作系统。虽然 Minix 比较简单,但好处是完全开源的。

  全世界学计算机的学生都通过钻研 Minix 的源代码来学习操作系统,芬兰赫尔辛基大学大学二年级的学生 Linus Torvalds 就是其中一个。借鉴了 Minix 和 Unix 的思想,Linus 在 1991 年写出了 Linux 操作系统。他把 Linux 的源码放到网上,所有人都可以免费获取,甚至可以进行商业应用。这就使得 Linux 迅速得到了全世界计算机企业和爱好者的支持,出现了很多发行版。这样以来,一个庞大的社区不断更新和维护,使 Linux 具有了长久的生命力。

2. Linux 主要特点

(1)Linux 是开源的,遵循GNU通用公共许可证(GPL)。这意味着任何人都可以基于 Linux 底层代码创建一个符合自己需求的 Linux 发行版。

(2)一切皆文件。我们说 Linux 是类 Unix 系统,借鉴的思想主要就是这一点。无论是大家通常理解的文件,还是外设、命令、各种进程,对于操作系统内核而言都是文件,只不过文件的类型不同而已。

(3)多用户、多任务。同 Unix 一样,Linux 是分时操作系统,各个用户可以同时登陆,由操作系统来保证各用户对于各类文件有合适的权限。Linux 系统可以同时连接多个终端并且每隔一段时间重新扫描进程,重新分配进程的优先级,动态分配系统资源,从而在多进程同时运行时保持良好性能。

(4)交互性。Linux 具有良好的交互性,用户可以得到及时响应。一般用的是字符界面,但是如果想要图形界面的话也可以单独安装 GUI 软件。支持多平台(还可嵌入式)、支持多处理器、有强大的网络功能等等。

3. Linux 文件管理

Linux 的设计哲学: 一切皆文件

3-1.系统目录结构

系统文件

  • /boot:存放着启动Linux时使用的内核文件,包括连接文件以及镜像文件。
  • /etc:存放所有的系统需要的配置文件和子目录列表。
  • /lib:存放基本代码库(比如c++库),几乎所有的应用程序都需要用到这些共享库。
  • /sys:该目录下安装了Linux2.6内核中新出现的一个文件系统 sysfs ,当一个内核对象被创建的时候,对应的文件和目录也在内核对象子系统中。

指令/程序(文件)

  • /bin:存放着最常用的程序和指令。
  • /sbin:只有系统管理员能使用的程序和指令。

外部设备(文件)

  • /dev:Device的缩写,存放的是Linux的外部设备。注意:在Linux中访问设备和访问文件的方式是相同的。
  • /media:类windows的其他设备,例如U盘、光驱等等,识别后linux会把设备放到这个目录下。
  • /mnt:用于临时挂载别的文件系统,在讲docker时可能还会遇到。

临时文件

  • /run:是一个临时文件系统,存储系统启动以来的信息。
  • /lost+found:一般情况下为空的,系统非法关机后,这里就存放一些文件。
  • /tmp:这个目录是用来存放一些临时文件的。

账户文件

  • /root:系统管理员的用户主目录。
  • /home:用户的主目录,以用户的账号命名。
  • /usr:用户的很多应用程序和文件都放在这个目录下,类似于Windows下的program files目录。
  • /usr/bin:系统用户使用的应用程序与指令。
  • /usr/sbin:超级用户使用的比较高级的管理程序和系统守护程序。
  • /usr/src:内核源代码默认的放置目录。

程序运行中的文件

  • /var:存放经常修改的数据,比如程序运行的日志文件(/var/log 目录下)。
  • /proc:管理内存空间。虚拟的目录,是系统内存的映射,我们可以直接访问这个目录来获取系统信息。这个目录的内容不在硬盘上而是在内存里,我们也可以直接修改里面的某些文件来做修改。