计算机 · 2021年12月19日 0

Linux

Linux的架构

Linux可以看作由以下四步分组成:

  • Linux内核
  • GNU工具组件
  • 图形化桌面环境
  • 应用软件

Linux内核

内核负责以下四项主要功能:

  • 系统内存管理
    这个就主要是虚拟内存的管理了;
    • 查看当前Linux系统上的虚拟内存状态:cat /proc/meminfo
    • 查看系统上的共享内存页面:ipcs -m
  • 软件程序管理
    • 开机时要自动启动的进程:一些Linux发行版使用一个表来管理在系统开机时要自动启动的进程,这个表通常位于专门文件*/etc/inittab中。而另外一些如Ubuntu则采用/etc/init.d目录。将开机时启动或停止某个应用的脚本放在这个目录下。这些脚本通过/etc/rcX.d目录下的入口启动。这里X代表运行级(run level)。
      Linux的init系统采用了运行级。运行级决定了init进程运行_/etc/inittab/文件或/etc/rcX.d_目录中定义好的某些特定类型的进程。Linux操作系统有7个启动运行级。
      运行级为1时,只有基本的系统进程会启动,同时会启动唯一一个控制台终端进程。我们称之为单用户模式。单用户模式通常用来在系统有问题时进行紧急的文件系统维护。显然,在这种模式下仅有一人(通常是系统管理员)能登录到这个系统上操作数据。
      标准的启动运行级是3。在这个运行级上,大多数应用软件,比如网络支持程序,都会启动。另一个Linux中常见的运行级是5。在这个运行级上系统会启动图形化的X Window系统,同时允许用户通过图形化桌面窗口登录系统。
      Linux系统可以通过调整运行级来控制整个系统的功能。通过将运行级从3调整成5,系统就可以从基于控制台的系统变成更先进的图形化X Window系统。在我的Ubuntu系统上进行测试时,发现还有一个rcS.d的目录,据说才这是真正的单用户模式的run level,即大概比1级别更高。而且据说这些run level的东西只是作为backward compatible才被继续支持的。
  • 硬件设备管理
    在Linux内核中有两种方法用来插入设备驱动代码:
    • 编译进内核的设备驱动代码;
    • 可插入内核的设备驱动模块;
    Linux中将硬件设备当成特殊的文件,称为设备文件。设备文件分为3种不同的类别:
    • 字符型设备文件
    • 块设备文件
    • 网络设备文件
    字符型设备是指处理数据时每次只能处理一个字符的设备。大多数类型的调制解调器和终端都是作为字符型设备文件创建的。块设备文件是指处理数据时每次能处理大块数据的设备,比如硬盘。
    网络设备文件是指采用数据包发送和接收数据的设备,包括各种网卡和一个特殊的回环设备。这个回环设备允许Linux系统使用通用的网络编程协议同自己通信。
    Linux为系统上的每个设备都创建一种特殊的文件,称为“节点”。与设备的所有通信都是通过设备节点完成的。每个节点都有一个唯一的数值对,供Linux内核标识它。数值对包括一个主设备号和一个次设备号。类似的设备被划分到同样的主设备号下。次设备号用于标识同一主设备号下的某个特殊设备。
    在用ls命令时,文件权限里的b表示这是块设备文件,c表示这是字符型设备文件。
  • 文件系统管理
文件系统描述
extLinux扩展文件系统,最早的Linux文件系统
ext2第二扩展文件系统,在ext的基础上提供了更多的功能
ext3第三扩展文件系统,支持日志功能
ext4第四扩展文件系统,支持高级日志功能
hpfsOS/2高性能文件系统
jfsIBM日志文件系统
iso9660ISO 9660文件系统 (CD-ROM)
minixMINIX文件系统
msdos微软的FAT16
ncpNetware文件系统
nfs网络文件系统
ntfs支持Microsoft NT文件系统
proc访问系统信息
ReiserFS高级Linux文件系统,能提供更好的性能和硬盘恢复功能
smb支持网络访问的Samba SMB文件系统
sysv较早期的Unix文件系统
ufsBSD文件系统
umsdos贮存在msdos上的类Unix文件系统
vfatWindows 95文件系统(FAT32)
XFS高性能64位日志文件系统

任何供Linux服务器访问的硬盘都必须格式化成上表所列的文件系统类型之一。
Linux内核采用虚拟文件系统(Virtual File System, VFS)作为和每个文件系统交互的接口。这为Linux内核同任何文件系统通信提供了一个标准接口。当每个文件系统被挂载和使用时,VFS将信息都缓存在内存中。

GNU工具链

  • 核心GNU工具链GNU项目一开始主要是为Unix系统管理员设计的,用以提供一个类Unix环境。这个目标导致这个项目移植了很多Unix系统通用的命令行工具。为Linux系统提供的一组核心工具被称为coreutils(core utilities)软件包。GNU coreutils软件包由3部分组成:
    • 用以处理文件的工具;
    • 用以处理文本的工具;
    • 用以管理进程的工具;
  • shell所有Linux发行版默认的shell基本上都是bash shell。bash shell作为标准Unix shell – Bourne shell(沿用创建者的名字)的替代,由GNU项目开发的。bash shell的名称就是针对这个Bourne shell的文字游戏,称为Bourne again shell。
shell描述
ash运行在内存受限环境中简单的,轻量级shell,但与bash shell完全兼容
korn与Bourne shell兼容的编程shell,但支持一些高级的编程特性,比如关联数组和浮点运算
tcsh将C语言中的一些元素引入到shell脚本中的shell
zsh将bash,tcsh和korn的特性引入,同时提供高级编程特性,共享历史文件和主题化提示符的高级shell

Linux桌面环境

  • X window系统
  • KDE
  • GNOME