山东农业大学课程考试专用注:考试期间试卷不允许拆开。第1页共10页2014-2015学年第2学期《Linux操作系统》试题(卷)B课程代码BF002357考试方式闭卷考试时长100分钟姓名学号教学班号专业级班题号一二三四五六七八合计满分302050100得分阅卷人一、SHELL命令题(每题2分,共30分)写出下面命令的功能或根据功能写出shell命令1.suuser2.find/etc-name“*conf”result3.回到用户家目录4.复制根目录下的etc目录到用户家目录下5.apt-getinstallvim6.shutdown–rnow山东农业大学课程考试专用注:考试期间试卷不允许拆开。第2页共10页7.以长格式形式浏览当前目录下的所有文件,要求能看到隐藏文件8.将文件aa改名为bb9.echo$HOME10.find/home–name“hello”–atime-5–okrm{}\;11.强制删除目录myfolder12.如何查看系统中所有用户的信息?13.grep“include”./*14.touchfile15.ls|grep“pass”山东农业大学课程考试专用注:考试期间试卷不允许拆开。第3页共10页二、脚本编程题(共25分)1、VI编辑器下如何在编辑、命令、底行命令模式间切换?如何保存VI编辑的文件?(5分)2、下面的SHELL程序判断用户输入的用户名是否是系统中已有用户并给出输出提示,请填空补齐需要的代码。(6分)#!/bin/sh–#获得用户输入的用户名到变量user__________________________#查找账户文件中是否有该用户,注意user和user2这类用户名有相同部分的问题if__________________________________/etc/passwd;then___________$userisexist!_____运行该脚本:____________________________________(设脚本文件名为checuser.sh)3、解释shell编程时$#,$*,$?的作用是什么。(6分)山东农业大学课程考试专用注:考试期间试卷不允许拆开。第4页共10页4、作用用命令find./code–name“*.c”–execgrep“includesignal.h”{}\;查找code目录中的c代码文件中哪个文件里引用了signal.h,但是筛查出的结果只有文件内容输出,无法知道是哪个文件里的内容,请设计Shell脚本,使能够输出查询命中的文件的路径及名字。(8分)提示:ain*.c可以利用变量a和循环结构依次处理.c文件,可类似处理find查找到的文件结果三、问答题(共45分)1.lnpasswdpasswd_hln–spasswdpasswd_s说明两个命令的功能,并说明passwd_h和passwd_s文件类型是什么和链接数分别是多少?(5分)山东农业大学课程考试专用注:考试期间试卷不允许拆开。第5页共10页2、设在Linux系统中运行下面程序,程序运行总共产生多少个进程?分析并说明程序运行会有怎样的输出?(10分)main(){intn=0;If(fork()==0)n++;elsewait(NULL);printf(“processforkedis%d,nis%d\n”,getpid(),n);}3、试分析管道文件和普通数据文件有什么异同?(5分)山东农业大学课程考试专用注:考试期间试卷不允许拆开。第6页共10页4、说明管道实现进程通信的原理,说明用pipe函数和mkfifo函数建立的两种管道有什么不同?(9分)5、请说明什么是僵尸进程,什么是孤儿进程?分析如下代码中父子进程的执行顺序,子进程的PCB由谁来回收?(5分)main(){pid_tpid;pid=fork();if(pid0)printf(“forkerror!\n”);if(pid==0)sleep(2);if(pid0){exit(0);}}山东农业大学课程考试专用注:考试期间试卷不允许拆开。第7页共10页6、什么是系统调用函数?系统提供系统调用有什么作用?(5分)7、解释系统内核程序为什么不能被用户程序直接调用?(5分)山东农业大学课程考试专用注:考试期间试卷不允许拆开。第8页共10页2014-2015学年第2学期《Linux操作系统》试题(卷)B参考答案课程代码BF002357考试方式闭卷考试时长100分钟一、SHELL命令题(每题2分,共30分)1.suuser切换到user用户2.find/etc-name“*conf”result查找etc目录下名字末尾为conf的文件,将找到的结果输出到result文件3.回到用户家目录cd~4.复制根目录下的etc目录到用户家目录下cp–r/etc~5.apt-getinstallvim连网安装VIM编辑器6.shutdown–rnow重启系统7.以长格式形式浏览当前目录下的所有文件,要求能看到隐藏文件ls–al8.将文件aa改名为bbmvaabb9.echo$HOME输出环境变量HOME的内容10.find/home–name“hello”–atime-5–okrm{}\;查找home目录下文件名包含hello字串的五天内访问过的文件后删除11.强制删除目录myfolderrm–rfmyfolder12.如何查看系统中所有用户的信息?cat/etc/passwd13.grep“include”./*查找当前目录下所有文件中文件内容包含include字串的文件14.touchfile新建文件file15.ls|grep“pass”浏览当前目录下的内容,筛选是否有文件或目录名包含pass字串二、脚本编程题(共25分)1、(5分)默认进入命令模式,命令模式下按i,a,s,o等都可切换到编辑模式;编辑模式下通过esc切换到命令模式;命令模式下通过冒号按键切换到底行命令模式;写出命令模式或底山东农业大学课程考试专用注:考试期间试卷不允许拆开。第9页共10页行命令模式下任一种保存方法即可。2、填空补齐需要的代码。(6分)readuser#查找账户文件中是否有该用户,注意user和user2这类用户名有相同部分的问题ifgrep“^$user:“/etc/passwd;thenecho$userisexist!fi运行:bashchecuser.sh3、解释shell编程时$#,$*,$?的作用是什么。(6分)Shell预定义变量,脚本执行时获得用户输入的参数相关的信息,$#获得用户参数数量,$*获得用户输入的参数内容,$?则存放前一次命令的执行结果4、(8分)foriin`find./code–name“*.c”`doifgrep“includesignal.h”$ithenecho$ifidone三、问答题(共45分)1、lnpasswdpasswd_h给passwd文件建立一个硬链接名为passwd_h2分ln-spasswdpasswd_s给passwd文件建立一个软链接名为passwd_s2分passwd_h的文件类型为-(文件),链接数位1;passwd_s的文件类型为l(链接),链接数位22分2、程序运行总共产生2个进程(2分)孩子进程的空间中fork返回值才为0,所以只有孩子进程会通过分支判断条件,执行n++,孩子和父亲空间中各有自己的n变量,值分别为1、0.父子进程都会执行printf语句,输出自己的进程id,但是n的值输出不同。4分父亲由于执行wait语句会先阻塞等孩子执行完毕死亡后才被唤醒,所以父亲的输出语句会最后执行。4分3、试分析管道文件和普通数据文件有什么异同?(5分)都是抽象成文件的对象,可以被文件操作类的系统调用open、read、write等操作。1分不同是管道文件只支持字符流的读写,目的是实现通信,不能用lseek操作,而普通数据文件支持lseek操作。2分管道文件为了通信,其open,read,write过程有更复杂的同步处理。2分4、管道实际上是由系统提供一个缓冲区并提供给用户读写端,用户通过系统调用对读写端操作实现数据通信。。。。。。2分pipe函数建立的是内存中的临时缓冲区,有亲缘关系的进程才能在克隆过程中获知缓冲区的地址。3分mkfifo函数建立的管道是有文件系统中的文件名的,打开文件时开辟出缓冲区,通信山东农业大学课程考试专用注:考试期间试卷不允许拆开。第10页共10页的进程即使没有亲缘关系,也可以通过打开相同的文件,从而找到内存中的用于管道通信的内存缓存区。4分5、(5分)进程死亡时会进入僵死状态,此时pcb信息还保留但进程其他资源已被回收。如果某个进程的父进程先于它死亡,则它将变成没有父亲的孤儿进程。孤儿进程在死亡时如果没有父亲进行剩余内存回收会导致系统内存浪费,linux系统一般会由init祖先进程做其父亲。代码中孩子进程会调用sleep睡眠,父亲进程则先死亡,子进程的pcb最后由init祖先回收。6、(5分)操作系统的主要功能是为管理硬件资源和为应用程序开发人员提供良好的环境来使应用程序具有更好的兼容性,为了达到这个目的,内核提供一系列具备预定功能的多内核函数,通过一组称为系统调用(systemcall)的接口呈现给用户。系统调用把应用程序的请求传给内核,调用相应的的内核函数完成所需的处理,将处理结果返回给应用程序7、解释系统内核程序为什么不能被用户程序直接调用?(5分)内核程序是系统级的程序,可以访问系统核心内核区域。用户程序是用户级的,不能访问系统核心数据,若用户程序能直接调用内核程序,内核数据等系统核心内容容易面临被无意或恶意修改的风险,且也容易导致系统程序运行的不安全。。。。。。。