1. 认识 Linux
Linux 可以分为四个主要部分:Linux 内核 、图形桌面环境 、GNU 工具 、应用软件。这四位各司其职。
系统架构流转图
[ 应用软件 ]
│
├─► 扩展系统功能
▼
[ 图形桌面环境 ]
│
├─► 提供可视化操作管理软件界面
▼
[ GNU 工具 ]
│
├─► 用以操作文件/文本的工具
├─► 用以管理进程的工具
▼
[ Linux 内核 ]
│
├─► 管理:系统内存、软件程序、硬件设备、文件系统
▼
[ 底层硬件 ]
(主板、CPU等)
2. Linux 内核 (Kernel) 的四个主要功能
内核是整个系统的核心,管理着硬件和软件,以下是四个主要功能:
① 系统内存管理
这是内核的主要功能,管理着物理内存与虚拟内存。
基本原理 :内核通过硬盘上的空间来实现虚拟内存,这块区域叫 交换空间 (Swap);物理内存与 Swap 分区之间不断地交换"页"。简单来说,就是将应用动态生成的、且硬盘上没有对应文件的纯粹的内存数据进行转移。
内存交换示意图
┌──────────────────────────────┐
│ 虚拟内存 │
│ (内核记录哪些页面正在使用, │
│ 自动将未使用的页面复制到 │
│ Swap 分区) │
└──────────────┬───────────────┘
│ 交互
▼
【 Linux 内核 】
▲ ▲
交互 │ │ 交互
│ │
┌─────────────────────┘ └──────────────────────┐
▼ ▼
┌───────────────────────┐ ┌─────────────────────┐
│ 物理内存 │ │ 交换空间 │
│ (按组划分内存为块, │ │ (Swap) │
│ 叫做"页") │ │ │
└───────────────────────┘ └─────────────────────┘
② 软件程序管理
在 Linux 系统中运行的程序叫进程。
-
内核控制着所有进程。
-
内核创建了
init进程,也叫第一个进程。 -
内核启动的时候,它会将
init进程加载到虚拟内存中;在启动任何新进程的时候,都会在虚拟内存中分配一块专门的区域给新进程存储数据。
③ 硬件设备管理
任何需要与之通信的设备都在内核注入其驱动程序,让系统认识设备。在内核中注入驱动程序有两种方法:
-
编译进内核的设备驱动代码。
-
可插入内核的设备驱动模块。
设备文件分类 Linux 系统将硬件设备当成特殊文件,叫设备文件,分三类:
-
字符型设备文件:每次处理数据时只能处理一个字符的设备。
-
块设备文件:每次处理数据时能处理大块数据的设备。
-
网络设备文件:采用数据包发送和接收数据的设备。
节点与设备号 Linux 为每个设备都创建一种名为节点的特殊文件。每一个节点都有一个唯一的数据对,对应的 Linux 内核标识它。
-
数据对包括一个主设备号 与次设备号。
-
类似的设备会被划分到同样的主设备号下,降低代码冗余,防止路由表爆炸。
④ 文件系统管理
不同于 Windows 系统,Linux 支持不同类型的文件系统的读写,除了 Linux 自带的多种文件系统外,还支持其他操作系统的文件系统。
Linux 支持的文件系统列表:
| 序号 | 格式 | 说明 |
|---|---|---|
| 1 | ext |
Linux 扩展文件系统 |
| 2 | ext2 |
第二扩展文件系统 (包含后续的 ext3, ext4) |
| 3 | hpfs |
OS/2 高性能文件系统 |
| 4 | iso9660 |
ISO9660 光盘文件系统 |
| 5 | jfs |
IBM 日志文件系统 |
| 6 | minix |
MINIX 文件系统 |
| 7 | msdos |
微软的 FAT16 文件系统 |
| 8 | ncp |
Netware 文件系统 |
| 9 | nfs |
网络文件系统 |
| 10 | ntfs |
支持微软的 NT 文件系统 |
| 11 | proc |
访问系统内核信息的虚拟文件系统 |
| 12 | reiserfs |
提供更好性能的文件系统 |
| 13 | smb |
支持网络访问的共享文件系统 |
| 14 | sysv |
较早期的 Unix 的文件系统 |
| 15 | ufs |
BSD 文件系统 |
| 16 | umsdos |
建立在 msdos 上的文件系统 |
| 17 | vfat |
就是 FAT32 文件系统 |
| 18 | xfs |
高性能 64 位日志文件系统 |
注: Linux 内核采用 虚拟文件系统 (VFS) 作为和每个文件系统交互的接口。为任何类型文件系统通信提供一个标准接口。
3. GNU 工具与 Shell
GNU 工具
GNU 组织开发了一套完整的 Unix 工具,除了执行一些标准功能,还提供了控制文件程序的工具。核心是 Coreutils 软件包,其中包括:
-
用以处理文件的工具
-
用以操作文本的工具
-
用以管理进程的工具
Shell
Shell 工具是一种特殊的交互工具,为用户提供了启动程序和管理文件系统的途径。
-
命令行提示符:Shell 的核心是命令行提示符。它允许用户输入文本命令,由其解释并且执行。
-
内部命令:Shell 包含了一组内部命令,用这些命令可以完成对系统和文件系统的基本管理。
-
Shell 脚本:也可以将多个 shell 命令放入文件中作为程序进行执行,也就是 shell 脚本。可以完成一些自动化的功能。
常见的 Shell 种类 在 Linux 系统上,有好几种 Shell 可供使用,各个 shell 的特性各不相同,所有默认的 shell 基本上是 bash。除了基本的 bash shell 还有另几种 shell 如下:
-
ash: 一种运行在内存受限环境中间的轻量级 shell。 -
korn(ksh): 支持关联数组和浮点计算的高级编程特性。 -
tcsh: 一种将 C 语言中的一些元素引入到 Shell 脚本中的 shell。 -
zsh: 拥有上面三种的特性,同时提供高级编程语言的特性。
4. Linux 桌面环境
Linux 桌面环境其实就是提供了一个类似于 Windows 图形化的操作界面的工具。
- 弊端:会浪费一些系统资源。所以在纯粹的服务器管理中通常不用。