Linux基础教程(第2版)课后答案集合

您所在的位置:网站首页 linux基础及应用教程梁如军答案思考 Linux基础教程(第2版)课后答案集合

Linux基础教程(第2版)课后答案集合

2024-04-09 23:51| 来源: 网络整理| 查看: 265

1、简述Linux命令的一般格式 bash 命令的一般格式是: 命令名 [选项] [参数1] [参数2] 2、请说明下述命令的功能: date命令:用于在屏幕上显示或设置系统的日期和时间 cd命令:改变工作目录 cp命令:将源文件或目录复制到目标文件或目录中 pwd命令:显示当前用户工作目录(显示出当前目录的路径) rm命令:删除文件或目录 mkdir命令:建立目录 echo命令:将将命令行中的参数显示到标准输出(即屏幕)上 who命令:列出所有正在使用系统的用户、所用终端名和注册到系统的时间。 cat命令:连接文件并打印到标准输出设备上。cat经常用来显示文件的内容。 more命令:显示文件内容,每次显示一屏。 3、公元2016年的元旦是星期几? 答:星期五 运行命令:cal 1 2016 或 cal Jan 2016 4、什么是文件?Linux下主要有哪些不同的种类的文件? Linux中文件是指文件系统中存储数据的一个命名对象,文件是被命名的相关信息的集合体。它通常存放在外存(如磁盘、光盘)上,可以作为一个独立单位存放和实施相应的操作(如打开、关闭、读、写等)。 主要的文件类型有:普通文件、目录文件、设备文件和符号链接文件。 相同点是,它们都是文件,都有一个文件名和i节点号。不同点是,普通文件的内容为数据,目录文件的内容为目录项或文件名与i节点对应表,而设备文件不占用磁盘空间,通过其i节点信息可建立与内核驱动程序的联系。 5、正则表达式的含义 file✳.c dir ??? Char[a-f].o *是指任意多个任意字符 ?是指单个字符 [a-f]是指这个位置可以是a到f的任意一个字符 6、cp,copy和mv 命令有何异同?能用copy作为复制文件的命令吗 答:cp命令复制一个文件,而原文件保持不变,这样文件个数就增加了;mv命令将文件从一个目录移到另一个目录中,该文件就从原目录中消失,文件个数不变。 不能直接用copy作为复制文件的命令。因为Linux系统提供的众多命令都是有一定规则和限制的,cp是copy的缩写,是Linux默认的复制文件的命令,而copy并不是Linux的合法命令。 7、文件FILE1的前20行、文件FILE2的最后15行合并成一个AB 执行head -n 20 filel > AB 和tail -n -15 file2 >> AB 或 cat head -n -20 file1 tail -n -15 file2 > AB 8、要确定在文件ABC中是否含有表示星期六或星期日字符的行,应使用什么命令? 答:grep -iE ‘saturday|sunday’ ABC 或grep -E ‘[Ss]aturday|[Ss]unday’ ABC 9、如何对文件ABC分别按字典顺序、月份顺序、算术值进行排序? 答:字典顺序:sort -d ABC; 月份顺序:sort -M ABC; 算术值顺序:sort -n ABC 10、自己建一个文本文件file_1,把它复制到文件other中,对other进行修改,然后比较它与文件file_1的区别 touch file_1.txt ls cp file_1.txt other .txt ls

第二章补充 1、 用什么命令能把两个文件合并成一个文件? 答:使用cat命令,例如:cat file1 file2 >file3 将文件file1和file2合并后放入file3中。 2、 如何确定系统中是否有ps命令?如果有,它的功能是什么? 答:可以使用man ps 命令。如果系统中有ps命令,将显示ps命令的联机帮助手册页,列出有关该命令的完整说明;否则,将显示出错信息。 ps命令的功能是查看当前系统中运行的进程信息。 3、要想改变目录列表中下面三部分的内容,应该分别用什么命令? (1)-rwxr–r-- (2)N (3)…ABC 答: (1)使用chmod命令改变相应文件或目录的存取权限。 (2)使用ln命令可以增加指定文件的链接数,使用rm删除文件,可以减少相应文件的链接数。 (3)使用mv命令可以对指定文件或目录重新命名。

第三章 目录及其操作 1、什么是目录文件?它有何作用? 目录文件:标识符为 d,存储了一张表,该表就是该目录文件下,所有文件名和inode的映射关系。 作用:对目录下文件进行统一的权限管理 2、解释以下概念:父目录、子目录、根目录、当前工作目录、用户主目录、绝对路径名、相对路径名(重点) 父目录:包含子目录的目录 子目录:挂靠在另一个目录中的目录 根目录:逻辑驱动器的最上一级目录,它是相对子目录来说的。 当前工作目录:注册进入系统后,自己的主目录就是自己的当前工作目录。 用户主目录:当为新用户建立账户时,系统就制定的一个作为用户的主目录。 绝对路径名:沿着层次树、从根目录开始、到达相应文件的所有目录名连接而成,各目录之间以斜线字符(/)隔开。 相对路径名:相对当前工作的路径名。相对路径名不能以斜线字符(/)开头。 3、确定当前工作目录,把工作目录改到父目录上,然后用长格式列出其中所有的内容 答:确定当前工作目录:pwd ;把工作目录改到父目录上: cd / 然后用长格式列出其中所有内容: ls-l 或者是ll  4、在所用的Linux系统上,根目录下含有哪些内容?各自的功能是什么?(重点) bin目录包括二进制文件的可执行程序,许多Linux命令实际上是放在该目录中的程序。 sbin目录中存放用于管理系统的命令 boot 用于存放引导系统时使用的各种文件,如LILO等 dev 目录包含标示设备的特别文件,这些文件用于访问系统中所有不同类型的硬件。 ect 目录非常重要,它包含许多linux系统配置文件(如密码文件/etc/passwd、/etc/profile等)。对系统的配置就是对该目录下的文件进行相应的修改。 home 目录是用户起始目录的基础目录。通常用户的主目录就保存在该目录中。 lib 目录中保存程序运行时使用的共享库。这些库文件仅在执行有关命令时才会用到。 lost+found 目录中存放系统非正常关闭时正在处理的文件,以便下次系统启动时予以恢复。 mnt 目录存放安装文件系统的安装点。 proc 目录实际上是一个虚拟文件系统,其中的文件只有核心在内存中产生,用于提供关于系统的信息。 root 是超级用户的目录 tmp 目录用于存放程序运行时生成的临时文件。 usr 目录中包含了多个子目录,这些字目录保存系统上一些重要的程序,可供所有用户共享。 5、说出下列每一项信息各对应哪一类文件: (1) drwxr-xr-x 用户目录文件 (2) /bin 普通用户的可执行文件夹(目录文件) (3) /etc/passwd 用户密码文件(普通文件)(4) brw-rw-rw- 块设备文件 (5) /dev/fd0 软驱设备文件(块设备文件) (6) /user/lib 系统库文件夹(目录文件) (7) -rwx–x—x 用户命令文件(普通文件(可执行文件)) 6、假设用ls -l长列表格式显示某个目录的内容时,看到如下一行文件说明: -rwxr-xr-- 2 mengqc users 5699 12月28 11:36 prog1 问: (1)该文件的名称是什么,他是什么类型的文件 答:prog1,普通文件(可执行文件) (2)想取消其他用户对该文件的执行权限,应使用什么命令? 答:chmod o-x prog1或 chmod 744 prog1 (3)想把该文件链接到目录/home/liuzh下的tmp文件,应如何操作?如连接成功,则使用ls-l命令重新列出该目录时,其中显示信息有何改变? 答:ln -s prog1 /home/liuzh/tmp 7、请给出下列命令执行的结果: 答:(1) cd 将当前目录改到用户主目录。 (2) cd … 将当前目录向上移一级(即父目录)。 (3) cd … / … 将当前目录向上移动两级。 (4) cd / 将当前目录改到根目录。 8、目录ABC下有两个子目录a1,b2,以及5个普通文件。如果想删除ABC目录,应使用什么命令? (1)最简单,但是风险较大的方法:rm -r ABC (2)如果5个普通文件分别在子目录a1和b2之下,则可以使用以下命令: cd ABC/a1 rm * cd …/b2 rm * cd …/… rmdir -p ABC (3)如果5个普通文件并未全在两个子目录之下,则可以使用以下命令: cd ABC rm -r * cd … rmdir ABC 9、如何用一个命令行统计出给定目录中有多少个子目录 (1) 统计当前文件夹下文件的个数 ls -l |grep “^-”|wc -l (2) 统计当前文件夹下目录的个数 ls -l |grep “^d”|wc -l (3) 统计当前文件夹下文件的个数,包括子文件夹里的 ls -lR|grep “^-”|wc -l (4) 统计文件夹下目录的个数,包括子文件夹里的 ls -lR|grep “^d”|wc -l 说明: ls -l长列表输出该目录下文件信息(注意这里的文件,不同于一般的文件,可能是目录、链接、设备文件等) grep "^-"这里将长列表输出信息过滤一部分,只保留一般文件,如果只保留目录就是 ^d wc -l统计输出信息的行数,因为已经过滤得只剩一般文件了,所以统计结果就是一般文件信息的行数,又由于一行信息对应一个文件,所以也就是文件的个数。 10、文件链接有哪些形式?它们有什么差别? 答:软连接与硬链接。软连接相当于win里的快捷方式,链接到当前的文件入口(档名) 硬链接是通过文件系统的inode来产生新档名,,即便原来档名被删除,也能正常访问文件

第三章补充 1、类似于DOS下的dir,del,type命令的Linux命令各是什么? 答:分别是:ls ,rm和cat。 2、 试说明find,tee,gzip命令的功能。 答:分别使用以下命令: man find 显示该命令的功能是:查找Linux系统上的文件或目录。 man tee 显示该命令的功能是:从标准输入设备读取数据,将其输出到标准输出设备,同时保存到指定的文件中。 man gzip 显示该命令的功能是:对文件进行压缩和解压缩。题

第四章 进程及其管理 1、什么是多道程序设计?程序并发执行有什么新特征 多道程序设计是在计算机内存中同时存放几道相互独立的程序,使它们在管理程序控制之下,相互穿插的运行。 两个或两个以上程序在计算机系统中同处于开始到结束之间的状态。这就称为多道程序设计。多道程序技术运行的特征:多道、宏观上并行、微观上串行 程序的顺序执行具有如下特征。 ① 顺序性 ② 封闭性 ③ 程序执行结果的确定性 ④ 程序执行结果的可再现性 上述程序的顺序性和封闭性是一切顺序程序所应具有的特性。从这两个特性出发,不难引出程序执行时所具有的另外两个特性。顺序程序执行结果的确定特性和可再现性。 程序的并发执行如下特征: ① 在执行期间并发程序相互制约 ② 程序与计算不再一一对应 ③ 并发程序的执行结果不可再现 ④ 程序的并行执行与程序的并发执行 2、什么是进程?什么是线程?Linux系统中的进程有哪些状态?如何获取系统中各进程的状态? 进程:程序的一次执行过程。线程:进程中指令的不同执行路线。 进程状态:运行态、可中断等待态、不可中断等待态、停止态和僵死态。 获取进程状态:使用ps命令。可以使用man来查看ps的使用参数, a 显示当前终端的所有进程信息 u 使用以用户为主的格式输出进程信息 x 显示当前用户在所有终端下的进程信息 -e 显示 系统内的所有进程 #ps 只显示当前用户打开的进程 ]# ps aux 显示系统中所有进程信息 3、进程有哪几种基本状态?在什么情况下发生各自可能的状态转换?

(1)运行态(2)就绪态(3)阻塞态 转换: ①就绪 — > 运行 处于就绪状态的进程被调度程序选中,分配到CPU后,该进程的状态就由就绪状态变为运行态。处于运行态的进程也称作当前进程。此时当前进程的程序在CPU上执行。 ②运行—> 阻塞 正在运行的进程因某种条件为满足而放弃对CPU的占用,例如该进程要求杜如文件中的数据,在读入内存之前,该进程无法继续执行下去。它只好放弃CPU。等待读文件这一事件的完成。这个进程的状态就由运行态变为阻塞态。不同的组塞原因对应不同的阻塞队列。 ③阻塞---- > 就绪 处于阻塞状态的进程所等待的事件发生了,例如读数据的操作完成,系统就把该进程的状态由阻塞态变为就绪态。此时该进程就从阻塞队列中出来,进入到就绪队列中,然后与就绪队列中其他进程竞争CPU。 ④运行— >就绪 正在运行的进程如果用完了本次分配给它的CUP时间片,它就得从CPU上退下来,暂停运行。该进程的状态就从运行态变为就绪态,以后进程点调度程序选中它,它就又可以继续运行了。 4、为了找出当前用户运行的所有进程的信息,可以使用下述哪个命令(B) A.ps -a B.ps -u C.ls -a D.ls -l 5、下述命令的功能各是什么 A.ps B.ps -l C.ps -el D.ps ru 参考链接:https://blog.csdn.net/weixin_33774883/article/details/92579429 6、kill命令是如何终止一个进程的? Kill命令是通过向进程发送指定的信号来结束相应的进程(pid)的.在默认情况下,采用编号为15的TERM信号。TERM信号将终止所有不能捕获该信号的进程。对于那些可以捕获的进程就要用编号为9的KILL信号,强行“杀掉”该进程。 7、如果你发现有一个程序很长时间执行不完应采取什么措施 获取要终止程序进程的PID号,可以使用如下命令查询:ps -aux 然后使用kill命令,杀死进程:kill -9 PID号

第四章补充 1、Linux系统一般采用哪种文件系统?其构造形式如何? Linux主要使用的文件系统是ext2、ext3和ext4。ext3是ext2的升级版本,加入了记录数据的日志功能。ext4是ext3文件系统的后继版本,是扩展日志式文件系统。 ext2文件系统中的文件信息都保存在数据块中。在同一个ext2文件系统中,所有数据块的大小一样。ext2文件系统将逻辑块划分成块组,每个块组重复保存着一些有关整个文件系统的关键信息以及实际的文件和目录的数据块。系统引导块总是介质上的第一数据块,只有根文件系统才放有引导程序。 2、什么是块组?什么是超级块?超级块的功能是什么? Linux用的是虚拟文件系统,块组是相当于windows系统的硬盘分区,比如c盘d盘。 超级块位于块组的最前面,描述文件系统整体信息的数据结构, 主要描述文件系统的目录和文件的静态分布情况,以及描述文件系统的各种组成结构的尺寸、数量等。 Linux主要使用的文件系统是ext2和ext3,各自划分成若干块组。每个块组重复保存着一些有关整个文件系统的关键信息,以及真正的文件和目录的数据块,其中包含超级块、块组描述结构、块位示图、索引节点位示图、索引节点表和数据块。 超级块位于每个块组的最前面,其中包含有关该文件系统的全部关键参数。当计算机加电进行引导或第1次遇到该文件系统时,就把超级块中的信息读入内存。超级块中包含标识文件系统类型的幻数、文件系统中的盘块数量、修改标记及其他关键管理信息。 超级块中包含有文件系统本身的大小和形式的基本信息,文件系统管理员可以利用这些信息来使用和维护文件系统。 3、什么是索引节点?索引节点主要有哪些内容?它与文件有何关系? 索引节点又被称为I节点,是一个结构数组,其中包含有关该文件的全部管理信息。 索引节点主要包括以下内容: 文件模式,文件属主信息,文件大小,时间戳,文件链接计数,数据块索引表等。 ext2文件系统的索引节点起着文件控制块的作用,利用这种数据结构可对文件进行控制和管理。每个文件都只有一个索引节点。系统给每个索引节点分配了一个号码,也就是该节点在数组中的索引号,称为索引节点号。 索引节点与文件的关系:Linux为每个文件分配一个称为索引节点的号码inode,可以将inode简单理解成一个指针,它永远指向本文件的具体存储位置。系统是通过索引节点(而不是文件名)来定位每一个文件。文件系统处理文件所需要的所有信息都放在称为索引节点的数据结构中。文件名可以随时更改,但是索引节点对文件是唯一的,并且随文件的存在而存在。一个文件系统允许的inode节点数是有限的,如果文件数量太多,即使每个文件都是0字节的空文件,系统最终也会因为节点空间耗尽而不能再创建文件. 4、为什么要设立虚拟文件系统(VFS)?它与实际文件系统的关系是怎样的? Linux系统可以支持多种文件系统,为此,必须使用一种统一的接口,这就是虚拟文件系统(VFS)。通过VFS将不同文件系统的实现细节隐藏起来,从外部看上去所有的文件系统都是一样的。 VFS是建立在具体文件系统之上的,VFS必须管理所有的文件系统。用户程序(进程)通过有关文件系统操作的系统调用进入系统空间,然后经由VFS才可使用Linux系统中具体的文件系统。 5、 Linux系统通常为什么要把硬盘划分为多个文件系统?简述文件系统安装的基本过程。 一个硬盘上可以同时存在多个文件系统,每个文件系统占据硬盘的一个独立分区。Linux文件系统可以根据需要随时装卸,从而实现文件存储空间的动态扩充和信息安全。在系统初启时,只有根文件系统,其他的文件系统可以根据需要作为子系统动态地安装到主系统中,已安装的子文件系统也可从整个文件系统上卸下来,恢复安装前的独立状态。 文件系统安装的基本过程是:超级用户可以使用命令mount将新文件系统安装到主文件系统中。该命令带有3个主要参数:要安装的文件系统类型、该文件系统所在分区名和安装新文件系统的路径名(即安装点)。执行该命令时,Linux系统内核必须首先检查有关参数的有效性。VFS首先应找到要安装的文件系统,通过查找由file_systems指针指向的链表中的每一个file_system_type数据结构来搜索已知的文件系统(该结构包含文件系统的名字和指向VFS超级块读取程序地址的指针),当找到一个匹配的名字时,就可以得到读取文件系统超级块的程序的地址。接着要查找作为新文件系统安装点的VFS索引节点,并且在同一目录下不能安装多个文件系统。VFS安装程序必须分配一个VFS超级块(super_block),并且向它传递一些有关文件系统安装的信息。申请一个vfsmount数据结构(其中包括存储文件系统的块设备的设备号、文件系统安装的目录和一个指向文件系统的VFS超级块的指针),并使它的指针指向所分配的VFS超级块。当文件系统安装以后,该文件系统的根索引节点就一直保存在VFS索引节点缓存中。 6、 Linux系统采用哪两种内存管理技术?各自的基本实现思想是什么? Linux系统采用交换和请求分页存储管理两种内存管理技术。 请求分页存储管理技术是在简单分页存储技术基础上发展起来的,它的基本思想是:当进程运行时,不必把整个进程映像都放在内存中,只需在内存保留当前用到的那一部分页面。当进程访问到某些尚未在内存的页面时,就由核心把这些页面装入内存。这种策略使进程的虚拟地址空间映射到机器的物理空间时具有更大的灵活性,通常允许进程的大小可大于可用内存的总量,并允许更多进程同时在内存中执行。 内存交换的基本思想是:当系统中出现内存不足时,Linux内存管理子系统就释放一些内存页,从而增加系统中空闲内存页的数量,此任务是由内核的交换守护进程kswapd完成的。 7、何谓虚拟存储器?Linux系统如何支持虚存? 虚拟存储器:以透明的方式给用户提供一个比实际内存大的多的作业地址空间。它不是任何实际的物理存储器,而是一个非常大的存储器的逻辑模型。 用户程序(进程)通过有关文件系统操作的系统调用界面进入系统空间,然后经由VFS才可使用Linux系统中具体的文件系统。就是说,VFS是建立在具体文件系统之上的,它为用户程序提供一个统一的、抽象的、虚拟的文件系统界面。这个抽象的界面主要由一组标准的、抽象的有关文件操作构成,以系统调用的形式提供用户程序,如read(),write(),lseek()等。所以VFS必须管理所有的文件系统。它通过使用描述整个VFS的数据结构和描述实际安装的文件系统的数据结构来管理这些不同的文件系统。 8、 Linux系统中交换空间为何采用连续空间? 作为交换空间的交换条件实际就是普通文件,但它们所占的磁盘空间必须是连续的,即文件中不能存在“空洞”。 因为进程使用交换空间是临时性的,速度是关键性问题,系统一次进行多个盘块I/O传输比每次一块、多次传输的速度要快,所以核心在交换设备上是分配一片连续空间,而不管碎片的问题。 9、 Linux为什么要采用三级页表?该机制如何工作? 由于Linux系统中页面的大小为4GB,进程虚存空间要划分为 个页面。如果直接用页表描述这种映射关系,那么每个进程的面表就要有个表项,而用大量的内存资源来存放页表办法是不可取,故Linux采用三级页表; 把一个线性地址映射成物理地址就分为以下四步:(1)以线性地址中最高位段作为下标在PGD中找到相应的表现,该表项指向相应的PMD。(2)以线性地址中第二个位段作为下标在PMD中找到相应的表项,该表项指向相应的PT。(3)以线性地址中第三个位段作为下标在PT中找到相应的表项,该表项指向相应的物理页面(即该物理页面的起始地址)(4)以线性地址中的最低位段是物理页面内的相对位移量,此位移量与该物理页面的起始地址相加就得到相应的物理地址。 10、 Linux信号机制是如何实现进程通信的? Linux信号机制基本上是从Unix系统中继承过来的。早期Unix系统中的信号机制比较简单和原始,后来在实践中暴露出一些问题,因此,把那些建立在早期机制上的信号叫做"不可靠信号",信号值小于SIGRTMIN(Red hat 7.2中,SIGRTMIN=32,SIGRTMAX=63)的信号都是不可靠信号。这就是"不可靠信号"的来源。它的主要问题是: 1.进程每次处理信号后,就将对信号的响应设置为默认动作。在某些情况下,将导致对信号的错误处理;因此,用户如果不希望这样的操作,那么就要在信号处理函数结尾再一次调用signal(),重新安装该信号。 2.信号可能丢失,后面将对此详细阐述。因此,早期Unix下的不可靠信号主要指的是进程可能对信号做出错误的反应以及信号可能丢失。 Linux支持不可靠信号,但是对不可靠信号机制做了改进:在调用完信号处理函数后,不必重新调用该信号的安装函数(信号安装函数是在可靠机制上的实现)。因此,Linux下的不可靠信号问题主要指的是信号可能丢失。 信号值位于SIGRTMIN和SIGRTMAX之间的信号都是可靠信号,可靠信号克服了信号可能丢失的问题。Linux在支持新版本的信号安装函数sigation()以及信号发送函数sigqueue()的同时,仍然支持早期的signal()信号安装函数,支持信号发送函数kill()。 注:不要有这样的误解:由sigqueue()发送、sigaction安装的信号就是可靠的。事实上,可靠信号是指后来添加的新信号(信号值位于SIGRTMIN及SIGRTMAX之间);不可靠信号是信号值小于SIGRTMIN的信号。信号的可靠与不可靠只与信号值有关,与信号的发送及安装函数无关。目前linux中的signal()是通过sigation()函数实现的,因此,即使通过signal()安装的信号,在信号处理函数的结尾也不必再调用一次信号安装函数。同时,由signal()安装的实时信号支持排队,同样不会丢失。 11、管道文件如何实现两个进程间的通信? 例如:$ls|more 在执行这个命令时,要创建一个管道文件和两个进程:“|”对应管道文件;命令ls对应一个进程,它向该文件中写入信息,称为写进程;命令more对应另一个进程,它从文件中读出信息,称为读进程。由系统自动处理二者间的同步、调度和缓冲。管道文件允许两个进程按“先入先出(FIFO)”方式传送数据,而它们可以彼此不知道对方的存在。管道文件不属于用户直接命名的普通文件,它是利用系统调用pipe()创建的、在同族进程间进行大量信息传送的打开文件(其实只存在于内存中)。 12、 Linux系统中设备驱动分层结构是怎样的?如何实现与设备的无关性? 在面向对象的程序设计中,可以为某一类相似的事物定义一个基类,而具体的事物可以继承这个基类中的函数。如果对于继承的这个事物而言,其某函数的实现与基类一致,那它就可以直接继承基类的函数;相反,它可以重载之。这种面向对象的设计思想极大地提高了代码的可重用能力,是对现实世界事物间关系的一种良好呈现。 Linux内核完全由C语言和汇编语言写成,但是却频繁用到了面向对象的设计思想。在设备驱动方面,往往为同类的设备设计了一个框架,而框架中的核心层则实现了该设备通用的一些功能。同样的,如果具体的设备不想使用核心层的函数,它可以重载之。 Linux系统采用设备文件统一管理硬件设备,从而将硬件设备的特性及管理细节对用户隐藏起来,实现用户程序与设备无关性。 13、 Linux系统中可安装模块的思想是什么? 可安装模块是可以在系统运行时动态地安装和拆卸的内核模块,即经过编译但尚未连接的目标文件(后缀为.o)。 利用这一机制,根据需要在不必对内核重新编译连接的条件下,将可安装模块动态插入运行中的内核,成为其中一个有机组成部分或者从内核卸载已安装的模块。 设备驱动程序或者与设备驱动紧密相关的部分(如文件系统)都是利用可安装模块实现的。 14、 Linux系统怎样处理系统调用? Linux的系统调用是通过中断指令“INT 0x80”实现的, 当CPU执行到中断指令“INT 0x80”时,硬件就做出一系列响应。 CPU穿过陷阱门,从用户空间进入系统空间。 相应地,进程的上下文从用户堆栈切换到系统堆栈。 接着运行内核函数system_call()。 首先,进一步保存各寄存器内容; 接着调用system_trace(),以系统调用号为下标检索系统调用入口表sys_call_table, 从中找到相应的函数;然后,转去执行该函数,完成具体的服务。

第五章 文本编辑 1、进入和退出vi的方法有哪些? 答:进入vi的方法:在系统提示符(设为$ )下输入命令vi和想要编辑(建立)的文件名,便可进入vi,如:$ vi filename 退出vi的方法: (1) :wq 把编辑缓冲区的内容写到你编辑的文件中,退出编辑器,回到 shell下。 (其操作过程是,先输入冒号“: ”,再输入命令wq。以下命令操作相同。) (2) :ZZ(大写字母ZZ) 仅当做过修改时才将缓冲区内容写到文件上。 (3) :x 与:ZZ相同。 (4) :q! 强行退出vi。感叹号(!)告诉vi,无条件退出,丢弃缓冲区内容。 2、 vi编辑器的工作方式有哪些?相互间如何转换?(课本p86) 答:vi编辑器有三种工作方式: 命令方式、插入方式和ex转义方式。 ●Shell命令→vi的命令方式:输入命令vi进入编辑器时,就处于vi的命令方式。 ●vi的命令方式→Shell命令:在vi的命令方式下使用退出命令,可以返回shell命令方式。 ●vi命令方式→插入方式:通过输入vi的插入命令(i)、附加命令(a)、打开命令(o)、替换命令(s)、修改命令©或取代命令®可以从命令方式进入到插入方式。 ●插入方式→vi命令方式:由插入方式回到命令方式的办法是按Esc键(通常在键盘的左上角)。 ●vi的命令方式→Ex转义方式:在vi的命令方式下,输入一个冒号(:),就进入Ex转义方式。 ●ex转义方式→vi的命令方式:转义命令执行后,自动回到vi命令方式。 3、 建立一个文本文件,如会议通知。 (1)建立文件notes,并统计其大小。 (2)重新编辑文件notes,加上一个适当的标题。 (3)修改notes中开会的时间和地点。 (4)删除文件中第3行,然后予以恢复。 (1)鼠标右键,打开终端,输入vi notes 接着输入i,a,o等将其变为插入方式 在随便打几个字。打完按下esc退出插入方式 然后输入:wq保存 接着在终端中输入:du -sk notes。 (2)在终端中再次输入vi notes 按下E键进行文件修改 输入大写字母O,插入标题 (3)在命令方式下输入:2,$s/xxxx/地点/g 表示替换第 2行开始到最后一行中每一行所有xxxx改为地点 (4)在命令方式下将光标移至第三行 连续按两下d键(也就是输入dd命令) 删除第三行。 在命令方式下按下u(也就是输入u命令)复原。 4、建立一个文本文件,将光标移至第5行上。分别利用c,C和cc命令进行修改。 都是在命令方式下输入。 c: c+左右键+新文本+esc 会先删除你光标所在内容,再进行插入。 C:C +新文本+esc cc:cc +新文本+esc 5、在vi之下,上、下、左、右移动光标的方式有哪些? 答:h 光标左移, 如果在按h 命令前输入数字n ,则光标左移n 个字符; l 光标右移 ,如果在按l 命令前输入数字n, 则光标右移n 个字符; j 光标上移, 如果在按j 命令前输入数字n, 则光标上移n 个字符; k 光标下移, 如果在按k 命令前输入数字n ,则光标下移n 个字符; 0 (零) 光标移到行首; $ 光标移到行尾; H 光标移到屏幕上显示的第一行 (并不一定是文件头); L 光标移到屏幕上显示的最后一行 (并不一定是文件尾); M 光标移到屏幕的中间一行; nG 光标移到第 n 行; w或W 将光标右移至下一个单词的词首; e 或E 如果光标起始位置处于单词内(即非单词尾处),则该命令将把光标移到本单词词尾;如果光标起始位置处于单词尾,则该命令将把光标移动到下一个单词的词尾。 b 或B 如果光标处于所在单词内(即非单词首),则该命令将把光标移至本单词词首;如果光标处于所在单词的词首,则该命令将把光标移到上一个单词的词首; Ctrl+G 状态命令, 显示当前编辑文档的状态。包括正在编辑的文件名、是否修改过、当前行号、文件的行数以及光标之前的行占整个文件的百分比。 此外 ,也可以通过以下末行模式下的命令完成光标在整个文件中的移动操作: :n 光标移到文件的第n 行; :💲 光标移到文件的最后一行; 6、解释下述vi命令的功能 20G 光标移动到20行第一个非空字符 18| 光标移动到18列 x 删除当前光标上的字符 3rk 把光标起的三个字符改成k 5s 删5个字符,然后进入插入模式(s 是 substitute) 7S 删7行,插入 /this 查找 this并高亮 ?abc?-5 反向查找abc,而且是从倒数第五个起 补充: dM 删除到窗口的中间行 6H 光标上移到6行(窗口顶端的第6行) d4B 向上删除4行 cw 从光标位置更改一个字(word) 10cc 删除10行,然后在上面插入 mg 当前位置标志为g (mark) 7、如果希望进入vi后光标位于文件的第10行上,应输入什么命令? 答:10G 8、不管文件中某一行被编辑了多少次,总能把它恢复成被编辑之前的样子,应使用什么命令? 答:u 9、要将编辑文件中所有的字符串s1全部用字符串s2替换,包括在一行中多次出现的字符串,应使用什么命令格式? 答:g/ s1 / s // s2 /g

第五章补充 1、如果希望进入vi后光标位于文件的第10行上,应输入什么命令? 答:设要编辑的文件名是abc,且该文件大于10行。在shell提示符后输入以下命令: vi +10 abc

第六章 C程序编译工具 1、gcc编译过程一般分为那几个阶段?各阶段的主要工作是什么? (1)预处理阶段:读取C语言源文件,对其中以#开头的指令(伪指令)和特殊符号进行 (2)编译阶段:对预处理之后的输出文件进行词法分析和语法分析,在确定各成分都符合语法规则后,将其“翻译”为功能等价的中间代码表示或汇编代码。 (3)汇编过程:把汇编语言代码翻译成目标机器代码。 (4)连接阶段:将一个文件中引用的符号(如变量或函数调用)与该符号在另一个文件中的定义连接起来 2、对C语言程序进行编译时,针对以下情况应使用的编译命令行是什么? (1)只生成目标文件,不进行连接:gcc -c 源文件名 (2)在预处理后的输出中保留源文件中的注释: gcc -C 源文件名 (3)将输出写到file指定的文件中: gcc -o file源文件名 (4)指示编译程序在目标代码中加入供调试程序gdb使用的附加信息: gcc -g 源文件名 (5)连接时搜索由library命名的库:gcc -llibrary源文件名 3、通常,程序中的错误按性质分为哪三种? (1)编译错误,即语法错误。这是在编译阶段发生的错误,主要是程序代码中有不符合所用编程语言语法规则的错误。 (2)运行错误。这种错误在编译时发现不了,只在运行时才显现出来。 (3)逻辑错误。这种错误即使在运行时也不显示出来,程序能正常运行,但结果不对。 4、gdb主要帮助用户在调试程序时完成哪些工作? 答:(1)启动程序,按用户要求影响程序的运行行为。 (2)使运行程序在指定条件处停止。 (3)当程序停止时,检查它出现了什么问题。 (4)动态改变程序的执行环境,这样就可以先纠正一个错误,然后再纠正其他错误。 5、调试下面的程序: /badprog.c错误地访问内存/ #include #include int main(int argc,char **argv) { char *p; int i; p=malloc(30); strcpy(p,”not 30 bytes”); printf(“p=\n”,p); if(argc==2){undefined if(strcmp(argv[1],”-b”)==0) p[50]=’a’; else if(strcmp(argv[1],”-f”)==0){undefined free§; p[0]=’b’; } } /free§;/ return 0; } 答:先利用gcc -g badprog.c -o badprog对源文件进行编译;通过编译后,运行badprog文件,看看出现什么问题;然后利用gdb工具调试该程序。 6、调试下面的程序: /callstk.c有3个函数调用深度的调用链/ #include #include int make_key(void); int get_key_num(void); int number(void); int main(void) { int ret=make_key(); printf(“make_key returns %d\n”,ret); exit(EXIT_SUCCESS); } int make_key (void) { int ret=get_key_num(); return ret; } int get_key_num(void) { int ret=number(); return ret; } int number(void) { return 10; } 答: 使用gdb调试callstk.c 用指令:gcc -g -o callstk callstk.c 编译得到可运行的callstk文件,再调用gdb进行测试 http://www.doc88.com/p-6819627056039.html(第四章)

第六章补充 1、 GNU make的工作过程是怎样的? 答:GNU make的工作过程是: ① 依次读入各makefile文件; ② 初始化文件中的变量; ③ 推导隐式规则,并分析所有规则; ④ 为所有的目标文件创建依赖关系链; ⑤ 根据依赖关系和时间数据,确定哪些目标文件要重新生成; ⑥ 执行相应的生成命令。 2. makefile的作用是什么?其书写规则是怎样的? 答: makefile文件是make命令必备的一个文本形式的数据库文件,它定义了一系列规则,记录了文件之间的依赖关系及在此依赖关系基础上所应执行的命令序列,即定义了一系列规则来指定哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译等。此外,还可以有变量定义、注释等。 makefile的通用形式如下所示: 目标文件:[相依文件…] 命令1[#注释] … 命令n[#注释] 其书写规则是:依赖行从一行的开头开始书写。各命令行单独占一行,每个命令行的第一个字符必须是制表符,而不能使用8个空格;#号后的内容为注释。它可以位于一行的开头;在依赖行上,目标文件和相依文件之间要用一个或两个冒号分开。一个目标文件可以出现在多个依赖行上,此时所有的依赖行的类型必须一致(一个冒号或两个冒号)。 3、设某个正在开发的程序由以下内容组成: ① 4个C语言源文件:a.c,b.c,c.c和d.c。设b.c和d.c都使用了defs.h中的声明。 ② 汇编语言源文件assmb.s被某个C语言源文件调用。 ③ 使用了在/home/user/lib/libm.so中的一组例程。 设最后生成的可执行文件名为prog。试编写相应的makefile文件。 答:先根据题意,画出依赖关系图,再编写makefile文件。makefile文件如下所示: prog:a.o b.o c.o d.o assmb.o gcc a.o b.o c.o d.o assmb.o -L/home/user/lib -lm –o prog a.o:a.c gcc –c a.c b.o:b.c defs.h gcc -c b.c c.o:c.c gcc -c c.c d.o:d.c defs.h gcc -c d.c assmb.o:assmb.s as -o assmb.o assmb.s clean: rm prog *.o

第七章 shell程序设计 1、常用的 shell有哪几种? Linux系统中默认的shell是什么? 答:linux几种常见的Shell:sh、bash、csh、tcsh、ash Linux下默认的Shell是Bourne Again Shell(bash) 2、 简述shell的主要功能。bash有什么特点? 答:Shell是系统的用户界面,提供了用户与内核进行交互操作的一种接口 它接收用户输入的命令并把它送入内核去执行 引用、 多命令执行、 命令行展开:~ {}、 命令的执行状态结果、 多命令执、 命令补全:$PATH、 路径补全:TAB、 命令hash缓存表、 命令别名:alias, unalias 命令历史:history、 文件名通配符:glob、 变量、 bash快捷键。 3、执行shell脚本的方式是哪些? 答:(1)输入定向到shell脚本。 该方式用输入重定向方式让shell从给定文件中读入命令行,并进行相应处理。其一般形式是: $bash\💲student*” 7、显示环境变量的设置情况,说明各自的意义。 答:只对当前的shell 起作用的环境变量 (1)控制台中设置,不赞成这种方式,因为他只对当前的shell 起作用,换一个shell设置就无效了: 直接控制台中输入 : P A T H = " PATH="PATH="PATH":/NEW_PATH (关闭shell Path会还原为原来的path) 对所有的用户的都起作用的环境变量 (2)修改 /etc/profile 文件,如果你的计算机仅仅作为开发使用时推存使用这种方法,因为所有用户的shell都有权使用这个环境变量,可能会给系统带来安全性问题。这里是针对所有的用户的,所有的shell vi /etc/profile 在/etc/profile的最下面添加: export PATH=“P A T H : / N E W P A T H " 针 对 当 前 特 定 的 用 户 起 作 用 的 环 境 变 量 ( 3 ) 修 改 b a s h r c 文 件 , 这 种 方 法 更 为 安 全 , 它 可 以 把 使 用 这 些 环 境 变 量 的 权 限 控 制 到 用 户 级 别 , 这 里 是 针 对 某 一 特 定 的 用 户 , 如 果 你 需 要 给 某 个 用 户 权 限 使 用 这 些 环 境 变 量 , 你 只 需 要 修 改 其 个 人 用 户 主 目 录 下 的 . b a s h r c 文 件 就 可 以 了 。 v i   / . b a s h r c 在 下 面 添 加 : E x p o r t P A T H = " PATH:/NEW_PATH" 针对当前特定的用户起作用的环境变量 (3)修改bashrc文件,这种方法更为安全,它可以把使用这些环境变量的权限控制到用户级别,这里是针对某一特定的用户,如果你需要给某个用户权限使用这些环境变量,你只需要修改其个人用户主目录下的 .bashrc文件就可以了。 vi ~/.bashrc 在下面添加:Export PATH="PATH:/NEW  P ​  ATH"针对当前特定的用户起作用的环境变量(3)修改bashrc文件,这种方法更为安全,它可以把使用这些环境变量的权限控制到用户级别,这里是针对某一特定的用户,如果你需要给某个用户权限使用这些环境变量,你只需要修改其个人用户主目录下的.bashrc文件就可以了。vi /.bashrc在下面添加:ExportPATH="PATH:/NEW_PATH”。 9、分析下列shell脚本的功能: count=KaTeX parse error: Expected ‘EOF’, got ‘#’ at position 1: #̲ cmd=echo while…count -gt 0] do cmd= “$cmd $$count ” count=‘expr $count-1’ done eval c m d 答 : c o u n t = cmd 答:count=cmd答:count=# # 获取脚本参数个数 cmd=echo # 初始化 cmd 变量,赋值为 “echo” while [ KaTeX parse error: Expected 'EOF', got '#' at position 14: count -gt 0] #̲ 如果 count 大于0,执…cmd $$count” # 给cmd重新赋值,变为 “echo ${count的值}” count=‘expr $count-1’ # count减1 done # 之后回到上面的 while 判断 eval $cmd # 执行cmd命令。 类似于执行堆栈操作。 10、 编写一个shell脚本,它把第二个位置参数及其以后的各个参数指定的文件复制到第一个位置参数指定的目录中。 答:#!/bin/bash //调用bash程序对其解释执行,相当与于头文件 dir=$1 //初始化 shift //参数向左移 while [$1] /循环 do file=$1 // 初始化 ,赋值现在位置的参数1 cp $1 $dir //将现位置参数1中的值复制到目录中 shift //参数左移 done ls $dir 显示指定目录中的列表 运行:bash+代码名称+要移动的目录+要移动的文件 11、 编写一个shell脚本,显示当天日期,查找给定的某用户是否在系统中工作。如果在系统中,就发一个问候给他。 答:#!/bin/bash date /显示日期 if who |grep “^$1” /寻找用户 then write $1



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3