1.什么是嵌入式系统?它由哪几部分组成?
嵌入式系统是一应用为中心,以计算机技术为基础,切软硬件可裁减,对功能、可靠性、成本、体积、功耗有严格要求的专用计算机系统。
3个主要的组成部分:硬件、实时操作系统以及应用软件。
硬件:包括处理器、存储器(ROM、RAM)、输入输出设备、其他部分辅助系统等。
实时操作系统:用于管理应用软件,并提供一种机制,使得处理器分时地执行各个任务并完成一定的时限要求 。
应用软件:实现具体业务逻辑功能 2.嵌入式系统的三要素是什么?
嵌入式系统的三要素是嵌入、专用、计算机。其中嵌入性指的是嵌入到对象体系中,有对象环境要求;专用性是指软、硬件按对象要求裁减;计算机指实现对象的智能化功能。 3.列出5中以上的嵌入式实时操作系统。
嵌入式实时操作系统是指操作系统本身要能在一个固定时限内对程序调用(或外部事件)做出正确的反应亦即对时序与稳定性的要求十分严格
4.嵌入式系统一般由几层组成?简单介绍其作用。
嵌入式系统一般由硬件层、中间层、软件层和功能层组成。: (1)硬件层 :由嵌入式微处理器、外围电路和外设组成。
(2)中间层 :硬件层与软件层之间为中间层.作用:将系统软件与底层硬件部分隔离,使得系统的底层设备驱动程序与硬件无关。
(3)软件层 :主要是操作系统,有的还包括文件系统、图形用户接口和网络系统等。作用:操作系统是一个标准的内核将中断、I/O、定时器等资源都封装起来,以方便用户使用。
(4)功能层 :由基于操作系统开发的应用程序组成,用来完成对被控对象的控制功能。作用:功能层是面向被控对象和用户的,为了方便用户操作,往往需要具有友好的人机界面。 5.简述嵌入式系统中非占先式与占先式调度法的区别。
非占先式调度法也称作合作型多任务,各个任务彼此合作共享一个CPU。中断服务可以使一个高优先级的任务由挂起状态变为就绪状态。但中断服务以后控制权还是回到原来被中断了的那个任务,直到该任务主动放弃CPU 的使用权时,那个高优先级的任务才能获得CPU 的使用权。当系统响应时间很重要时,要使用占先式(preemptive)内核。最高优先级的任务一旦就绪总能得到CPU 的控制权。当一个运行着的任务使一个比它优先级高的任务进入了就绪态,当前任务的CPU 使用权就被剥夺了,或者说被挂起了,那个高优先级的任务立刻得到了CPU 的控制权。
6.简述什么是硬实时操作系统、软实时操作系统以及两者的区别。
在实时系统中,如果系统在指定的时间内未能实现某个确定的任务,会导致系统的全面失败,这样的系统被称为强实时系统或硬实时系统。强实时系统响应时间一般在毫秒或微秒级。在弱实时系统中,虽然响应时间同样重要,但是超时却不会发生致命的错误。其系统响应时间在毫秒至秒的数量级上,其实时性的要求比强实时系统要差一些。
7.嵌入式系统的设计步骤有哪些?各部分主要工作是什么? 嵌入式系统的设计步骤及各部分的主要工作如下。
(1)需求分析阶段,罗列出用户的需求。(2)体系结构设计阶段,描述系统的功能如何实现。3)详细设计阶段,进行硬件系统与软件系统的分类划分,以决定哪些功能用硬件实现,哪些用软件实现。(4)系统集成把系统的软件、硬件和执行装置集成在一起,进行调试,发现并改进在设计过程中的错误。5)系统测试对设计好的系统进行测试看其是否满足给定的要求。
8.Linux作为嵌入式操作系统的优势有哪些?
(1)可应用于多种硬件平台。Linux 已经被移植到多种硬件平台,这对于经费、时间受限制的研究与开发项目是很有吸引力的。原型可以在标准平台上开发后移植到 具体的硬件。(2)Linux 的高度模块化使添加部件非常容易。本身内置网络支持,而目前嵌入式系统对网络支持要求越来越高。(3)Linux 是一个和Unix 相似、以内核为基础的、具有完全的内存访问控制,支持大量硬件等特性的一种通用操作系统。(4)Linux 可以随意地配置,不需要任何的许可证或商家的合作关系。其程序源码全部公开,这样开发人员可以对操作系统进行定制,适应其特殊需要。(5)Linux 带有Unix 用户熟悉的完善的开发工具不但成熟完善,
9.简述Linux需要进行进程调度的时机。 Linux 执行进程调度一般是在以下情况发生的: (1)正在执行的进程运行完毕。
(2)正在执行的进程调用阻塞原语将自己阻塞起来进入等待状态。
(3)正在执行的进程调用了P 原语操作从而因资源不足而被阻塞,或调用了V 原语操作激活了等待资源的进程队列。
(4)执行中的进程提出I/O 请求后被阻塞。
(5)系统分配的时间片已经用完。以上都是CPU 为不可剥夺方式下的引起进程调度的原因。在CPU 方式是可剥夺时还有下面的原因:
(6)就绪队列中的某个进程的优先级变得高于当前运行进程的优先级,从而也将引起进程调度。 第三章
二、综合应用题
1、已知C语言程序有主要程序模块prog.c、proc.h,其中调用了另一模块subr.c、subr.h中的功能。试写出一个可将这两个模块编译成可执行文件pr1的Makefile。 pr1:prog.o subr.o gcc –o pr1 prog.o subr.o prog.o:prog.c prog.h gcc –c –o prog.o prog.c subr.o:subr.c subr.h gcc –c –o subr.o subr.c
2、假定目录/home/arm下有一个C语言程序,它由几个单独的文件组成,而这几个文件又分别包含了其他文件,如下表所示。 完成下列任务 (1)
编写Makefile文件,最终的目标文件为hello,交叉编译器为arm-linux-gcc。
hello:main.o list.o symbol.o table.o
arm-linux-gcc –o hello main.o list.o symbol.o table.o main.o:main.c stdio.h table.h symbol.h list.h arm-linux-gcc -c –o main.o main.c list.o:list.c list.h
arm-linux-gcc –c –o list.o list.c symbol.o:symbol.c symbol.h
arm-linux-gcc –c –o symbol.o symbol.c table.o:table.c table.h symbol.h list.h arm-linux-gcc –c –o table.o table.c clear:
rm –f hello *.o
(2) 在目标机上通过网络文件系统挂载/mnt到宿主机上的/home/arm目录。
mount –t nfs –o nolock IP地址:/home/arm /mnt 3.在Linux操作系统下,编程实现以下功能。 (1)主程序hello.c(打印“hello world!”)。 (2)主程序通过头文件hello.h调用message函数。
(3)message函数有message.c定义(打印“This is a message!”)。 //hello.h #ifndef HELLO_H #define HELLO_H void message(); #endif //message.c #include printf(“this is a message!”); } //hello.c #include void main(int argc,char *argv[]) {printf(“hello world!\\n”); message(); return 0; } 第六章 一简答题 1、 何为虚拟内存?虚拟内存的管理有何作用? 使用虚拟地址寻址整个系统的主存和辅存的方式在现代操作系统中被称为虚拟内存。MMU 便是实现虚拟内存的必要条件。嵌入式处理器如果存在MMU ,由于在MMU 具备内存地址映射和寻址功能,操作系统会使用它完成从虚拟地址到物理地址的转换, 所有的应用程序只需要使用虚拟地址寻址数据。虚拟内存的管理方法使系统既可以运行体积比物理内存还要大的应用程序,也可以实现“按需调页”策略,既满足了程序的运行速度,又节约了物理内存空间。 2、 进程内存区域涉及哪几种数据段? 进程内存区域涉及到5 种数据段,即: ① 码段:代码段是用来存放可执行文件的操作指令,也就是说是它是可执行程序在内存中的镜像。②数据段:数据段用来存放可执行文件中已初始化全局变量,换句话说就是存放程序静态分配的变量和全局变量。③BSS 段:BSS 段包含了程序中未初始化的全局变量,在内存中 BSS 段全部置零。④堆:堆是用于存放进程运行中被动态分配的内存段,它的大小并不固定,可动态扩张或缩减。⑤栈:栈是用户存放程序临时创建的局部变量,也就是说函数括弧“{}”中定义的变量除此以外,在函数被调用时,其参数也会被压入发起调用的进程栈中,并且待到调用结束后,函数的返回值也会被存放回栈中。 3、 简述内核空间和用户空间的区别。 在Linux 系统中,内核在最高级执行,也称为“系统态”,在这一级任何操作都可以执行。而应用程序则执行在最低级,即所谓的“用户态”。在这一级处理器禁止对硬件的直接访问和对内存的未授权访问。模块是在所谓的“内核空间”中运行的,而应用程序则是在“用户空间”中运行的。它们分别引用不同的内 存映射,也就是程序代码使用不同的“地址空间”。 4、简述共享内存的作用? 共享内存区域是被多个进程共享的一部分物理内存。如果多个进程都把该内存区域映射到自己的虚拟地址空间,则这些进程就都可以直接访问该共享内存区域,从而可以通过该区域进行通信。共享内存是进程间共享数据的一种最快的方法,一个进程向共享内存区域写入了数据,共享这个内存区域的所有进程就可以立刻看到其中的内容。这块共享虚拟内存的页面,出现在每一个共享该页面的进程的页表中。但是它不需要在所有进程的虚拟内存中都有相同的虚拟地址。 5、简述内存管理与虚拟文件系统之间的关系。 内存管理利用虚拟文件系统支持交换,交换进程(swapd)定期由调度程序调度,这也是内存管理依赖于进程调度的唯一原因。当一个进程存取的内存映射被换出时,内存管理向文件系统发出请求,同时挂起当前正在运行的进程。 第七章 二、编程题 1、用C语言编写一个源程序main.c,实现以下功能。 (1)打开当前目录下的文件“test.txt”,如果没有则创建该文件,并使其具体读写属性。 Void main(void) {int fid; fid = open(“./test.txt”,O_RDWR|O_CREAT); if(fid==-1) { Printf(“open or create error \\n”); exit(0); } Close(fid); } (2)编写一个makefile实现自动编译,生成可执行文件 main。 objects = main.o exec = main all:$(objects) gcc –o $(exec) $(objects) main.o:main.c gcc –c main.c clean: rm –r $(exec) $(objects) 2、编写一个程序实现把一个文件内容复制到另一个文件中。 2.参考程序: #include char *ptr; if(argc!=3) { fprintf(stderr,\"Usage:%s fromfile tofile\\n\\a\exit(1); }/* 打开源文件 */ if((from_fd=open(argv[1],O_RDONLY))==-1) { fprintf(stderr,\"Open %s Error:%s\\n\exit(1); } /* 创建目的文件 */ if((to_fd=open(argv[2],O_WRONLY|O_CREAT,S_IRUSR|S_IWUSR))==-1){ fprintf(stderr,\"Open %s Error:%s\\n\exit(1); } /* 以下代码是一个经典的拷贝文件的代码 */ while(bytes_read=read(from_fd,buffer,BUFFER_SIZE)){ if((bytes_read==-1)&&(errno!=EINTR)) break; /*发生读错误,退出循环*/ else if(bytes_read>0){ ptr=buffer; while(bytes_write=write(to_fd,ptr,bytes_read)){ if((bytes_write==-1)&&(errno!=EINTR))break; /*若写错误,退出循环*/ /* 写完了所有读的字节 */ else if(bytes_write==bytes_read) break;/*读写字节不等退出循环*/ else if(bytes_write>0) { /* 只写了一部分,继续写 */ ptr+=bytes_write; bytes_read-=bytes_write;} } if(bytes_write==-1)break; /* 写的时候发生的致命错误 */} } close(from_fd); close(to_fd); exit(0);} 4、 从键盘上输入两个学生的基本信息,然后写入一个到文件中,最后读出这两个学生的数据,并显示在屏幕上。 #include struct student boya[2], boyb[2], *pp, *qq; if((fp = fopen(\"7-6.txt\打开文件 {printf(\"Can not open file, exit ...\\n\"); return -1; } pp = boya; qq = boyb; printf(\"please input data:\\n\"); //输入学生信息 for (i = 0; i < 2; i++, pp++) scanf(\"%s%d\pp = boya; fwrite(pp, sizeof(struct student), 2, fp); //把学生信息写入文件 rewind(fp); //重定位文件 fread(qq, sizeof(struct student), 2, fp); //从文件中读取学生信息 printf(\"name\\age\\n\"); for(i = 0; i < 2; i++, qq++) printf(\"%s\\%d\\n\fclose(fp); return 0; } 4、编写一个对文件加写入锁的程序。写入锁是互斥锁,一个时刻只能有一个写入锁存在。并在两个终端分别运行,验证先运行的那个终端能成功上锁,后运行的那个无效。 /*fcntl_write.c 测试文件写入锁主函数部分*/ #i nclude unistd.h> #i nclude sys/file.h> #i nclude sys/types.h> #i nclude sys/stat.h> #i nclude stdio.h> #i nclude stdlib.h> /*lock_set 函数*/ void lock_set(int fd, int type) {struct flock lock; lock.l_whence = SEEK_SET;//赋值lock 结构体 lock.l_start = 0; lock.l_len =0; while(1) {lock.l_type = type; /*根据不同的type 值给文件上锁或解锁*/ if((fcntl(fd, F_SETLK, &lock)) == 0) {if( lock.l_type == F_RDLCK ) printf(\"read lock set by %d/n\else if( lock.l_type == F_WRLCK ) printf(\"write lock set by %d/n\else if( lock.l_type == F_UNLCK ) printf(\"release lock by %d/n\return; }/*判断文件是否可以上锁*/ fcntl(fd, F_GETLK,&lock); /*判断文件不能上锁的原因*/ if(lock.l_type != F_UNLCK) {/*/该文件已有写入锁*/ if( lock.l_type == F_RDLCK ) printf(\"read lock already set by %d/n\/*该文件已有读取锁*/ else if( lock.l_type == F_WRLCK ) printf(\"write lock already set by %d/n\getchar(); } } } int main(void) { int fd; /*首先打开文件*/ fd=open(\"hello\if(fd 0) {perror(\"open\"); exit(1); }/*给文件上写入锁*/ lock_set(fd, F_WRLCK); getchar(); /*给文件接锁*/ lock_set(fd, F_UNLCK); getchar(); close(fd); exit(0); } 第八章 三、编程题 1、编程创建一个特定的IPC结构的关键字和一个信号量,建立此信号量的索引,修改索引指向的信号量的值,最后清除信号量(注:利用函数frok生成上文所说的唯一IPC关键字。) void main() { key_t unique_key; /* 定义一个IPC 关键字*/ int id; struct sembuf lock_it; union semun options; int i; unique_key = ftok(\".\生成关键字字符'a'是一个随机种子*/ /* 创建一个新的信号量集合*/ id = semget(unique_key, 1, IPC_CREAT | IPC_EXCL | 0666); printf(\"semaphore id=%d\\n\options.val = 1; /*设置变量值*/ semctl(id, 0, SETVAL, options); /*设置索引0 的信号量*/ /*打印出信号量的值*/ i = semctl(id, 0, GETVAL, 0); printf(\"value of semaphore at index 0 is %d\\n\/*下面重新设置信号量*/ lock_it.sem_num = 0; /*设置哪个信号量*/ lock_it.sem_op = -1; /*定义操作*/ lock_it.sem_flg = IPC_NOWAIT; /*操作方式*/ if (semop(id, &lock_it, 1) == -1) { printf(\"can not lock semaphore.\\n\"); exit(1); } i = semctl(id, 0, GETVAL, 0); printf(\"value of semaphore at index 0 is %d\\n\/*清除信号量*/ semctl(id, 0, IPC_RMID, 0); } 2、守护进程编程。守护进程实例包括两部分:主程序test.c和初始化程序init.c。主程序每隔一分钟向/temp目录的日志test.log报告运行状态;初始化程序中的init_daemon函数负责生成守护进程。可以利用init_daemon函数生成自己的守护进程。 void init_daemon(void) {int pid; int i; if (pid=fork()) exit(0);//是父进程,结束父进程 else if (pid< 0) exit(1);//fork失败,退出 setsid(); if (pid=fork()) exit(0);//是第一子进程,结束第一子进程 else if (pid< 0) exit(1);//fork失败,退出 for (i=0;i< NOFILE;++i)//关闭打开的文件描述符 close(i); chdir(\"/tmp\");//改变工作目录到/tmp umask(0);//重设文件创建掩模 return; } 2. test.c清单 #include < stdio.h > #include < time.h > void init_daemon(void);//守护进程初始化函数 main() { FILE *fp; time_t t; init_daemon();//初始化为Daemon while (1)//每隔一分钟向test.log报告运行状态 { sleep(60);//睡眠一分钟 if ((fp=fopen(\"test.log\",\"a\")) >=0) { t=time(0); fprintf(fp,\"Im here at %sn\",asctime(localtime(&t)) ); fclose(fp); } } 3、编程实现父进程和子进程间的通信。程序包括:创建无名管道、子进程向父进程写数据及关闭管道的读端、父进程从管道读取子进程写的数据及关闭管道的写端、读有名管道和写有名管道。 void main() { int file_descriptors[2]; /*定义子进程号 */ pid_t pid; char buf[256]; int returned_count; /*创建无名管道*/ pipe(file_descriptors); /*创建子进程*/ if((pid = fork()) == -1) { printf(\"Error in fork\\n\"); exit(1); } /*执行子进程*/ if(pid == 0) { printf(\"in the spawned (child) process...\\n\"); /*子进程向父进程写数据关闭管道的读端*/ close(file_descriptors[INPUT]); write(file_descriptors[OUTPUT], \"test data\exit(0); } else { /*执行父进程*/ printf(\"in the spawning (parent) process...\\n\"); /*父进程从管道读取子进程写的数据关闭管道的写端*/ close(file_descriptors[OUTPUT]); returned_count = read(file_descriptors[INPUT], buf, sizeof(buf)); printf(\"%d bytes of data received from spawned process: %s\\n\returned_count, buf); } } 在Linux 系统下,有名管道可由两种方式创建,命令行方式mknod 系统调用和函数mkfifo。 下面的两种途径都在当前目录下生成了一个名为myfifo 的有名管道, 方式一,mkfifo(\"myfifo\方式二,mknod myfifo p 生成了有名管道后,就可以使用一般的文件I/O 函数如open、close、read、write 等来对它 进行操作。下面即是一个简单的例子,假设我们已经创建了一个名为myfifo 的有名管道。 /* 进程一,读有名管道*/ #define INPUT 0 #define OUTPUT void main() { FILE * in_file; int count = 1; char buf[80]; in_file = fopen(\"mypipe\if (in_file == NULL) { printf(\"Error in fdopen.\\n\"); exit(1); } while ((count = fread(buf, 1, 80, in_file)) > 0) printf(\"received from pipe: %s\\n\fclose(in_file); } /* 进程二,写有名管道*/ #include #include void main() { FILE * out_file; int count = 1; char buf[80]; out_file = fopen(\"mypipe\if (out_file == NULL) { printf(\"Error opening pipe.\"); exit(1); } sprintf(buf,\"this is test data for the named pipe example\\n\"); fwrite(buf, 1, 80, out_file); fclose(out_file); } 第十章 3.预处理、编译、汇编和连接 4. step next 1、下列提法中,属于ifconfig命令作用范围的是(B) B、配置网卡的IP地址 2、在FTP协议中,控制连接是由(B)主动建立的。 B、客户端 3、当与某远程网络连接不上时,需要跟踪路由查看,以便了解在网络的什么位置出现了问题,满足该目的命令是(traceroute)。 5、局域网的网络地址192.168.1.0/24,局域网络连接其它网络的网关地址是192.168.1.1。主机192.168.1.20访问172.16.1.0/24网络时,其路由设置正确的是( B )。 B) route add –net 172.16.1.0 gw 192.168.1.1 netmask 255.255.255.255 metric 1 5、 如果想配置一台匿名FTP服务器,应修改(/etc/ftpusers)。 6、 要配置NFS服务器,在服务器端主要配置(/etc/exports)文件。 7、 在TCP/IP模型中,应用层包含了所有的高层协议,在下列的一些应用协议中,(B)能够实现本地与远程主机之间的文件传输工作。 B、Ftp 8、 DNS域名系统主要负责主机名和(IP地址)之间的解析。 10、请选择正确的命令( B),完成加载 NFS Server \"svr.server.net\"的 /home/nfs 到 /home2。 B.、mount -t -s nfs svr.server.net /home/nfs /home2 三、选择题 1、一般可以用(make)实现自动编译。 2假使当前目录下有文件Makefile,其内容如下。现在执行命令make clear,实际执行的命令是(rm –f pr1 *.o)。 3、嵌入式系统应用软件一般在宿主机上开发,在目标机上运行,因此需要的一个(交叉编译)环境。 4、假设用vi编辑器编写了一个脚本文件shell.sh,现想将该文件名称修改为shell2.sh,(mv shell.sh shell2.sh)命令可以实现。 5、在使用GCC编辑器的过程中,(-o)选项可用来指定生成的目标文件名。 6、假设当前目录下有文件Makefile,其内容如下。现在执行命令make subr.o,实际执行的命令是(gcc –c –o subr.o subr.c)。 7、为了使生成的目标文件能够用于GDB调试,在编译时GCC应使用(-g)选项。 8、存盘并退出vi的指令是(wq)。 9、在Linux下使用GCC编译器时,有命令gcc –g test.c –o test,其中参数-g的作用是(生成文件包含调试信息)。 10、fstab文件存放在(/ect)目录中。 11、init启动进程需要读取(/etc/inittab)配置文件。 第四章 1. LINUX支持网络文件系统NFS, (mount -t nfs 192.168.1.4:/opt/sirnfs /mnt/sirnfs)命令实现了将位于 192.168.1.4机器上的 /opt/sirnfs 目录挂载到本机/mnt/sirnfs下。 2、以下叙述中正确的是(C) C、在嵌入式系统开发中,通常采用的是交叉编译器。 3、以下做法不利于嵌入式应用软件的移植的是 D 。 D) 在数据类型上,尽量直接使用C语言的数据类型 4. 如果Boot Loader、内核、启动参数以及其他的系统映像四部分在固态存储设备上分别独立存放,则其存储结构的分配顺序应当是(Bootloader、启动参数、内核、文件系统)。 5. Boot Loader 的stage2通常使用C语言实现,以完成复杂的功能,并增加可读性和可移植性,以下哪一步骤属于stage2的内容:(D) D . 将 kernel 映像和根文件系统映像从 flash 上读到 RAM 空间中 6、在Linux 2.4或者2.6内核中,和ARM体系结构相关的中断处理程序的C代码在源码树的(arch/arm/kernel/irq.c)文件中 7、下面对于BootLoader的描述不正确的是(C) C、BootLoader的两种模式对开发人员没有意义 8、(make menuconfig)命令以文本菜单方式界面配置内核选项。 10、下面属于blob运行过程第一阶段的是(C) C. 寄存器的初始化 11、能在Linux下,用mkfs.jffs2命令创建JFFS2文件系统(基本上是使用JFFS2的Ramdisk),关于mkfs.jffs2下列说法错误的是: (C) C.-f 选项用于输出文件,通常是 JFFS2 文件系统映像 12、在ARM系统结构中,MMU映射最大的单元空间是(1M) 13、通过修改下面文件哪个文件 ,可以设定开机时候自动安装的文件系统(/etc/fstab ) 14、嵌入式系统由硬件部分和软件部分构成,以下不属于嵌入式系统软件的是(C) C、FPGA编程软件 15、通过修改文件(/etc/fstab),可以设定开机时候自动安装的文件系统。 第七章 1、Linux文件权限一共10位长度,分成四段,第三段表示的内容是(文件所有者所在组的权限)。 2、文件系统的主要功能是 A 。 A) 实现对文件的按名存取 3、下列文件系统中,采用了inode来标识文件的是(C) C、FAT32 4、通过文件名存取文件时,文件系统内部的操作过程是通过(D)。 D.文件名在中查找对应的超级块,在超级块查找对应i节点,通过i节点存取文件数据 5、Linux将存储设备和输入/输出设备均看做文件来操作,下列选项(C)不是以文件的形式出现。 C. i节点表 第八章 1、以下关于Init进程的描述不正确的是(A) A、一个通用进程 2、启动init程序前,不需要经过(D)步骤。 D、启动网络支持 3、有若干并发进程均将一个共享变量count中的值加1一次,那么有关count中的值说法正确的是(C) C、若控制这些并发进程互斥执行count加1操作,count中的值正确 4、下面哪一个选项不是linux系统的进程类型(C) C. 就绪进程 7、进程有3种状态(运行、就绪和等待)。 8、内核不包括的子系统是(D)。 D、硬件管理系 第二章 1、改变目录位置至用户的工作目录 2、改变目录位置至相对路径user 的目录下 3、查看当前目录下的文件 4、查看文件.bash_profile的内容 5、分页查看inittab文件内容 6、将目录/tmp 下的文件file1 复制到当前目录下,文件名为f i l e 2 7、将文件file1移到目录dir1 下,文件名仍为file1 8、建立一新目录d i r 1 9、删除目录dir1,但dir1 下必须没有文件存在,否则无法删除 10、删除文件名中有五个字符且前四个字符为file 的所有文件 11、文件config的内容依次显示到屏幕上 12、以分页方式查看文件名file1 的内容 13、以分页方式查看文件名file1 的内容 14、显示目录dir1 的总容量 15、对于目录d i r 1,设定成任何使用者皆有读取及执行的权利,但只有所有者可做修改 16、对于文件f i l e 1,设定只有所有者可以读、写和执行的权利。 17、将文件file4 链接至文件f i l e 3。 18、寻找文件f i l e 1中包含字符串abc 所在行的文本内容。 19、自根目录下寻找文件file1 的路径。 20、比较目录dir1 与dir2 内各文件的不同之处。 因篇幅问题不能全部显示,请点此查看更多更全内容