Linux 命令行与 shell 脚本编程大全 (3rd ed)(2):初识 Linux shell 1.1.1

阅读数:13 2019 年 11 月 16 日 20:39

Linux命令行与shell脚本编程大全(3rd ed)(2):初识Linux shell 1.1.1

内容简介
这是一本关于 Linux 命令行与 shell 脚本编程的全方位教程,主要包括四大部分:Linux 命令行,shell 脚本编程基础,高级 shell 脚本编程,如何创建实用的 shell 脚本。本书针对 Linux 系统的新特性进行了全面更新,不仅涵盖了详尽的动手教程和现实世界中的实用信息,还提供了与所学内容相关的参考信息和背景资料。通过本书的学习,你将轻松写出自己的 shell 脚本。

(深入探究 Linux 内核)

Linux 系统的核心是内核。内核控制着计算机系统上的所有硬件和软件,在必要时分配硬件,并根据需要执行软件。

如果你一直都在关注 Linux 世界,肯定听说过 Linus Torvalds。Linus 还在赫尔辛基大学上学时就开发了第一版 Linux 内核。起初他只是想仿造一款 Unix 系统而已,因为当时 Unix 操作系统在很多大学都很流行。

Linus 完成了开发工作后,将 Linux 内核发布到了互联网社区,并征求改进意见。这个简单的举动引发了计算机操作系统领域内的一场革命。很快,Linus 就收到了来自世界各地的学生和专业程序员的各种建议。

如果谁都可以修改内核程序代码,那么随之而来的将是彻底的混乱。为了简单起见,Linus 担当起了所有改进建议的把关员。能否将建议代码并入内核完全取决于 Linus。时至今日,这种概念依然在 Linux 内核代码开发过程中沿用,不同的是,现在是由一组开发人员来做这件事,而不再是 Linus 一个人。

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

  • 系统内存管理
  • 软件程序管理
  • 硬件设备管理
  • 文件系统管理

后面几节将会进一步探究以上每一种功能。

1. 系统内存管理

操作系统内核的主要功能之一就是内存管理。内核不仅管理服务器上的可用物理内存,还可以创建和管理虚拟内存(即实际并不存在的内存)。

内核通过硬盘上的存储空间来实现虚拟内存,这块区域称为交换空间(swap space)。内核不断地在交换空间和实际的物理内存之间反复交换虚拟内存中的内容。这使得系统以为它拥有比物理内存更多的可用内存(如图 1-2 所示)。

Linux命令行与shell脚本编程大全(3rd ed)(2):初识Linux shell 1.1.1

图 1-2 Linux 系统内存映射

内存存储单元按组划分成很多块,这些块称作页面(page)。内核将每个内存页面放在物理内存或交换空间。然后,内核会维护一个内存页面表,指明哪些页面位于物理内存内,哪些页面被换到了磁盘上。

内核会记录哪些内存页面正在使用中,并自动把一段时间未访问的内存页面复制到交换空间区域(称为换出,swapping out)——即使还有可用内存。当程序要访问一个已被换出的内存页面时,内核必须从物理内存换出另外一个内存页面给它让出空间,然后从交换空间换入请求的内存页面。显然,这个过程要花费时间,拖慢运行中的进程。只要 Linux 系统在运行,为运行中的程序换出内存页面的过程就不会停歇。

2. 软件程序管理

Linux 操作系统将运行中的程序称为进程。进程可以在前台运行,将输出显示在屏幕上,也可以在后台运行,隐藏到幕后。内核控制着 Linux 系统如何管理运行在系统上的所有进程。

内核创建了第一个进程(称为 init进程)来启动系统上所有其他进程。当内核启动时,它会将 init 进程加载到虚拟内存中。内核在启动任何其他进程时,都会在虚拟内存中给新进程分配一块专有区域来存储该进程用到的数据和代码。

一些 Linux 发行版使用一个表来管理在系统开机时要自动启动的进程。在 Linux 系统上,这个表通常位于专门文件 /etc/inittab 中。

另外一些系统(比如现在流行的 Ubuntu Linux 发行版)则采用 /etc/init.d 目录,将开机时启动或停止某个应用的脚本放在这个目录下。这些脚本通过 /etc/rcX.d 目录下的入口(entry)1启动,这里的 X 代表运行级(run level)。

1 这些入口实际上是到 /etc/init.d 目录中启动脚本的符号链接。——译者注(后文若无特殊说明,脚注均为“译者注”。)

Linux 操作系统的 init 系统采用了运行级。运行级决定了 init 进程运行 /etc/inittab 文件或 /etc/rcX.d 目录中定义好的某些特定类型的进程。Linux 操作系统有 5 个启动运行级。

运行级为 1 时,只启动基本的系统进程以及一个控制台终端进程。我们称之为单用户模式。单用户模式通常用来在系统有问题时进行紧急的文件系统维护。显然,在这种模式下,仅有一个人(通常是系统管理员)能登录到系统上操作数据。

标准的启动运行级是 3。在这个运行级上,大多数应用软件,比如网络支持程序,都会启动。另一个 Linux 中常见的运行级是 5。在这个运行级上系统会启动图形化的 X Window 系统,允许用户通过图形化桌面窗口登录系统。

Linux 系统可以通过调整启动运行级来控制整个系统的功能。通过将运行级从 3 调整成 5,系统就可以从基于控制台的系统变成更先进的图形化 X Window 系统。

在第 4 章,你将会学习如何使用ps命令查看当前运行在 Linux 系统上的进程。

3. 硬件设备管理

内核的另一职责是管理硬件设备。任何 Linux 系统需要与之通信的设备,都需要在内核代码中加入其驱动程序代码。驱动程序代码相当于应用程序和硬件设备的中间人,允许内核与设备之间交换数据。在 Linux 内核中有两种方法用于插入设备驱动代码:

  • 编译进内核的设备驱动代码
  • 可插入内核的设备驱动模块

以前,插入设备驱动代码的唯一途径是重新编译内核。每次给系统添加新设备,都要重新编译一遍内核代码。随着 Linux 内核支持的硬件设备越来越多,这个过程变得越来越低效。不过好在 Linux 开发人员设计出了一种更好的将驱动代码插入运行中的内核的方法。

开发人员提出了内核模块的概念。它允许将驱动代码插入到运行中的内核而无需重新编译内核。同时,当设备不再使用时也可将内核模块从内核中移走。这种方式极大地简化和扩展了硬件设备在 Linux 上的使用。

Linux 系统将硬件设备当成特殊的文件,称为设备文件。设备文件有 3 种分类:

  • 字符型设备文件
  • 块设备文件
  • 网络设备文件

字符型设备文件是指处理数据时每次只能处理一个字符的设备。大多数类型的调制解调器和终端都是作为字符型设备文件创建的。块设备文件是指处理数据时每次能处理大块数据的设备,比如硬盘。

网络设备文件是指采用数据包发送和接收数据的设备,包括各种网卡和一个特殊的回环设备。这个回环设备允许 Linux 系统使用常见的网络编程协议同自身通信。

Linux 为系统上的每个设备都创建一种称为节点的特殊文件。与设备的所有通信都通过设备节点完成。每个节点都有唯一的数值对供 Linux 内核标识它。数值对包括一个主设备号和一个次设备号。类似的设备被划分到同样的主设备号下。次设备号用于标识主设备组下的某个特定设备。

4. 文件系统管理

不同于其他一些操作系统,Linux 内核支持通过不同类型的文件系统从硬盘中读写数据。除了自有的诸多文件系统外,Linux 还支持从其他操作系统(比如 Microsoft Windows)采用的文件系统中读写数据。内核必须在编译时就加入对所有可能用到的文件系统的支持。表 1-1 列出了 Linux 系统用来读写数据的标准文件系统。

表 1-1 Linux 文件系统

文件系统 描述
ext Linux 扩展文件系统,最早的 Linux 文件系统
ext2 第二扩展文件系统,在 ext 的基础上提供了更多的功能
ext3 第三扩展文件系统,支持日志功能
ext4 第四扩展文件系统,支持高级日志功能
hpfs OS/2 高性能文件系统
jfs IBM 日志文件系统
iso9660 ISO 9660 文件系统(CD-ROM)
minix MINIX 文件系统
msdos 微软的 FAT16
ncp Netware 文件系统
nfs 网络文件系统
ntfs 支持 Microsoft NT 文件系统
proc 访问系统信息
ReiserFS 高级 Linux 文件系统,能提供更好的性能和硬盘恢复功能
smb 支持网络访问的 Samba SMB 文件系统
sysv 较早期的 Unix 文件系统
ufs BSD 文件系统
umsdos 建立在 msdos 上的类 Unix 文件系统
vfat Windows 95 文件系统(FAT32)
XFS 高性能 64 位日志文件系统

Linux 服务器所访问的所有硬盘都必须格式化成表 1-1 所列文件系统类型中的一种。

Linux 内核采用虚拟文件系统(Virtual File System,VFS)作为和每个文件系统交互的接口。这为 Linux 内核同任何类型文件系统通信提供了一个标准接口。当每个文件系统都被挂载和使用时,VFS 将信息都缓存在内存中。

评论

发布