《UNIX编程环境》试题 参考答案_第1页
《UNIX编程环境》试题 参考答案_第2页
《UNIX编程环境》试题 参考答案_第3页
《UNIX编程环境》试题 参考答案_第4页
《UNIX编程环境》试题 参考答案_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

北京邮电大学2008—2009学年第一学期

《UNIX编程环境》期末考试试题

参考答案

一.(共20分,每题2分)简述下列常用UNIX命令完成什么功能。

1.

2.

3.

4.

5.

ls

wc

vi

grep

awk

6.tar

7.find

8.od

9.diff

10.chmod

答:1.ls文件列表。列出目录中的文件和子目录。

2.wc字计数功能。统计文件中的字符数,单词数和行数。

3.vi文本编辑。UNIX中常用的字符界面的全屏幕文本编辑器。

4.grep模式查找。用于按正则表达式的语法在文件中查找含有某个字符串

模式的行。

5.awk一种简单的文本处理语言。用于对文本文件进行过滤处理的一个应

用程序,可以编写简单的程序语句,从文件中筛选出符合某个规定"条件"

的文本行,然后执行一些"操作"

(比如打印某几列内容等等)

6.tar磁带归档命令。命令原用于将一批文件或目录树与磁带之间进行交换

(导入导出)现常用于将一个目录树打包成一个文件或者从打包文件还原目

录树并兼有数据压缩/解压缩功能,用于磁盘文件的备份与转运。

7.find目录遍历功能。命令遍历指定的目录树,在目录树中检索出满足"条

件"的文件,然后执行某一特定的"动作""动作"可以是一个外部可执行

命令。

8.od列出文件内容,可以按照8进制或16进制列出一个文件的各个字节

的内容,一般常用于观察和逐字节分析非文本文件内容。

9.diff列出文本文件之间的不同。常用于当一个源程序或者文本文档文件修

改后与之前的版本文件比较,发现哪些地方进行了修改。

10.chmod主要用于修改文件或目录的访问权限。

二.共30分,每题2分)下列说法是否正确,简要阐述理由。注

意:理由陈述不正确不得分。

1.

某Linux需要增加运行一个网络服务应用程序,该程序的运行约占用

50MB内存。使用free命令的输出结果如下,从中可以看出:空闲内存

仅有15380KB,也就是约15MB内存。因此,可以断定目前计算机的硬

件配置内存512MB已经非常紧张,所以必须加大内存容量后再提供这

一网络服务,否则会由于虚拟内存管理程序在磁盘与物理内存之间的频

繁调度导致颠簸从而严重影响系统效率。

total

Mem:

-/+

Swap:

506152

buffers/cache:

2048276

used

490772

295740

856

free

15380

210412

2047420

shared

0

buffers

62032

cached

133000

答:错误。根据第一行列出的信息,内存总数506MB,已使用

490MB,空闲15MB。Linux的磁盘文件管理系统为提高效率利用系统

暂时不用的内存缓冲磁盘信息,当前有62MB的buffer和133M的

cache,这些内存可以释放后供其他程序所利用。在第二行列出了不计

buffers/cache,当前系统用掉了295MB,有210MB空闲。所以,本例

中仅需要50MB内存,远远低于210MB的实际供应量,所以不需要增

加物理内存。

2.

目录ppp中有文件chap.c,使用命令cpppp/chap.c就可以将文件

拷贝到当前目录。

答:错误。按照cp的工作方式,该命令语法不正确,把文件拷贝

到当前目录,正确的用法是:

cpppp/chap.c.

最后面的圆点指的是当前目录。

3.

UNIX文件权限设计为简单的三级控制,

用户liu使用命令catdata.txt

列出用户sun的文本文件data.txt,那么,他要么能读出文件的全部内

容,要么1个字符也读不出来。

答:正确。尽管UNIX有SUID权限,但cat命令是个公用的命令,

对它赋以SUID权限会影响系统中的信息安全,所以,系统中cat命令

要么能读出文件的全部内容,要么1个字符也读不出来,这是简单三级

权限的基本特点。

4.

用户sun的某个文件的权限设置为"只读"

,也就是说任何人不许写,

那么,除了超级用户root外,任何用户无法修改和删除这个文件。

答:错误。上述权限设置文件为只读文件,使得普通用户不可以修

改文件的内容,因为没有写权限。但是,用户能否删除文件,是由该文

件所处的目录的权限决定的,如果该文件所处的目录允许写,就可以删

除文件。

5.

对于目录来说,x权限没什么作用,因为一个目录不能被"执行"所以,

可以取消也可以保留UNIX系统中的所有目录的x权限。

答:错误。对目录来说x权限不是"执行"的意义,它意味着在分

析路径名过程中是否允许检索该目录中的文件或子目录,所以目录的x

权限很重要,不能取消;一旦取消会导致目录下的文件不能被访问。

6.

Linux中命令killallabc会中止系统中所有以程序abc启动的进程,那

么,命令killall*会中止系统中的当前用户启动的所有进程。

答:错误。按照shell的工作方式,星号会被替换为当前目录下的

所有文件和目录名。因此,killall*不会中止系统中的所有进程,而是仅

仅中止当前目录下的程序启动的所有进程,以及与当前目录下的某个目

录或文件重名的其他程序启动的进程。

7.

如果父进程不对僵尸进程进行处理,那么,僵尸进程过多,即使系统有

足够内存,也可能导致系统无法正常工作。

答:正确。进程执行的结束阶段产生僵尸进程,原进程所占有的数

据段、指令段、堆栈段内存都已经释放,系统仅为僵尸进程保存一个进

程表表项。但是,僵尸进程过多会因为占用光内核中全部的进程表表项,

导致无法启动新的进程。

8.

Linux提供了gzip等文件压缩程序,但是这样的程序对JPG或MP3等

多媒体文件进行压缩不能显著减少文件占用的字节数。

答:正确。gzip等压缩算法属于"无损"数据压缩,对有一定规律

的普通文本文件,数据库文件等压缩效率很高,JPG和MP3等多媒体

文件本身是经过"有损"压缩算法进行压缩优化的,使用gzip等压缩算

法不能显著减少文件占用的字节数。

9.

用户liu执行自编的应用程序fft对数据进行快速傅里叶变换,程序的

计算量很大,得到运行结果需几十分钟。使用ps命令发现用户liang的

三个进程在这期间一直在系统中。如果liu协商liang,使得liang的进程

在这段时间不启动,那么,liu重新运行程序,运行时间一定会大大缩短。

答:错误。liang的三个进程可能在大部分时间段内处于"阻塞"

状态不占用CPU,所以即使liang的进程不启动,liu重新运行程序,运

行时间也不一定会大大缩短,甚至有可能没有任何可察觉的改善。

10.UNIX中的信号机制就如同软件中断一样,对SIGINT信号来说,用户程

序可以设置一个处理程序,信号发生时,就如同执行中断服务程序一样,

这个处理程序得到执行,然后程序恢复到信号发生前的状态继续运行。

答:错误。当信号中断的进程正处于"用户态"执行时,其表现如

同执行中断服务程序一样,这个处理程序得到执行,然后程序恢复到信

号发生前的状态继续运。但是,当信号中断的进程正处于阻塞态的系统

调用时,系统调用将被打断返回-1而不是恢复阻塞状态继续进行。

11.UNIX操作系统被设计得非常健壮,所以由于应用程序中在运行过程中

由于数组访问越界等程序错误不会导致系统崩溃而重新启动。

答:正确。UNIX系统采用虚拟内存保护技术,应用程序处于"用

户态"运行,由于数组访问越界等程序错误,只会导致当前进程中止,

不会导致系统其它进程和操作系统内核的崩溃。导致内核崩溃而重新启

动的bug应当是操作系统中处于"核心态"运行的系统代码中的bug。

12.fork后得到两个几乎完全相同的进程,但是对内存的占用不见得会成倍

增加。

答:正确。尽管fork后,从逻辑上可以得到两个几乎完全相同的

进程,父子进程有独立的数据段、堆栈段和指令段,但是,操作系统可

以通过使用copy-on-write技术等方式,使得父子进程共享同一段物理内

存,除了代码段可以共享之外,也可以共享数据段和堆栈段,所以,对

内存的占用不见得会成倍增加。

13.UDP没有提供任何可靠性保障,所以,使用socket编程收到的UDP报

文很可能存在传输误码,比如:其中的几个比特会由于噪音而被翻转。

答:错误。UDP报文很可能丢失或者乱序,但是由于数据链路层

的校验功能,当出现几个比特因噪音而被翻转的误码时,这样的数据被

数据链路层所丢弃,所以UDP报文不需要考虑传输误码,一个典型例

子是tftp协议。

14.UNIX的系统调用执行成功将返回一个非负数的整数值,程序用socket

机制使用系统调用ret=write(sock,buf,1000);通过TCP向远端主机

发送1000字节数据,ret的返回值为1000,由于TCP提供了可靠的传

输服务,所以可以断定这1000字节数据已经成功地传输到了接收端。

答:错误。这里write成功返回,也就是系统调用成功返回,只能

意味着待发送的数据已经被拷贝到了TCP的发送缓冲区队列,在实际发

送操作执行之前write就返回。如果网络设备故障,无法通信,尽管先

前的write"成功"返回,也无法保证随后把这1000字节数据送达对方。

15.用socket机制使用系统调用ret=read(sock,buf,1000);从对方TCP

接收数据,如果ret返回值为0,说明当前TCP的接收缓冲区为空,暂

时没有到达的数据。

答:错误。这里read返回0说明对方的TCP关闭了连接。如果当

前TCP的接收缓冲区为空,暂时没有到达的数据,unix会让执行read

的进程进入"阻塞"状态等待数据,而不是返回0。

三.简答题(共35分,每题5分)

1.

Windows和UNIX的文本文件格式有什么区别?

答:Windows存储的文本文件,每行的行尾有两个字节"回车"

和"换行"UNIX文本文件行尾仅保留一个字节"换行"

2.

尽管不允许对目录执行硬连接,但发现目录的link数却不为1,而且常

常不同的目录的link数不同。为什么?

答:因为在创建子目录时,系统自动创建的.文件和..文件是通过硬

连接实现的,所以尽管不允许对目录执行硬连接,目录的link数不为1,

一般来说目录的硬连接数等于直属子目录数加2:

每个直属子目录中有..

文件,当前目录中的.文件;上级目录中的目录名。他们都指向同一个i

节点。

3.

用户sun使用低速的网络从另台Linux中下载了一个软件包共300MB,

花费了几个小时的时间,安装后运行不正常。sun检查文件的大小完全

相同,sun怀疑下载到的文件可能由于病毒等原因被篡改了内容。如何

用简便的方法验证本地和远端的两个文件的内容是否完全相同?

答:用md5sum命令计算本地文件的16字节"消息摘要"

,同样

在远端也计算16字节"消息摘要"

,仅仅传输16字节很容易,比较这

16字节"消息摘要"是否相同,就可以断定本地和远端的两个文件的内

容是否完全相同。

4.

"策略和机制相分离"的方法,在UNIX系统的很多地方都得到了应用,

这样做有什么好处?在UNIX中,

哪些问题的处理中采取了这样的方式?

答:这样做使得系统的实现变得很简单,但是却带来了更大的灵活

性,所需要的功能有都能够实现。例如:

使用管道和重定向方式组合多个命令完成某些复杂的功能;SUID

权限;B-Shell中的四则运算,条件判断。

5.

在Windows下输入命令名,系统会首先自动检索当前目录下是否有这个

可执行文件,索失败后还会逐个检查PATH环境变量列出的各个目录。

UNIX不自动检索当前目录,而且环境变量PATH中一般不含当前目

录./,为什么?

答:这样是出于系统安全的考虑。设想一个恶意用户设计了一个名

为ls(故意使用这个名字)的可执行文件放于/tmp目录下,其功能是

删除/etc下的所有文件。该用户执行这一命令因权限不够不能得逞,但

是root用户进入了/tmp目录,输入了ls命令后被当前目录下的ls所

重载,从而达到了破坏系统的目的。

6.

在C语言程序中longjmp调用和goto语句有什么区别?

答:1)范围不同:goto仅允许在子程序内跳转,longjmp可以

在全局范围内跳转;2)语义不同:goto仅仅是程序执行流程的跳转,

而longjmp实际上是恢复某个事先记录下来的堆栈现场,然后从那个

地方开始重新执行。

7.

下列C语言程序abc.c从键盘输入一个数据,打印它的平方根,编译后

生成可执行文件abc。用户输入命令./abc后将启动一个进程。

#include<stdio.h>

#include<math.h>

floatresult;

intmain(void)

{

floatx;

result=sqrt(x);

}

(1)启动的这个新进程的系统属性中进程的进程主,当前工作目录,

输入输出终端,umask值是怎样确定的?上述源程序中,有哪些变量

被存放在数据段?有哪些变量被存放在堆栈段?

(2)在PC机Linux上运行该程序,从启动到用户从键盘输入数据

2334.4981,到运行结束共花费了5秒钟时间。在进程的生命周期内,

大约有多少时间处于运行状态,多少时间处于阻塞状态?程序中的哪

条语句导致进程进入阻塞状态?阻塞状态在什么时机被解除?

答:(1)新进程的系统属性中进程的进程主,当前工作目录,输

入输出终端,umask值等,都是从父进程继承来的。在本题中,就

是从shell进程继承来的。

上述源程序中相关的数据有5个:两个变量result和x;三个常

量字符串

都被分配在数据段。

。这5个量中,只

有变量x是在函数体内定义的局部变量,所以被分配在堆栈段,其余

(2)运行该程序,从启动到用户从键盘输入数据2334.4981,再

到运行结束共花费了5秒钟时间。在进程的生命周期内,由于该程序

的计算量非常小,所以按现今流行PC的计算能力,几乎100%的时

间进程处于阻塞状态,处于运行状态的时间非常非常短。程序中库函

数scanf语句会调用系统调用read导致进程进入阻塞状态,用户在

终端上把数据2334.4981输入完毕,

按下回车之后阻塞状态才解除,

执行scanf之后的语句。

四.编程题(共15分,每题5分)

1.

用户通过ftp命令从远端主机下载一个约300MB文件sun.img需要

花费较长的时间。编写一个B-shell脚本程序,在另外一个终端上运行,

每隔20秒打印最近20秒内的平均下载速度,直到用户强行中止程序运

行。打印的数值单位为每秒收到的比特数,以便于与信道速率bps对比。

书写要求:由于shell脚本程序中空格的地位特殊,请显式地标出你程序

中的空格(提示:命令wc-c<sun.img可以打印出文件sun.img

的当前字节数)

解:

n0=0

whiletrue

do

sleep20

n=`wc-c<sun.img`

n0=n

done

2.

编写一个完整的C语言程序arg.c,逐行打印出所有的命令行选项。

解:

#include<stdio.h>

intmain(intargc,char**argv)

{

inti;

for(i=0;i<argc;i+

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论