除了由内核控制硬件设备外,操作系统还需要工具来执行一些标准功能,比如控制文件和
程序。Linus在创建Linux系统内核时,并没有可用的系统工具。然而他很幸运,就在开发Linux
内核的同时,有一群人正在互联网上共同努力,模仿Unix操作系统开发一系列标准的计算机系统工具。
GNU组织(GNU是GNU’s Not Unix的缩写)开发了一套完整的Unix工具,但没有可以运
行它们的内核系统。这些工具是在名为开源软件(open source software,OSS)的软件理念下
开发的。

开源软件理念允许程序员开发软件,并将其免费发布。任何人都可以使用、修改该软件,或
将该软件集成进自己的系统,无需支付任何授权费用。将Linus的Linux内核和GNU操作系统工具
整合起来,就产生了一款完整的、功能丰富的免费操作系统。

尽管通常将Linux内核和GNU工具的结合体称为Linux,但你也会在互联网上看到一些Linux
纯粹主义者将其称为GNU/Linux系统,藉此向GNU组织所作的贡献致意。

1. 核心GNU工具

GNU项目的主旨在于为Unix系统管理员设计出一套类似于Unix的环境。这个目标促使该项目
移植了很多常见的Unix系统命令行工具。供Linux系统使用的这组核心工具被称为coreutils(core
utilities)软件包。
GNU coreutils软件包由三部分构成:

  1. 用以处理文件的工具
  2. 用以操作文本的工具
  3. 用以管理进程的工具

这三组主要工具中的每一组都包含一些对Linux系统管理员和程序员至关重要的工具。本书
将详细介绍GNU coreutils软件包中包含的所有工具。

2. shell

GNU/Linux shell是一种特殊的交互式工具。它为用户提供了启动程序、管理文件系统中的文
件以及运行在Linux系统上的进程的途径。shell的核心是命令行提示符。命令行提示符是shell负责
交互的部分。它允许你输入文本命令,然后解释命令,并在内核中执行。

shell包含了一组内部命令,用这些命令可以完成诸如复制文件、移动文件、重命名文件、显
示和终止系统中正运行的程序等操作。shell也允许你在命令行提示符中输入程序的名称,它会将
程序名传递给内核以启动它。

你也可以将多个shell命令放入文件中作为程序执行。这些文件被称作shell脚本。你在命令行
上执行的任何命令都可放进一个shell脚本中作为一组命令执行。这为创建那种需要把几个命令放
在一起来工作的工具提供了便利。

在Linux系统上,通常有好几种Linux shell可用。不同的shell有不同的特性,有些更利于创建
脚本,有些则更利于管理进程。所有Linux发行版默认的shell都是bash shell。bash shell由GNU项
目开发,被当作标准Unix shell——Bourne shell(以创建者的名字命名)的替代品。bash shell的名
称就是针对Bourne shell的拼写所玩的一个文字游戏,称为Bourne again shell。

除了bash shell,本书还将介绍其他几种常见的shell。表1-2列出了Linux中常见的几种不同
shell。

表1-2 Linux shell
文件系统 描 述
ash 一种运行在内存受限环境中简单的轻量级shell,但与bash shell完全兼容
korn 一种与Bourne shell兼容的编程shell,但支持如关联数组和浮点运算等一些高级的编程特性
tcsh 一种将C语言中的一些元素引入到shell脚本中的shell
zsh 一种结合了bash、tcsh和korn的特性,同时提供高级编程特性、共享历史文件和主题化提示符的高级shell

大多数Linux发行版包含多个shell,但它们通常会采用其中一个作为默认shell。如果你的Linux
发行版包含多个shell,就请尽情尝试不同的shell,看看哪个能满足你的需要。