Unix试题 - 副本

六、C语言编程(15分)

利用Unix/Linux系统调用pipe、fork等编写程序,运行时创建子进程,父进程通过管道向子进程发送一个数字M,子进程中启动程序,显示M行“Hello,world”。

#include

#include

#define M 6

int main() { int pipefd[2];

int pid; int m;

if (pipe(pipefd) < 0) {

printf("Unable to create pipe!\n");

return 1; } pid = fork(); if (pid > 0) //parent { m = M; close(pipefd[0]); //close read end write(pipefd[1], &m, sizeof(int)); //write M wait(NULL); // wait for child complete close(pipefd[1]); } else if (pid == 0) { close(pipefd[1]); read(pipefd[0], &m, sizeof(int)); //read M while(m>0) { printf("Hello world.\n"); m--; } close(pipefd[0]); } else { printf("Unable to fork!\n"); return 1; } return 0; }

UNIX期中试题及参考答案(2010.06)

一、填空题:

1.UNIX系统中,数据及程序全部存放在(UNIX主机的硬盘)上,所有程序的运行也都由UNIX

主机内的(CPU)占用UNIX主机的内存来完成。

2.有两种流控方法,一是硬件方式,利用(RS232)接口的CTS信号线即允许发送,RTS信号线即

请求发送;二是软件方式,利用流控字符(Xon和Xoff)。

3.虚拟终端,是PC机通过(网络)与UNIX主机相连,客户端运行(telnet)程序,服务器端运行

telnetd程序,成为UNIX的一个基于TCP通信的虚拟终端。

4.Windows和Unix文本文件结构不同,UNIX行尾处仅存(换行)字符,Windows行尾处存(回

车和换行)两个字符。

5.符号连接文件的类型为l。对符号连接文件的删除操作删除的是(符号连接)文件,其它所有操

作都将访问(符号连接所引用的)文件。

二、单项选择题:

1.字符设备文件类型的标志是( )。

A. p

B. c

C. s

D. l

2.以下()文件中存放有用户密码的相关信息。

A. /etc/shadow

B. /etc/passwd

C./etc/group

D. /etc/profile

3.csh启动时,自动执行用户主目录下( )文件中命令。

A. .cshrc

B. .logout

C. autoexec

D. config

4.一般来说,设备文件所在的目录是( )

A./home/root

B./home

C./

D./dev

5.文件权限读、写、执行的三种标志符号依次是()。

A. rwx

B. xrw

C. rdx

D. srw

6. 用ls –al 命令列出下面的文件列表,()文件是符号连接文件。

A. -rw-rw-rw- 2 hel-s users 56 Sep 09 11:05 hello

B. -rwxrwxrwx 2 hel-s users 56 Sep 09 11:05 goodbey

C. drwxr--r-- 1 hel users 1024 Sep 10 08:10 zhang

D. lrwxr--r-- 1 hel users 2024 Sep 12 08:12 cheng

7. 在/home/stud1/wang目录下有一文件file,使用( )可实现在后台执行命令,此命令将file文

件中的内容输出到file.copy文件中。

A. cat file >;file.copy

B. cat >;file.copy

C. cat file file.copy &

D. cat file >file.copy &

8. 如果当前目录为/home,进入目录/home/stud1/test的命令是( ) 。

A. cd test

B. cd /stud1/test

C. cd stud1/test

D. cd home

9. 用户user1和user2同属于users组。user1有一文件file1,要user2能修改user1的file1文件,

该文件应拥有( )权限。

A. 744

B. 664

C.646

D.746

10. 系统将存储设备和I/O设备均看做文件来操作,( )不是以文件的形式出现。

A. 目录

B. 软链接

C. i节点表

D. 软盘

11. ( )设备是字符设备。

A. hdc

B. fd0

C. hda1

D. tty1

12.下列不属于i节点内容的是 () 。

A. 索引信息

B. 文件类型

C. link数

D. 文件名

13.要使shell把当前目录作为查找命令的目录之一,应设置的环境变量是()。

A.HOME

B.PWD

C.SHELL

D.PATH

14.某文件的组外成员的权限为只读;所有者有全部权限;组内的权限为读与写,则该文件的权限

为( )。

A. 467

B. 674

C. 476

D. 764

15.退出交互模式的shell,应键入()。

A. ;

B. ^q

C. exit

D. quit

16.设超级用户root当前所在目录为:/usr/local,键入cd命令后,用户当前所在目录为()。

A. /home

B. /root

C. /home/root

D. /usr/local

17.字符设备文件类型的标志是( )。

A. p

B. c

C. s

D. l

18. ( )是在文件目录表中。

A. i节点号

B.文件长度

C.数据指针

D.文件类型

19.文件exer1的访问权限为rw-r--r--,现要增加所有用户的执行权限和同组用户的写权限,下

列命令正确的是()。

A. chmod a+x g+w exer1

B. chmod 765 exer1

C. chmod o+x exer1

D. chmod g+w exer1

20. 在/home/stud1/wang目录下有一文件file,使用( )可实现在后台执行命令,此命令将file文件

中的内容输出到file.copy文件中。

A. cat file >;file.copy

B. cat >;file.copy

C. cat file file.copy &

D. cat file >file.copy &

三、正误判断:正确“√”,错误“×”

1. 将前一个命令的标准错误输出作为后一个命令的标准输入,称之为管道。×

2. 增加一个用户的命令是 adduser 或useradd。√

3. 可以使用kill命令结束后台进程。√

4. 符号连接,在算法软件上实现,硬连接在数据结构上实现。√

5. 普通文件的权限:读、写、可执行。不可写文件就不能被删除。×

6. 修改文件内容,系统不需要修改目录文件,而需要修改i节点内容。√

7. 目录有执行权限意味着该目录下的所有文件均为可执行。×

8. 同一进程的实际UID和有效UID都是一致的。×

9. 某文件的权限为:-rws--x—x,则该文件有SUID权限。√

10. cc -c try.c -o try >& err.list把stdin合并到stdout,然后重定向到文件err.list。

11. 父进程在执行fork前打开的文件,父子进程有同一文件偏移指针。√

12. 引导块(0号块)用于启动系统,只有根文件系统的引导块有效。√

13. 每个文件都对应一个i节点,目录项则没有i节点。×

14. pipe创建的管道的缺点是只限于同祖先进程间通信。×

15. 命名管道,允许没有共同祖先的进程访问。√

16. 命令mknod pipe0 p创建管道,就是创建了一个名为pipe0,类型为p的文件。√

17. 根文件系统是也可以―脱卸(umount)‖。×

18. 根文件系统和子文件系统的文件系统格式必须是相同的。×

19. 目录若无写权限,则目录下所有文件禁止写。×

20. umount命令,拆除一个已安装的子文件系统。√

参考答案:

一、填空题:

1.(UNIX主机的硬盘)(CPU)。

2.(RS232) (Xon和Xoff)。

3. (网络)(telnet)。

4.(换行)(回车和换行)。

5.(符号连接) (符号连接所引用的)。

二、单项选择:

1-5 B A A D A 6-10 D D C B C 11-15 D D D A C 16-20 B A A B C

四.编程与应用题:

1 .用 Sh e ll 编程,判断一文件是不是字符设备文件,如果是将其拷

贝到 / d e v 目录下。

参考程序:

# ! / b in / sh

F IL EN A ME =

e ch o “I n p u t

f il e n a me :”

r e a d F IL EN A M E

if [ - c " $ F IL EN A M E" ]

t h e n

cp $ F IL EN A M E / d e v

f ie ls e

US E R N A M E= s t u $ { i}

f i

u se r a dd $ US ER N A ME

mk d ir / h o me / $ US ER N A M E

ch o wn - R $ US ER N A ME / h o me / $ US ER N A M E

ch g r p - R cl a ss 1 / h o me / $ US ER N A M E

i= $ ( ( $ i+ 1 ))

d o n e

4 .编写 s h e ll 程序,实现自动删除

5 0个账号的功能。账号名为 st

u d 1至 st u d 5 0。

参考程序:

# ! / b in / sh

i= 1

wh il e [ $ i - le 5 0 ]

d o

u se r d el - r st u d $ {i }

i= $ ( ( $ i+ 1 ) )

d o n e

5 .某系统管理员需每天做一定的重复工作,请按照下列要求,编制

一个解决方案:

(1 )在下午 4 : 5 0 删除 / a b c 目录下的全部子目录和全部文件;

(2 )从早 8 : 00 ~下午 6 : 0 0每小时读取 / xy z 目录下 x1 文件中每行第一个域的全部数据加入到

/ b a ck u p 目录下的 b a k0 1 . tx t 文件内;

(3 )每逢星期一下午 5 : 5 0将 / d a t a 目录下的所有目录和文件归档并压缩为文件:

b a

c ku p . ta r. g z;

(4 )在下午 5 : 5 5将 ID E 接口的 CD - RO M 卸载(假设:C D - RO M 的设备名为 h d c);

(5 )在早晨 8 : 0 0前开机后启动。 # f il e e xe cu t a b le : ch mo d 7

5 5 / e t c/ r c . d/ r c. h tt p d

#

ca s e " $ 1 " in # c a se 结构开始,判断“位置参数”决定执行的操作。

本程序携带一个“位置参数”,

即$ 1

' s t a r t' ) # 若位置参数为 st a r t

/ u sr / sb in / a p a c he ct l st a rt ; ; # 启动 h t t p d 进程

' st o p ') # 若位置参数为 st o p

/ u sr / sb in / a p a ch e c t l st o p ; ; #关闭 h t t p d 进程

' r e st ar t ' ) #若位置参数为 st o p

/ u sr / sb in / a p a ch e ct l r e s ta r t ; ; # 重新启动 h t t p d 进程

*) # 若位置参数不是 s t a r t、 s t o p 或 r e st a rt 时

e ch o " u sa g e $ 0 st a r t| s t o p |r e st a r t " ; ; # 显示命令提示信

息:程序的调用方法

e sa c # c a se 结构结束

(2 )程序的功能是启动,停止或重新启动 h t t p d 进程

(3 )程序的调用方式有三种:启动,停止和重新启动。

3 .设计一个 sh e ll 程序,添加一个新组为 cl a ss 1 ,然后添加属

于这个组的 3 0个用户,用户

名的形式为 st d xx ,其中 xx 从0 1 到 3 0。

参考答案:

# ! / b in / sh

i= 1

g r o u pa d d cl a ss 1

wh il e [ $ i - le 3 0 ]

d o

if [ $ i - le 9 ] ; t h e ncr o n t ab / r oo t / e t cb a kc r o n

或使用 cr o n t ab - e 命令添加定时任务:

0 1 * * * / b in / s h / u sr / b in / f il e b a ck

7 .有一普通用户想在每周日凌晨零点零分定期备份 / u se r / b a ck up

到 / t mp 目录下,该用户应

如何做?

参考答案:(1 )第一种方法:

用户应使用 cr o n t ab –e 命令创建 cr o n t ab 文件。格式如下:

0 0 * * su n cp – r / u se r/ b a c ku p / t mp

(2 )第二种方法:

用户先在自己目录下新建文件 f il e ,文件内容如下:

0 * * su n cp –r / u s e r / ba ck u p / t mp

然后执行 c r o n t ab f il e 使生效。

8 . 设计一个 Sh e ll 程序,在 / u se r da t a 目录下建立 5 0 个目录,

即 u s e r 1 ~u s e r5 0,并设置每个

目录的权限,其中其他用户的权限为:读;文件所有者的权限为:读、写、执行;文件所有

者所在组的权限为:读、执行。

参考答案 : 建立程序 Pr o 1 6如下:

# ! / b in / sh

i= 1

wh il e [ i - le 5 0 ]

d o

if [ - d / u se r da t a ] ; t h e n

mk d ir - p / u se r da t a / u se r $ i

ch mo d 7 5 4 / u se r da t a / u se r $ i

e ch o " u se r $i "

le t " i = i + 1 " (或 i= $ (( $ i+ 1 ))

e ls e

mk d ir / u se r da t ach mo d 7 5 4 / u se r da t a / u se r $ i

e ch o " u se r $i "

le t " i = i + 1 " (或 i= $ (( $ i+ 1 ))

f i

d o n e

参考答案:

(1 )编写sh e ll 程序 f il e b a ck :

# ! / b in / sh

DI RN A M E= ` ls / r o o t | g r e p b a k`

if [ - z " $ DI R N A ME " ] ; t h e n

mk d ir / r o o t /b a k

cd / r o ot / b a k

f i

YY = ` d a t e +% y `

MM =` d a t e +% m `

DD = ` d a t e +% d `

BA C K ET C= $ YY $ M M$ DD _ e t c . t a r. g z

t a r z cv f $ BA C K E T C / e t c

e ch o "

f il e b a ck f in is h e d! "

1.假设你的用户账号是zheng,现在你登录进入linux系统,查看当前登录到系统中的用户,查看当前系统中运行的进程,然后再退出系统。

答:login:zheng

Password:口令

$who

$ps

$Ctrl+D

2.在当前目录/home/zheng下新建一个目录back,将当前目录改为back,在back下新建2个长度为0的文件test1、test2,然后把test2移到其父目录中并改名为file12。

答:$ mkdir back

$ cd back

$ touch

test1 test2

$ mv test2 ../file2

3.现在需要统计当前目录/home/zheng下普通文件的数目并显示结果,如何实现?

$find –type f | wc –l

4.假设你是系统管理员,需要增加一个新的用户账号zheng,为新用户设置初始密码,锁定用户账号uly,并删除用户账号chang。

答:.#useradd zheng

#passwd zheng

#passwd –l uly

#userdel chang

5.若给需要将/home/zheng目录下的所有文件打包压缩成/tmp/zheng.tar.gz,你准备怎么做?当需要从压缩包中恢复时,又该如何处理?

答:#tar– zcvf /tmp/zheng.tar.gz /home/zheng

#tar -zxvf /tmp/zheng.tar.gz

五、下面给出了一个SHELL程序,试对其行后有#(n)形式的语句进行解释,并说明程序完成的功能。(8分) #!/bin/sh

DIRNAME=`ls /root | grep bak` #(1)if [ -z "$DIRNAME" ] then #(2)

mkdir /root/bak cd /root/bak #(3)

fi YY=`date +%y` MM=`date +%m` DD=`date +%d` #(4)BACKETC=$YY$MM$DD_etc.tar.gz #(5)

tar zcvf $BACKETC /etc #(6)

echo "fileback finished!"

相关文档
最新文档