文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>GNU 文本实用程序简介----UNIX哲学(1)

GNU 文本实用程序简介----UNIX哲学(1)

时间:2005-02-04  来源:litie123

这是从寂寞烈火的blog转来的。

组合使用小型实用程序来完成大型任务

在诸如 Linux、FreeBSD、Mac OS X、Solaris、AIX 等受 UNIX 启发的操作系统中,开发环境甚至 shell 和工作环境的背后都存在一种共同的哲学。 这种哲学的要旨就是使用小型实用程序来 完满地(没有其他负面影响)完成每个小型任务,然后组合使用这些实用程序来执行复合任务。GNU 项目所产生的大多数产品都支持这种哲学――实际上特定的 GNU 实现已经移植到许多平台上,有些平台甚至传统上未被看作是 UNIX 类的。然而,Linux 内核必定是更有点单一性的软件――虽然如此,但是其内核模块、文件系统、视频驱动程序等都是相当组件化的。

文件和流

如果这种 UNIX 哲学 具有倡导最低限度的模块化组件和协作的道义论的一面的话,它还具有本体论的一面:"一切皆文件"。抽象地说,文件 只是支持一些操作的对象:首先是读取和写入字节,但是也有诸如指出其当前位置和弄清何时到达文件结尾这样的操作。UNIX 权限模型也是围绕文件的概念来建立的。

具体地说,文件可以是可记录介质上的一个具体区域(并具有由文件系统提供的关于其名称、大小、在磁盘上的位置等的标记)。但是一个文件也可以是 /dev/ 层次结构中的一个虚拟设备,或者通过 TCP/IP 或通过诸如 NFS 这样的高级协议传来远程流。重要的是,特殊文件 STDIN、STDOUT 和 STDERR 可用于读取或写到用户控制台,以及用于在实用程序之间传递数据。这些特殊文件可通过虚拟文件名称来表示,并具有特殊的语法:

STDIN 是/dev/stdin 和/或 /dev/fd/0 STDOUT 是 /dev/stdout 和/或 /dev/fd/1 STDERR 是 /dev/stderr 和/或 /dev/fd/2

UNIX 的文件本体论的优点在于,这里讨论的大多数实用程序都将统一而中立地处理各种数据源,而不管实际位于字节传输之下的存储或传输机制是什么。

重定向和管道

UNIX/Linux 实用程序的通常组合方式是使用管道和重定向。许多实用程序或者自动地或者可选地从 STDIN 接受输入,并将它们的输出发送到 STDOUT(特殊的消息则发送到 STDERR)。管道将一个实用程序的 STDOUT 发送到另一个实用程序的 STDIN(或者发送到对同一个实用程序的新的调用)。重定向或者将一个文件的内容作为 STDIN 来读入,或者将 STDOUT 和/或 STDERR 输出发送到一个指定的文件。重定向通常用于保存数据以供以后处理或重复处理(对于后者,实用程序将使用 STDIN 重定向)。

在几乎所有的 shell 中,管道都使用竖线 | 符号来执行,而重定向都使用大于号和小于号来执行:> 和 ,或使用 &> 来同时将 STDOUT 和 STDERR 重定向到同一个地方。您还可以使用双大于号(>>)来将输出附加到一个现有文件的末尾。例如:

源码:

$ foo fname | bar - > myout 2> myerr

这里,实用程序 foo 可能处理名为 fname 的文件,并输出到 STDOUT。实用程序 bar 使用了一种普遍用法:当输出取自 STDIN 而不是取自指定的文件时指定一个短划线(其他某些实用程序仅接受 STDIN)。来自 bar 的 STDOUT 保存在 myout 中,它的 STDERR 则保存在 myerr 中。

相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载