UNIX编程环境(txt+pdf+epub+mobi电子书下载)


发布时间:2020-06-17 19:00:34

点击下载

作者:[美]Brian W. Kernighan Rob Pike著

出版社:信息技术第一出版分社

格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT

UNIX编程环境

UNIX编程环境试读:

第1章 初学UNIX

什么是 UNIX?狭义地看,它是一个分时操作系统内核,即一个控制计算机的资源并将其分配给用户的程序。它让用户运行其程序,并控制与机器连接的外围设备(硬盘、终端、打印机等),提供一个文件系统用以管理诸如程序、数据及文档等长期存储的信息。

广义地看,UNIX 通常不仅包含内核,还包括一些基本程序,如编译器、编辑器、命令语言、用以复制和显示文件的程序等。

从更广的角度来看,UNIX可以包括由用户开发的、运行于用户的UNIX操作系统上的程序,如文档处理工具、统计分析程序以及图像软件包等。

这些有关UNIX的解释究竟正确与否,取决于读者所面对的系统的应用级别。本书其他部分提到UNIX时,会在上下文指示其内在含义。

UNIX系统有时看起来比实际上更复杂——对于新用户而言,很难充分利用可用的资源。所幸它并不难入门——只要了解很少的几个程序,就可以开始工作了。本章会帮助读者尽快地学会使用UNIX系统。本章是概述,不是手册;后续的章节将详细介绍各种内容。本章涉及以下主要内容。

基本操作——登录和退出、简单的命令、纠正输入错误、邮件及终端间通信。

日常使用——文件及文件系统、文件显示、目录以及常用命令。

命令解释器或shell——文件名缩写、输入输出重定向、管道、删字符及消行符设置、命令查询路径定义。

如果你用过UNIX,那么对本章的多数内容应该是熟悉的,可以直接跳至第2章。

即使阅读本章,也需要一份《UNIX程序员手册》。对作者而言,告诉你翻阅手册中的某些内容,比在书中重复这些内容更为方便。本书不是为了替代手册,而是为了教会你充分利用手册中的命令。另外,本书中所叙述的内容可能同你的系统上的内容有所差别。在手册中的开始处有索引,可以协助找出解决某一问题的程序,应学会如何使用它。

最后,有一句忠告:不要害怕实践。如果你是初学者,请放心,不会出现伤害自身或其他用户的事。实践出真知。本章篇幅较长,最好的方法是一次读几页,并在学习过程中不断实践。1.1 起步1.1.1 有关终端和输入的一些预备知识

为了避免繁冗解释有关计算机使用的所有事项,作者假定你已经熟悉计算机终端,并知道使用方法。如果下面的叙述使你迷惑不解,请询问身边的专家们。

UNIX 系统是全双工的:你在键盘上敲入的字符送至系统,然后系统回送给终端并在屏幕上显示出来。通常echo进程把字符直接复制到屏幕上,这样就可以看到输入的是什么。但是有的时侯,比如在键入密码时,echo关闭,字符就不会在屏幕上显示出来。

多数键盘字符是普通字符,没有什么特殊的含义。但有些字符是通知计算机怎样解释所键入的内容的。到目前为止,这些键中最重要的键是回车键(RETURN)。回车键说明一行输入的结束,系统做出反应把屏幕上的光标移到下一行的起始处。必须按下回车键后,系统才会对键入的字符做出解释。

回车键是一种控制字符,即不可见的字符,它控制着终端上某些特殊的输入输出。在任一台终端上,回车键都有自己的按键,但是其他大多数控制字符并非如此。相反,它们必须通过按住Ctrl键(有时称为CONTROL键、CNTL键或CTL键)的同时按下另一个键(通常是一个字母)来输入。例如,回车键可以通过按下回车键输入,或者按住CONTROL键同时按下m键。所以回车键又可称为CONTROL+m键,也可以写成Ctrl+m。其他的控制字符有:Ctrl+d,表示程序输入到此结束;Ctrl+g,终端上的振铃鸣响;Ctrl+h,通常称为(退格键)Backspace,它可以用于纠正错误的输入;还有Ctrl+i,通常称为Tab,它使光标往前跳一个Tab间隔,这一点非常类似于普通的打字机。在UNIX系统中,Tab间隔为8个空格字符。在多数终端上Backspace和Tab都有各自的键。

另外两个键也具有特殊的含义:一个是Delete,有时又称为Rubout或某些其他缩写;另一个是Break,有时又称为Interrupt。在多数UNIX系统中,按Delete键可以立即中止程序,而不等待程序完成。在某些系统中,Ctrl+c提供这项功能。而在有些系统中,根据终端的连接方式,Break与Delete或Ctrl+c的功能一样。1.1.2 与UNIX会话

让我们从与UNIX系统的会话开始。在本书的例子中,你键入的内容用等宽斜体字符表示,计算机回应的内容用等宽正体字符表示,说明性的文字用楷体表示。

建立连接:必要时拨号或打开电源。

系统应该显示:

上述内容就是一段会话的全部,当然,有时人们也做一些其他的工作。本节的下面部分将讨论这段会话,顺便分析一些其他有用的程序段。1.1.3 登录

登录必须有登录名和口令,这些可以从系统管理员处得到。UNIX系统可以适用于多种类型的终端,但它更倾向于有小写字体的设备,因为 UNIX 区分大小写!如果你的终端只有大写字符(类似某些可视终端和便携式终端),那么使用起来会很困难,应该另外换一台终端。

要确认设备的开关设置为大小写、全双工,以及身边专家们建议的其他设置,诸如传输速率,即波特率。要为终端建立连接,这也许要拨通电话,或者只是拨一下开关。不论哪种情形,系统都会出现:

如果出现乱码,则可能是速率不对,请检查速率和其他设置。如果仍不成功,按几次 Break键或Interrupt键。如果仍不出现登录消息,那就只好请人帮忙了。

出现 login:登录提示后,用小写字母键入登录名,然后按回车键。如果要求密码,系统会有提示,而且屏幕不会显示所输入的密码。

登录一旦成功,系统便会显示一个提示符,通常是一个字符,表示系统已经准备好接收用户的命令。提示符多半是美元符号($)或百分比符号(%),但是你可以将其改为任意的符号,这一点以后再讨论。提示符实际是由一个名为命令解释器或称为shell的程序显示出来的,它是系统对用户的主界面。

在提示符之前可能会有日期消息,或者有关于电子邮件的通知。有时系统会询问你正在使用的终端类型,这有助于系统利用终端所具有的特性。1.1.4 键入命令

一旦有了提示符,就可以键入命令了,命令就是请系统完成某项工作的要求。我们使用“程序”这一词作为命令的代名词。当看到提示符(假设是$)时,键入date并按下回车键。系统应该回应日期和时间,然后显示下一个提示符,所以整个处理过程在终端上看起来如下所示:

不要忘了回车键,也不要键入$。如果系统没有反应,可以按回车键,应该会有响应。以后不再按回车键,但是在每一行的结尾都需要它。

下一个要尝试的命令是who,它表明当前有哪些人在登录上机:

首列是用户名。第二列是连接的终端的名称(tty即teletype,终端的一个学名)。其余信息是登录的日期和时间。读者还可试验:

如果键入出错,输入了一条不存在的命令,会被告知没有发现该命令:

当然,如果你不恰当地键入了一条实际存在的命令,它会运行,也许会出现奇怪的结果。1.1.5 异常的终端行为

有时终端会出现一些奇怪的行为,例如,一个字符也许会显示两次,或者回车键可能不把光标置到下一行的首列。通常可以把终端关闭再开启,或者退出登录然后再次登录以消除这些现象。也可以阅读手册第1节中有关stty(set terminal options)命令的叙述。如果终端没有Tab键,要想巧妙地处理该键,可键入命令

接着系统会把tabs转换成正确数量的空格。如果终端的Tab间隔可以设置,命令tabs会正确地为用户设置跳格位置。这时,需要键入

这样即可使系统正确工作——请参阅手册中有关tabs命令的说明。1.1.6 键入错误

如果出现键入错误,并且在按回车键前发现了它,可有两个方法纠正:一次删去一个字符或者删行后重新键入。

如果键入消行符,其默认值是@,会取消整行,就好像没有键入该行一样,从而可以开始新的一行:

字符#删除所键入的最末一个字符,每个#字符删去一个字符,一直到行的起始处(但不会超越它)。如果键入出错太多,可以进行如下纠正:

专用删字符和消行符是与系统密切相关的。在很多系统中(包括作者使用的系统),删字符都已改为 Backspace 键,这在可视终端上很成功。你可以键入如下内容迅速检查所使用的系统是哪一种情况。(我们把Backspace键印刷为←,这样就可以看到它。)消行符的另一种常见形式是Ctrl+u。

在本节的其余部分,将使用字符#作为删字符,因为它较为清晰可见,如果系统不一致,请做好思想准备。在1.4.5节将介绍如何设置你所喜欢的删字符和消行符。

假如必须把删字符或者消行符作为文本的一部分输入,该怎么办呢?在#或@之前加入反斜杠(\),它们就失去了特有的含义。所以要输入#或@,只需键入\#或\@。系统会先把终端光标移在@之后的下一行,即使它前面有反斜杠。不过不用担心,该@符号已被记录下来了。

反斜杠有时被称为转义字符,它主要用于指明后续字符是特殊字符。要消除反斜杠,需要键入两个删除字符,即\##。知道这是为什么吗?

键入的字符在到达最终目的地之前,要经过一系列程序的检查和解释,至于如何解释它们,则完全取决于它们如何结束以及如何到达终点。键入的每一字符立即在终端显示,除非回应功能被关闭(而这是极少见的)。在按回车键之前,字符还未被内核保留,所以键入的错误可以用删字符或消行符纠正。当删字符或消行符前端有反斜杠时,内核会去掉反斜杠,并且不加解释地保留后续字符。

按下回车键之后,保留的字符被送到从终端读取字符的程序。程序也许会以特殊的方式解释字符,例如,假若字符的前面有反斜杠,shell就关闭特定的字符解释器。这在第3章会进一步探讨。总之应该认识到,内核处理删字符或消行符,而反斜杠只有在删字符或消行符之前,才会被内核处理;其他剩下的字符都可以被别的程序解释。

练习1-1 说明下面命令的结果:

练习1-2 多数shell(尽管第7版shell并非如此)把#解释为注释,并忽略从#开始至行尾的全部文字。按照这一点,说明下列的文本,假设删字符也是#。1.1.7 继续键入

在键入的同时,内核读取所键入的内容,即使系统在忙于其他事务时也是如此,所以你可以用最快的速度键入想输入的内容,即使有命令正在显示也没有关系。如果此时系统正在输出,则输入字符会同输出字符混合在一起,但它们会另行存储并以正确的次序解释。你可以一条接一条地输入命令,而无需等待它们完成,甚至不需要等待它们开始。1.1.8 中止程序

通过按Delete键,可以中止大多数命令。在某些终端上,Break键也起作用。当然这是与系统相关的。在少数程序中,如文本编辑器,Delete 键中止了程序的执行过程但仍停留在该程序中。关闭终端或挂断电话会中止大多数的程序。

如果只打算暂停输出,如在要避免某些关键信息从屏幕上消失时,可以键入Ctrl+s,输出会立即停下来,程序会被挂起直到再次启动。要继续输出,可键入Ctrl+q。1.1.9 注销

注销的正确方法是按下Ctrl+d,而不用输入命令。这样就通知shell,输入中止了(至于它到底是如何起作用,下一章再作说明)。实际上,可关闭终端或挂断电话来注销,但这样做是否真正注销了,取决于不同的系统。1.1.10 邮件

系统提供一套邮件系统用于与其他用户通信,所以有时在登录时,在第一个提示符之前会看到下列消息:

要阅读邮件,请键入

邮件消息会显示出来,一次一条消息,最新的消息首先出现。在每一项消息后面,邮件等待用户的行动指示。一般有两种基本响应方式:d,删除该条消息;回车键,不删除该条消息(消息会保留,下次可以阅读消息)。其他处理包括:p,显示消息;s filename(文件名),以你起的名称保存消息;q,从mail中退出。(假如不知道文件这个概念,简单地把它看成一个用选定的名字保存信息的地方,以备今后再使用。文件是 1.2 节的主题,而且本书很多部分都在讨论它。)

同已经介绍的程序相比,mail有各种不同的版本。请阅读手册以了解细节。

给他人发邮件很简单。假设要给登录名为nico的人发邮件。最方便的方法是这样的:

在此键入邮件文本,可键入任意长度的文本,输入完毕后按

Ctrl+d指明信件的结尾,通知mail没有输入了。如果在编辑信件过程中改变了主意,可以按Delete键,而不须使用Ctrl+d。写到一半的信件将存放在名为dead.letter的文件中而不是邮出。

作为练习,给自己发封邮件,然后键入mail读取它(它不像听起来那么奇怪——这是一个简便的提醒机制)。

发邮件还有其他一些方法——发出一封事先准备好的信件,或一次给许多人同时发信,也可以发信给使用其他机器的人们。有关细节请参阅《UNIX程序员手册》第1节中的有关mail的叙述。今后我们将用标记mail(1)来表示手册中第一节中有关mail的叙述。本章讨论的所有命令都可以在第1节中找到。

系统还有日历服务(参见calendar(1)),如果你没有使用过,我们会在第4 章介绍如何设置它。1.1.11 用户间通信

如果你的UNIX系统是多用户的,某一天,屏幕上可能会出现类似如下的语句:

并伴随着一声蜂鸣声。Mary打算写信给你,但是除非采取明确的行动,否则不能写回信。若要回应,请键入

这样,就建立了一条双向通信途径。现在 Mary 在她的终端上键入的内容,会出现在你的终端上;反之也一样,尽管通信很慢,但毕竟不像是同月球通话。

如果你正在进行某项工作,那么必须进入可以键入命令的状态。通常,正在运行的程序必须中止,但是有些程序,诸如编辑器以及write命令本身,利用“!”命令可暂时切换到shell,请参阅附录A中的表A-2。

write命令没有规则,所以要有一个协议,以免你键入的内容同Mary键入的内容混到一起。通常的做法是,每一方以(o)结束,它表明“完毕”,打算退出的信号是(oo),其含义是“完毕并退出”。

要退出write也可以按下Delete键。注意,键入的错误不会在Mary的终端上出现。

如果要写信给某个未登录的人,或者收件人不想被打扰,系统会通知你。如果目标登录了,但是在一个间隔后没有回答,也许对方太忙或者不在终端旁,只要按 Ctrl+d 或 Delete键就可以退出。如果你不想被打扰,可利用mesg(1)。1.1.12 新闻

许多 UNIX 系统提供了一种新的服务,可使用户随时了解一些有趣无趣的事件。试试键入

UNIX 系统通过电话拨号连接,形成了一个很大的网络,有关 netnews 和 USENET,请询问身边的专家。1.1.13 手册《UNIX程序员手册》描述了大量读者需要了解的关于系统的信息。第1节介绍命令,包括本章讨论的内容。第2节讨论系统调用,这是本书第7章的主题,而第6节是关于游戏的内容。其余章节讨论C程序员使用的函数、文件格式,以及系统维护(这些章节的编号随着系统的不同而变化)。在开始使用手册时,不要忘记使用各种形式的手册索引。可以通过快速地翻阅手册索引,了解相关命令的内容。还有关于UNIX系统运行原理的介绍。

通常手册以在线形式存放,这样可以在终端上阅读。如果你不知道做法,又找不到专家协助,可以在终端上用命令man显示有关页面。下面例子是读取who命令的说明:

而下面例子则说明了man命令。1.1.14 计算机辅助教学

你的系统中也许有learn命令,这个命令提供了有关文件系统、基本命令、编辑器、文档准备,甚至包括C语言程序设计的计算机辅助教学。请试一下:

它会告诉你从哪儿开始,可以做什么。如果不行,可以再试一下teach。1.1.15 游戏

游戏往往不被正式承认,但熟悉计算机和终端的最好方式之一,就是玩游戏。UNIX 系统提供了适量的游戏,通常在本地机上就有。问问周围的人,或者查看手册的第6节。1.2 文件和常用命令

在UNIX系统中信息存储在文件中,它很像日常的办公室文件。每个文件有名字、内容、存放地点以及某些管理信息,诸如所有者以及文件大小等。文件可能是一封信,或者是人名及地址清单,或者是源程序,或者是供某个程序用的数据,甚至是程序的可执行形式以及其他的非文本类型材料。

UNIX 文件组织结构使你可以维护自己的文件而不会影响其他人的文件,并且也防止他人干涉你的文件。UNIX 系统有大量的程序可操作文件,但是现在,我们只介绍最频繁使用的那些。第2章是关于文件系统的具体讨论,其中介绍了许多与文件有关的其他命令。1.2.1 创建文件

如果想录入一篇文章、一封信或一个程序,那么怎样把这些信息存放在机器中呢?这类任务大多是用文本编辑器完成的,它是一个在计算机中保存和操作信息的程序。在每个UNIX系统中几乎都有一个屏幕编辑器,它利用现代终端的特点,显示你对文件所进行的编辑效果。两个最流行的文本编辑器是vi和emacs。在这里我们不介绍任何屏幕编辑器,其原因部分是由于篇幅所限,部分是由于不存在一个标准的文本编辑器。

不过,有一个名为 ed 的编辑器肯定在你的系统中存在。它不需要特定的终端功能,因此可以在任何终端上工作。它也构成了其他基本程序的基础(包括一些屏幕编辑器),所以这个程序是非常值得学习的。附录A中有关于这个程序的简要说明。

无论我们偏好哪个编辑器,都得熟练掌握以便能够创建文件。这里我们以ed为例进行讨论,这也可保证你能在自己的系统中完成这些例子,当然你可以使用自己最喜好的编辑器。

要用ed建立一个文件junk,可按如下操作进行:

命令 a(append)通知 ed 开始接收文本。“.”指明文本结束,但必须出现在一行的开始处。不要忘掉这个命令,否则任何其他 ed 命令都不会被识别——所键入的一切都会被认为是所添加的文本。

编辑命令w(write)存储所键入的信息。w junk是把内容存放在名为junk的文件中。文件名可以任意起(之所以选择junk这个词,是因为该文件不重要)。

w命令之后,ed显示键入到文件中的字符数。在w命令之前,不会有永久性的存储,所以如果退出系统下班回家,有关的信息不会存储到文件中去(如果在编辑时退出系统,所有的数据会存放在名为ed.hup的文件中,这样下一次可以继续使用)。如果正在编辑时系统崩溃(比如由于软件或硬件的故障而突然停机),该文件只存放最后一次用写命令时所保存的内容。而在 w 之后,信息就永久地保存了。以后可以键入如下命令再访问该文件:

当然,你可以编辑所键入的文本,如纠正拼写错误,修改用词,重新排列段落等。当这些都完成之后,可用q(quit)命令退出编辑器。1.2.2 列出文件

创建以下两个文件,junk和temp:

字符数从ed开始计数到每一行的结尾,结尾称为换行,系统用它来表示回车键。

ls命令列出文件的名称(并非内容):

这就是刚创建的那两个文件(当然也还会有其他人建立的其他文件)。文件名自动按字母顺序排列。

如同多数命令一样,ls有各种选项用以替代默认功能。在命令行中选项跟随着命令名,通常由“-”和一个代表其含义的字母构成。例如,ls -t 使文件按“时间”顺序排列,最后一次修改的文件,最先列出

-l给出了一个“长”的列表,为每个文件提供了更多信息:

total2 说明文件占据硬盘的数据块数量,一个数据块通常有 512 或 1024 个字符。字串-rw-r--r--说明读写权限。在本例中,所有者(你自己)可以读写,但其他人只能读。后面跟随的1是该文件的链

试读结束[说明:试读内容隐藏了图片]

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载