Quibank 应用: 已上架 App Store——免费、可离线使用。 下载应用 ↗

20 道启动流程、内核与设备练习题及答案

CompTIA Linux+ 认证考试练习的全部启动流程、内核与设备练习题,附正确答案和简短解析。

开始练习测验 →
  1. 1. 管理员要记录在一台使用 UEFI 固件的 Linux 服务器上,从按下电源键到出现登录提示之间发生的过程。下面哪个顺序是正确的?

    • A.固件按启动项运行 GRUB,GRUB 把内核和 initramfs 载入内存,内核先在 initramfs 中启动并加载存储驱动,随后切换到真正的根文件系统,再把 systemd 作为 PID 1 运行✓ 答案
    • B.固件运行 GRUB,GRUB 自己挂载真正的根文件系统并交给内核,内核随后在内存中生成 initramfs 并切换进去,最后把 systemd 作为 PID 1 运行起来
    • C.固件按启动项直接加载内核,内核再加载 GRUB 以取得自己的参数,接着挂载真正的根文件系统并解开 initramfs,最后把 systemd 作为 PID 1 运行
    • D.固件运行 GRUB,GRUB 从引导分区把 systemd 作为 PID 1 启动,systemd 再加载内核与 initramfs,内核挂载真正的根文件系统,之后由 systemd 启动其余单元

    固件只会运行启动项中指定的引导程序;GRUB 随后把内核镜像和 initramfs 一起载入内存。内核先把 initramfs 当作临时根,从中取得访问真正根设备所需的模块,然后执行 switch_root 并运行 /sbin/init——在 systemd 发行版上就是作为 PID 1 的 systemd,由它拉起系统其余部分。

    编号 QB-HRGTGA依据: bootup(7) systemd boot process documentation; CompTIA Linux+ objectives, System Management: basic boot process报告此题的问题

  2. 2. 在一台基于 RPM 的服务器上,管理员需要让内核参数 transparent_hugepage=never 在每次启动时都生效。受支持的做法是什么?

    • A.手工编辑生成出来的 /boot/grub2/grub.cfg 里的 linux16 行,因为引导程序在启动过程中真正读取的就是这个文件
    • B.把该参数加进 /etc/default/grub 的 GRUB_CMDLINE_LINUX,再用 grub2-mkconfig 重新生成 grub.cfg✓ 答案
    • C.把该参数写入 /proc/cmdline,因为内核每次启动都会重新读取这个文件,并据此重建自己的完整命令行,让设置持久生效
    • D.在 /etc/sysctl.d/ 下新建一个文件写入该参数,再用 sysctl --system 加载它,使该设置在每次启动时被应用

    grub.cfg 是生成出来的文件:下一次内核更新或任何一次运行配置生成器都会覆盖手工改动。真正的源头是 /etc/default/grub 以及 /etc/grub.d/ 下的脚本,grub2-mkconfig 会据此重写 grub.cfg。/proc/cmdline 只是内核只读输出,而 sysctl 可调参数与启动时的内核参数是两套不同机制。

    编号 QB-Y8YAR8依据: GNU GRUB manual, simple configuration handling (/etc/default/grub and grub-mkconfig); grub2-mkconfig(8)报告此题的问题

  3. 3. 一台服务器在修改内核参数后重启,管理员想确认当前运行的内核实际收到了哪些参数。哪个来源能显示这一点?

    • A./etc/default/grub,因为引导程序在移交控制权时会把该文件里的取值原样传给内核
    • B./boot/grub2/grub.cfg,因为被选中的那个菜单项记录了内核最终收到的内容
    • C./proc/cmdline,因为内核会在这个文件中公开自己启动时所使用的完整命令行✓ 答案
    • D./etc/sysctl.conf,因为 systemd 会把启动时的内核参数回写到这个文件里保存

    procfs 中的 /proc/cmdline 是内核自己报告的启动命令行,内容与引导程序移交时完全一致。GRUB 的那些文件只描述“本应传入”的内容,一旦配置没有重新生成或启动时选了别的菜单项,就会与实际不符。

    编号 QB-GR5GB9依据: proc(5) manual page, /proc/cmdline报告此题的问题

  4. 4. 一台服务器启动后进入图形登录界面,但管理员只需要在本次启动中进入一个最小化的单用户 shell,且不做任何永久性改动。应该怎么做?

    • A.在 GRUB 菜单中按 e,在 linux 行后追加 systemd.unit=rescue.target,然后只启动这一次✓ 答案
    • B.现在就运行 systemctl isolate rescue.target 切过去,它会同时改掉默认目标,使以后每次启动也都用它
    • C.编辑 /etc/inittab,把 initdefault 那一行设为 1,因为 systemd 每次启动仍会读取该文件
    • D.先用救援介质运行 systemctl set-default rescue.target,然后重启服务器进入该模式

    在引导程序里编辑被选中的菜单项,只会改变本次启动传给内核的命令行,而 systemd 会按 systemd.unit= 指定的目标启动。set-default 会改写 default.target 符号链接,属于永久改动;isolate 是切换正在运行的系统而不是选择启动模式;systemd 根本不使用 /etc/inittab。

    编号 QB-392B9C依据: systemd(1) kernel command line option systemd.unit=; GNU GRUB manual, editing menu entries at boot报告此题的问题

  5. 5. 在基于 systemd 的发行版上,内核切换到真正的根文件系统之后,是什么决定了随后启动哪些服务?

    • A.GRUB 把 /etc/default/grub 中的一份服务清单交给 systemd,由 systemd 按清单顺序逐个启动这些服务
    • B.内核读取 /etc/inittab 中的运行级字段,并按编号顺序逐个运行对应 /etc/rc?.d 目录下的脚本
    • C.内核把 systemd 作为 PID 1 执行,systemd 随后激活由 default.target 拉起的那些单元✓ 答案
    • D.initramfs 继续作为 PID 1 运行,并在移交根文件系统之前先启动 /etc/initramfs-tools 中列出的那些服务

    内核在启动末尾执行第一个用户空间进程,即 PID 1,在这类发行版上就是 systemd。systemd 随后解析 default.target——它是指向单元目录的符号链接——并激活该目标所要求的全部单元,这就相当于选定了运行级。

    编号 QB-KR7GUC依据: systemd(1) and bootup(7); systemd.special(7) description of default.target报告此题的问题

  6. 6. 发行版为什么要提供一个初始内存文件系统(initramfs),而不是让内核直接挂载根文件系统?

    • A.因为在得到内存镜像提供的一份 systemd 副本之前,内核无法运行任何用户空间程序
    • B.因为引导程序只能寻址磁盘的一小部分,所以内核余下的部分要由内存镜像来提供
    • C.因为根文件系统必须先做错误检查,而只有内存镜像里的代码才被允许运行 fsck
    • D.因为访问根设备所需的模块,例如存储控制器和卷管理驱动,并没有编进内核镜像里✓ 答案

    通用内核都做得小而模块化,因此承载根文件系统的那个具体控制器、device mapper 目标或加密卷所需的驱动,本身是放在根文件系统上的可加载模块。initramfs 打破了这个循环:它被解开到内存中,提供这些模块,装配好根设备,然后再切换过去。

    编号 QB-29PY3B依据: Linux kernel documentation, initrd/initramfs (admin-guide); dracut(8) description of the initramfs role报告此题的问题

  7. 7. 在一台基于 Debian 的服务器上安装了新的存储控制器驱动,重启后启动过程停在紧急 shell,并提示根设备不存在。最可能的修复办法是什么?

    • A.用 grub-install 重装引导程序,因为进入紧急 shell 说明引导程序已经丢失了它的设备映射
    • B.用 update-initramfs -u -k all 重建初始内存文件系统,使挂载根设备时新驱动已就位✓ 答案
    • C.用 mkswap 重建交换区并把它启用,因为没有可用的交换空间内核就无法完成整个启动
    • D.从救援介质对根文件系统运行 e2fsck,因为根设备不存在通常意味着超级块已经损坏

    initramfs 是一份快照:之后才装进 /lib/modules 的驱动并不在其中,因此早期启动环境看不到根设备,只能落到紧急 shell。重新生成该镜像即可把新模块嵌进去,在基于 Debian 的系统上用 update-initramfs,而基于 RPM 的系统对应的是 dracut -f。

    编号 QB-JRU5PB依据: update-initramfs(8) and initramfs-tools(7)报告此题的问题

  8. 8. 管理员运行 lsmod 看到如下输出: Module Size Used by nvme_core 155648 3 nvme loop 32768 0 随后 rmmod nvme_core 执行失败。这里第三列说明了什么?

    • A.该模块仍在被使用:有三处引用,且 nvme 模块依赖它,因此在这些引用释放之前无法卸载✓ 答案
    • B.该模块已被编进内核镜像,因此它仍会出现在这个列表里,但在系统运行期间永远无法把它卸载
    • C.该模块已在 /etc/modprobe.d 中被列入黑名单,而在删除该条目之前被列黑的模块无法卸载
    • D.该模块是从 /lib/modules 之外的路径加载的,因此 rmmod 拒绝卸载它,只能改用 insmod

    lsmod 输出的是 /proc/modules 的内容:模块名、大小、使用计数,以及依赖它的模块名。rmmod 只能卸载空闲模块,因此使用计数非零就会失败;正确做法是先释放依赖它的模块,或用 modprobe -r 把该模块连同已不再使用的依赖一起卸载。

    编号 QB-59RYKE依据: lsmod(8) and proc(5) /proc/modules; rmmod(8) and modprobe(8) -r报告此题的问题

  9. 9. 用 insmod /lib/modules/$(uname -r)/kernel/drivers/net/example.ko 加载驱动时报出未知符号错误,而 modprobe example 却能顺利加载同一个驱动。原因是什么?

    • A.insmod 把模块加载到用户空间,那里看不到内核符号,而 modprobe 才会把它加载到内核空间去
    • B.modprobe 加载的是已签名的模块副本,insmod 加载的是未签名文件,而未签名模块通不过符号检查
    • C.insmod 只能加载已经写在 /etc/modules-load.d 里的模块,其他所有模块都必须改用 modprobe 加载
    • D.modprobe 会读取依赖关系映射,先加载该驱动所需要的其他模块,而 insmod 只加载给它的那一个文件✓ 答案

    insmod 是最小化工具:它只插入交给它的那个文件路径,不做任何解析,因此凡是由别的模块提供的符号都会被报为未知。modprobe 接受模块名,查阅由 depmod 生成的依赖信息,按顺序先插入前置模块,再加载所请求的模块。

    编号 QB-NRW57F依据: modprobe(8) and insmod(8) manual pages报告此题的问题

  10. 10. 厂商提供的驱动文件已复制到 /lib/modules/$(uname -r)/extra/ 目录下,但 modprobe 仍报告找不到该模块。接下来应该运行哪个命令?

    • A.insmod,这样模块就会在内核中注册,之后 modprobe 加载时也就能看到它了
    • B.dracut -f,这样该模块会被加入初始内存文件系统,modprobe 之后就能找到它
    • C.modinfo,这样模块的元数据会被写入内核,modprobe 随后就能解析这个模块名
    • D.depmod,这样 modprobe 查找时所用的模块依赖映射会被重建并收录这个新文件✓ 答案

    modprobe 并不会在运行时遍历模块目录树,而是在 depmod 生成的索引文件(主要是 modules.dep 及其二进制形式)中查名字。只要没有针对该内核运行 depmod,刚复制进去的文件就是不可见的,因此手工放入模块后必须紧接着运行 depmod。

    编号 QB-VK947E依据: depmod(8) and modules.dep(5)报告此题的问题

  11. 11. /etc/modprobe.d/local.conf 中已写有 blacklist ex_drv,但重启之后 lsmod 仍显示该模块处于已加载状态。原因是什么,又该如何解决?

    • A.黑名单只阻止按名字加载,它其实是被别的模块当作依赖拉起的,应改用 install ex_drv /bin/false✓ 答案
    • B.blacklist 条目需要有配套的 alias 行才起作用,必须在同一个文件里为该模块再加一条 alias
    • C./etc/modprobe.d 下的文件只有 insmod 会读取,该条目必须移到 /etc/modules-load.d
    • D.初始内存文件系统会完全覆盖 modprobe 的这些规则,因此只能把该模块从内核软件包里彻底删掉才行

    blacklist 行只在直接请求该模块名或按别名匹配时才抑制加载;当别的模块把它声明为依赖而拉起时,它并不起作用。用 install ex_drv /bin/false 把该名字映射到一个什么都不做的命令,或在内核命令行上传 modprobe.blacklist=,才能在所有情况下阻止它。

    编号 QB-C44XKD依据: modprobe.d(5), blacklist and install directives报告此题的问题

  12. 12. 某驱动在服务器上工作正常,但它从不出现在 lsmod 的输出里,rmmod 也报告它当前并未加载。最可能的解释是什么?

    • A.该驱动是用 insmod 加载的,而用这种方式加载的模块不会出现在 /proc/modules 中
    • B.该驱动被列入了黑名单,因此内核仍然提供它的功能,只是不把该模块登记为已加载状态
    • C.该驱动是直接编进内核镜像的,而不是运行时加载的,因此没有独立模块可供列出或卸载✓ 答案
    • D.该驱动只在初始内存文件系统里加载,而 switch_root 之后那里加载的模块都会被丢弃

    当某功能在内核构建时被选为内建,它就成了内核镜像本身的一部分,因此在 /proc/modules 中没有条目,也无法卸载;只有构建成可加载模块的功能才能被列出和移除。用 modinfo 或查看当前内核的 modules.builtin 文件,即可确认某个驱动属于哪一种。

    编号 QB-WKMECF依据: modinfo(8); Linux kernel Kbuild documentation on built-in versus loadable modules报告此题的问题

  13. 13. 用 sysctl -w net.ipv4.ip_forward=1 修改了 /proc/sys/net/ipv4/ip_forward 的取值,改动立即生效,但重启之后又消失了。怎样才能让这类设置持久化?

    • A.把该指令加到 /etc/default/grub 里并重新生成引导程序配置,让内核在启动时就收到这个设置
    • B.运行一次 sysctl -p,它会把当前所有运行时取值都写进内核镜像,供以后每一次启动时直接使用
    • C.把该指令写入 /etc/sysctl.d/ 下的文件,启动时即自动应用,之后也可用 sysctl --system 重载✓ 答案
    • D.直接用文本编辑器修改 /proc/sys 下对应的那个文件,因为在那里编辑过的文件会在重启之后保留

    /proc/sys 下的文件只是内核变量的实时窗口:写入只改变正在运行的内核,仅此而已,因为 procfs 并不存放在磁盘上。持久化靠的是启动时读取的配置,也就是 /etc/sysctl.d/ 下的片段文件和 /etc/sysctl.conf,需要时可用 sysctl --system 重新读取。

    编号 QB-D4F9SE依据: sysctl(8) and sysctl.d(5); proc(5) description of /proc/sys报告此题的问题

  14. 14. 某团队需要一种本地文件系统,其自身设计就支持对子卷做低成本的时间点快照,并能通过校验和发现静默的数据损坏。哪种文件系统类型具备这些特性?

    • A.ext4,它的日志会为每个数据块保存第二份副本,因此随时可以把数据恢复到较早的状态
    • B.tmpfs,它在内存中保留一份数据影子副本,每次读取时都与磁盘上的副本做比对校验
    • C.xfs,它基于区段的分配器会保留每个区段的旧版本,因此以后可以把快照回滚回去
    • D.btrfs,它采用写时复制,写入新块而不覆盖原块,并同时对数据和元数据计算校验和✓ 答案

    写时复制意味着被修改的块写到新位置,而旧块仍被引用,因此快照只是对现有块的又一次引用,创建成本几乎为零。btrfs 还同时为数据和元数据保存校验和,这才使它能发现硬件从未报告的损坏。相比之下,日志保障的是崩溃后元数据的一致性,并不是快照机制。

    编号 QB-XKYRHG依据: btrfs(5) and btrfs-filesystem(8) documentation, copy-on-write, subvolumes and checksums报告此题的问题

  15. 15. 在一台服务器上运行 df -h,可以看到挂载在 /run 上的文件系统类型为 tmpfs。关于存放在那里的数据,下列哪项说法正确?

    • A.它会被写入引导磁盘上的一个隐藏分区,并在下次启动时自动恢复回 /run 目录中
    • B.它位于内存中并以交换空间作后备,重启即消失,所以 /run 下没有内容能存活下来✓ 答案
    • C.它保存在根文件系统的日志里,等根文件系统以读写方式挂载后再重放回 /run 中
    • D.它是从初始内存文件系统解开的压缩镜像,并会在关机时被写回到 /boot 目录里去

    tmpfs 是伪文件系统,背后没有块设备:它的页面保存在页缓存中,内存紧张时可能被换出到交换空间,而整个文件系统在卸载或重启时都会被丢弃。正因为这种易失性,文件系统层次标准才把 PID 文件、套接字等临时运行时状态放在 /run 下。

    编号 QB-E4TKXF依据: tmpfs(5) manual page; Filesystem Hierarchy Standard, /run run-time variable data报告此题的问题

  16. 16. 在 /dev 下运行 ls -l 得到如下两行: brw-rw---- 1 root disk 8, 0 Sep 1 09:12 sda crw-rw-rw- 1 root root 1, 3 Sep 1 09:12 null 第一个字符和成对出现的那两个数字告诉管理员什么?

    • A.sda 是块设备,null 是字符设备,那两个数字分别是主设备号和次设备号✓ 答案
    • B.sda 是备份设备,null 是缓存设备,那两个数字分别是块大小和 inode 数量
    • C.sda 是总线设备,null 是控制台设备,那两个数字分别是总线地址和中断号
    • D.sda 是带缓冲的文件,null 是压缩文件,那两个数字分别是文件大小和链接数

    在长格式列表中,第一个字符表示文件类型:b 表示以固定大小块方式访问的块设备,c 表示以字节流方式访问的字符设备。设备节点没有大小字段,因此 ls 打印的是主设备号(标识驱动程序)和次设备号(标识该驱动所管理的具体设备)。

    编号 QB-YKB4QH依据: Filesystem Hierarchy Standard, /dev device files; ls(1) file types and mknod(2) major and minor numbers报告此题的问题

  17. 17. 服务器上 lsblk 的输出如下: NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS nvme0n1 259:0 0 476.9G 0 disk └─nvme0n1p2 259:2 0 475G 0 part / 这两个名字应该怎么理解?

    • A.nvme0n1 是第一个命名空间的分区表,nvme0n1p2 是接在同一控制器上的第二块磁盘
    • B.nvme0n1 是磁盘映像的回环视图,nvme0n1p2 是同一份数据以裸块设备形式暴露出来
    • C.nvme0n1 是一个设备映射器目标,nvme0n1p2 是被叠加到该目标下面的那块物理磁盘
    • D.nvme0n1 是整个设备,nvme0n1p2 是它的第二个分区,p 后缀和 part 类型说明了这一点✓ 答案

    内核命名区分整个块设备与其内部的划分:在 NVMe 上,命名空间设备后面加 p 和编号表示分区;而在 SCSI 或 SATA 风格的名字上,编号直接追加,例如 sda 与 sda1。TYPE 列会明确指出哪个是哪个:设备本身显示 disk,它的分区显示 part。

    编号 QB-F46X4H依据: lsblk(8); Linux kernel admin-guide documentation on block device and partition naming报告此题的问题

  18. 18. 一台数据采集设备这次启动时是 /dev/ttyUSB0,下次启动又变成 /dev/ttyUSB1,取决于哪个适配器先被识别,而脚本必须每次都指向同一台设备。什么能给它一个稳定的名字?

    • A.在 /etc/fstab 中写一行,把该设备的序列号映射到固定名称,内核在设备出现时会读取它
    • B.在 /etc/modprobe.d 中添加条目,把驱动绑定到某个端口,使内核总是先给该适配器编号
    • C.在 /etc/udev/rules.d 中写一条规则,匹配该设备自身的属性并为它创建固定的 SYMLINK✓ 答案
    • D.在 /etc/sysctl.d 中写一条指令,固定内核在枚举 USB 设备时所使用的编号顺序

    内核设备编号是按检测顺序分配的,因此并不稳定。设备管理器会为每个出现的设备收到一个事件并评估其规则文件,所以一条匹配该设备自身属性(如厂商、型号、序列号)的规则就能创建可预期的符号链接;用 udevadm info 可以查看可用于匹配的属性。

    编号 QB-RKURG9依据: udev(7) rules files in /etc/udev/rules.d and udevadm(8)报告此题的问题

  19. 19. 新装的网卡无法使用,ip link 也看不到对应的接口。lspci -k 能打印出这块卡的条目以及 Subsystem 和 Kernel modules 两行,但没有 “Kernel driver in use” 那一行。这说明什么?

    • A.这块卡自检失败,固件已经把该插槽禁用,操作系统因此无法接管这个设备
    • B.还没有任何驱动接管该设备,说明模块缺失、被列入黑名单,或运行内核中没有它✓ 答案
    • C.接口其实存在但被管理性关闭了,驱动已释放它,因而不再向内核报告接口名
    • D.PCI 总线地址已经用尽,内核虽然枚举到了这块卡,却无法为它分配任何资源

    lspci -k 会在 “Kernel driver in use” 一行打印绑定到每个设备的驱动,缺少这一行就意味着内核看得到硬件,但没有任何驱动挂上去。常见原因是该内核没有安装对应模块、/etc/modprobe.d 中有黑名单条目,或在 Secure Boot 下签名被拒;用 dmesg 可以看出究竟是哪一种。

    编号 QB-84PKW8依据: lspci(8), the -k option reporting kernel drivers and modules handling each device报告此题的问题

  20. 20. 在服务器上安装软件包被拒绝,提示软件包的体系结构与系统不匹配。哪个命令能查出内核和软件包必须匹配的体系结构?

    • A.uname -r,它会打印运行中的内核发布号,因此也就是它编译时所针对的体系结构
    • B.uname -m,它会打印运行内核的机器硬件名称,例如 x86_64 或 aarch64✓ 答案
    • C.lsblk -f,它会打印根块设备的文件系统元数据中所记录的体系结构信息
    • D.dmesg -T,它会打印固件在本次启动开始时向内核报告的体系结构名称

    uname -m 报告机器硬件名称,也就是二进制软件包和内核软件包所面向的体系结构字符串,lscpu 会给出同样的信息但更详细。为其他体系结构构建的软件包无法在本内核上运行,所以包管理器会直接拒绝安装而不是装上去。

    编号 QB-KD9MM3依据: uname(1) machine hardware name; lscpu(1); rpm and dpkg package architecture matching报告此题的问题

本考试的其他主题

练习题依据 CompTIA 公布的 Linux+ 考试大纲及 Linux 系统管理的通行实践编写。CompTIA 和 Linux+ 是 CompTIA 的商标,Linux 是 Linus Torvalds 的注册商标;本网站与 CompTIA 无关联,也未获其认可。真实考试除选择题外还包含实操题(performance-based questions),要求在模拟环境中实际完成任务——四选一的题型无法复现这一部分,因此本题库覆盖的是知识部分,请同时在真实系统上动手练习。CompTIA 会定期修订大纲并为每个版本编号:报考前请向 CompTIA 确认现行大纲、考试代码与报考要求。 关于 CompTIA Linux+ 认证 →