预计阅读本页时间:-
10.2 Linux概述
为了那些对Linux不熟悉的用户的利益,在这一节我们将对Linux本身以及如何使用Linux进行简单的介绍。几乎本节介绍的所有内容同样适用于所有与UNIX相差不多的UNIX衍生系统。虽然Linux有多个图形界面,但在这里我们关注的是在X系统的shell窗口中工作的程序员眼中的Linux界面。在随后的几节中,我们将关注系统调用以及它们是如何在内核中工作的。
10.2.1 Linux的设计目标
一直以来,UNIX都被设计成一种能够同时处理多进程和多用户的交互式系统。它是由程序员设计的,也是给程序员使用的,而使用它的用户大多都比较有经验并且经常参与(通常较为复杂的)软件开发项目。在很多情况下,通常是大量的程序员通过积极的合作来开发一个单一的系统,因此UNIX有广泛的工具来支持在可控制的条件下的多人合作和信息共享。一组有经验的程序员共同开发一个复杂软件的模式显然和一个初学者独立地使用一个文档编辑器的个人计算机模式有显著区别,而这种区别在UNIX系统中自始至终都有所反映。Linux系统自然而然地继承了这些设计目标,尽管它的第一个版本是面向个人电脑的。
好的程序员追求什么样的系统?首先,大多数程序员喜欢让系统尽量简单,优雅,并且具有一致性。比如,从最底层的角度来讲,一个文件应该只是一个字节集合。为了实现顺序存取、随机存取、按键存取、远程存取等而设计不同类型的文件(像大型机一样)只会碍事。类似地,如果命令
广告:个人专属 VPN,独立 IP,无限流量,多机房切换,还可以屏蔽广告和恶意软件,每月最低仅 5 美元
ls A*
的意思是列举出所有以“A”打头的文件,那么命令
rm A*
的意思就应该是删除所有以“A”打头的文件而不是删除文件名是“A*”的那个文件。这个特性有时被称为最小惊讶原理。
有经验的程序员通常还希望系统具有较强的功能性和灵活性。这意味着一个系统应该具有较小的一组基本元素,而这些元素可有多种多样的组合方式来满足各种应用需要。设计Linux的一个基本指导方针就是每个程序应该只做一件事并且把它做好。因此,编译器不会产生列表,因为有其他的程序可以更好地实现这个功能。
最后,大多数程序员非常反感没用的冗余。如果cp可以胜任,那么为什么还需要copy?为了从文件f中提取所有包含字符串“ard”的行,Linux程序员输入
grep ard f
另外一种方法是让程序员先选择grep程序(不带参数),然后让grep程序自己宣布说“你好,我是grep,我在文件中寻找模式。请输入你要寻找的模式。”在输入一个模式之后,grep程序要求输入一个文件名。然后它再提问是否还有别的文件。最后,它总结需要执行的任务并且询问是否正确。尽管这样的用户界面可能适合初学者,但它会把有经验的程序员逼疯。他们想要的是一个佣人,不是一个保姆。