Linux基础教程(第二版)课后答案自主整理

注:教材为孟庆昌 路旭强版本,官方未给出课后题标准答案。以下答案均为本人自主整理与编写,如有错误之处,烦请各位斧正,QQ:1626686204

第二章课后题

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、进程有哪几种基本状态?在什么情况下发生各自可能的状态转换?
Linux基础教程(第二版)课后答案自主整理

(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.****.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

未完待续

我会每天坚持整理哒,等我!