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

23 道进程、软件包、服务与容器练习题及答案

CompTIA Linux+ 认证考试练习的全部进程、软件包、服务与容器练习题,附正确答案和简短解析。

开始练习测验 →
  1. 1. 某台监控主机的 ps 输出中有这样一行:"4271 4260 Z [collector] <defunct>"。这个状态说明了什么,又该如何清除它?

    • A.它已经结束,但退出状态一直没被父进程回收,向父进程发信号或重启父进程即可清除。✓ 答案
    • B.它被终端发出的停止信号挂起了,向它发送继续信号就会让它重回运行队列并清除该条目。
    • C.它正因设备操作而处于不可中断睡眠,等内核中未完成的操作结束后该条目就会消失。
    • D.它正占着 CPU 不放,向它发送 kill -9 就能释放这个进程槽并删除该条目。

    Z 状态表示子进程已经退出,但父进程还没有用 wait() 读取它的退出状态,因此内核把进程表中的这条记录保留下来。僵尸进程占着一个 PID,却不消耗 CPU 和内存,而且它已经死了,无法再被杀死;只有父进程回收它之后记录才会释放,所以正确做法是向父进程发信号或重启父进程,而父进程一旦退出,PID 1 会接管并回收它。

    编号 QB-ZQETS7依据: ps(1) manual page, PROCESS STATE CODES section; wait(2) on reaping child processes报告此题的问题

  2. 2. 某个备份进程在 ps 输出中的 STAT 列显示为 "D",执行 kill -9 之后它依然存在。为什么这个信号没有起作用?

    • A.处于不可中断睡眠的进程在它阻塞的那个内核调用返回之前不处理任何信号,所以 SIGKILL 只会挂起等待。✓ 答案
    • B.SIGKILL 可以被安装了自己处理函数的进程捕获并忽略,所以在移除该处理函数之前它会继续运行。
    • C.只有父进程才被允许向它投递 SIGKILL,所以由其他进程发送时这个信号会被拒绝。
    • D.SIGKILL 只有在进程离开前台之后才生效,所以要先用 bg 把该作业放到后台。

    D 状态表示任务阻塞在某个内核调用中,通常是在等待驱动或网络文件系统,这种任务不会走到检查未决信号的位置。SIGKILL 无法被捕获或忽略,但只有当任务重新变为可中断时才会被处理,所以真正要做的是解决底层的 I/O 问题,而不是继续发更强的信号。

    编号 QB-H8MYC8依据: ps(1) PROCESS STATE CODES (state D); signal(7) on SIGKILL delivery报告此题的问题

  3. 3. 修改完某守护进程的配置文件后,管理员希望正在运行的守护进程重新读取配置,同时不中断当前的客户端连接。按惯例应使用哪个信号,它的编号是多少?

    • A.SIGTERM,信号 15,这是 kill 默认发送的信号,请求进程有序退出。
    • B.SIGKILL,信号 9,内核会立即执行,不给进程任何清理的机会。
    • C.SIGHUP,信号 1,许多守护进程把它当作重新加载配置的请求。✓ 答案
    • D.SIGSTOP,信号 19,会把进程原地冻结,直到收到继续信号为止。

    SIGHUP 最初表示终端挂断,而守护进程没有控制终端,于是习惯上把它复用为重新加载配置的请求,可用 kill -HUP 或 kill -1 发送。进程会保留原有的 PID 和已打开的套接字,这正是重新加载与重启的区别;如果单元定义了 ExecReload,systemctl reload 也能实现同样的效果。

    编号 QB-2RS5Y8依据: signal(7) and kill(1); systemd.service(5) ExecReload报告此题的问题

  4. 4. 一个 PID 为 4120 的报表生成程序已经在运行,它把 CPU 占得交互会话都跑不动了。管理员希望内核把它排在其他工作之后调度。应该执行哪条命令?

    • A.renice -n 15 -p 4120,因为提高 niceness 值就会降低该进程的调度优先级。✓ 答案
    • B.nice -n 15 -p 4120,因为 nice 可以修改一个已经启动的进程的 niceness 值。
    • C.renice -n 0 -p 4120,因为把 niceness 恢复为默认值就会让该进程排在交互任务之后。
    • D.renice -n -15 -p 4120,因为负的 niceness 值会让调度器把该进程当作后台工作。

    niceness 的取值范围是 -20 到 +19,它与优先级的方向相反:niceness 越高,调度器对该进程越不优待。renice 作用于已经在运行的进程,而 nice 只能在启动新命令时设置该值;非特权用户可以提高 niceness,却不能再把它降回去。

    编号 QB-E8JYU4依据: nice(1) and renice(1) manual pages; setpriority(2) on the niceness range -20 to 19报告此题的问题

  5. 5. 一个长时间运行的导入脚本是在 SSH 会话的前台启动的。管理员必须注销,但脚本要继续运行。下面哪个操作顺序能做到?

    • A.对脚本执行 exec,让它取代登录 shell,因此注销时永远不会收到挂断信号。
    • B.先按 Ctrl+Z,再执行 fg,这样作业会重新接到终端上,即使会话关闭之后它也会继续运行。
    • C.按 Ctrl+C 把作业从终端上分离,之后再用 jobs 按编号重新连接到它。
    • D.先按 Ctrl+Z,再用 bg 让它在后台继续,然后用 disown 让 shell 不再向它发挂断信号。✓ 答案

    Ctrl+Z 发送 SIGTSTP,使作业进入 Stopped 状态,bg 让它在后台恢复运行,但 shell 仍然拥有它,注销时会向其作业发送 SIGHUP。disown 把该作业从 shell 的作业表中移除,挂断信号就不会再投递给它;如果一开始就用 nohup 启动命令,也能预先达到同样的脱离效果,并把输出重定向到 nohup.out。

    编号 QB-XQQ5F5依据: bash(1) JOB CONTROL section and the disown builtin; nohup(1)报告此题的问题

  6. 6. 某服务启动失败,报错 TCP 8080 端口 "Address already in use"。哪条命令能找出当前占用该端口的进程?

    • A.netstat -r,因为路由表会列出各个进程已经占用的本地端口。
    • B.lsof -i :8080,因为 lsof 会报告每个进程打开的文件和套接字。✓ 答案
    • C.ps -ef | grep 8080,因为进程表会在命令列中记录每个进程监听的端口。
    • D.strace -p 1,因为跟踪 PID 1 可以看到它的子服务绑定的所有套接字。

    lsof 会按进程列出打开的文件描述符,而监听套接字也是其中一种,因此 lsof -i :8080 能给出占用该端口的 PID、用户和命令;ss -ltnp 从套接字一侧给出同样的答案。正是这种描述符视图还能发现已被删除但仍被打开的日志文件,它会让文件系统一直是满的,而 du 统计出来的却小得多。

    编号 QB-F8WA26依据: lsof(8) manual page, -i option; ss(8)报告此题的问题

  7. 7. 系统的 crontab 中有这样一行:"30 2 * * 0 /usr/local/bin/backup.sh"。这个任务在什么时候运行?

    • A.每月 30 日的 02:30,因为第一个字段是日期。
    • B.每个星期日的 02:30,因为五个字段依次是分、时、日、月、星期。✓ 答案
    • C.每个星期日从 02:00 起每半小时一次,因为单个数字表示间隔。
    • D.每周第二天的 00:30,因为最前面的字段是小时而不是分钟。

    crontab 的时间说明是五个固定顺序的字段:分、时、日、月、星期,后面才是命令,所以 30 和 2 分别是分钟和小时,末尾的 0 表示星期日。单独的数字表示就是这个确定的值;要表示间隔必须使用步长写法,例如在分钟字段写 */30。

    编号 QB-YQ3GM6依据: crontab(5) manual page, field order of the time specification报告此题的问题

  8. 8. 有一个每日维护任务需要每天运行一次,而这台笔记本电脑夜里通常是关机的,并且错过一天后仍然要补跑。应选择哪种机制?

    • A.改用更晚时间的 cron,因为 cron 会把错过的任务排队,等系统回来后再执行。
    • B.每晚用 at 排一次,因为 at 会自行重新设定,并在关机期间过期的时间点补跑。
    • C.用带 @reboot 的 cron 条目,因为它会在每次启动时运行,也会在每天的原定时间运行。
    • D.anacron,它按天记录上次运行时间,发现逾期就在系统启动后不久执行该任务。✓ 答案

    cron 只在预定时刻系统正在运行时才触发任务,错过的执行会被直接跳过,所以它不适合夜里关机的机器。anacron 以整天为粒度,把配置中的周期与它为每个任务标识保存的时间戳作比较,发现逾期就在启动后按配置的延迟运行,这正是它面向非全天候运行系统的原因。

    编号 QB-M8PYVB依据: anacron(8) and anacrontab(5) manual pages; cron(8)报告此题的问题

  9. 9. 一个夜间任务已经改成由 report.timer 和 report.service 组成的 systemd 定时器。停机期间错过的执行必须补跑。应该配置什么、启用哪个单元?

    • A.在 report.service 里设置 Persistent=true 并启用 report.service,因为服务单元自己持有运行计划。
    • B.在 report.timer 里设置 Persistent=true 并启用 report.timer,因为定时器才是持有计划并激活服务的一方。✓ 答案
    • C.在 report.timer 里设置 OnBootSec 并启用 report.service,因为定时器调用之前必须先启用服务。
    • D.在 report.timer 里设置 AccuracySec 并同时启用两个单元,因为该指令记录的是上次激活时间。

    计划完全写在 .timer 单元里,并且由定时器去激活同名的服务,所以要启用的是定时器,服务在被调用之前保持未激活。Persistent=true 会把上次触发时间保存到磁盘,当预定时刻在机器停机期间过去后,会在启动后立即运行该日历任务,这就是 systemd 中相当于 anacron 的补跑行为。

    编号 QB-5RU5GC依据: systemd.timer(5), Persistent= and OnCalendar= directives; systemctl(1) list-timers报告此题的问题

  10. 10. 管理员手动执行备份脚本时一切正常,但由 cron 调度运行时失败,报 "aws: command not found"。原因是什么?

    • A.cron 会去掉被调度脚本的可执行位,所以必须重新给该文件加上可执行权限。
    • B.cron 把每个任务都以 nobody 账户运行,所以必须为该账户重新安装解释器。
    • C.cron 给任务的环境非常精简,所以脚本必须使用绝对路径或自己设置 PATH。✓ 答案
    • D.cron 只加载登录 shell 的别名,所以脚本必须为它调用的每个程序定义别名。

    cron 任务不是在登录 shell 中运行的,因此那些为交互式会话构建 PATH 的 profile 和 shell 启动文件根本不会被读取,任务只能得到 cron 提供的精简环境。解决办法是用绝对路径调用程序,或在脚本开头、或在 crontab 中设置 PATH 及所需的其他变量。

    编号 QB-NCAVCT依据: crontab(5) on the cron job environment and its default PATH; cron(8)报告此题的问题

  11. 11. 在一台 Debian 系服务器上,管理员用 dpkg -i 安装了一个下载来的 .deb 包,由于依赖未满足,该包处于未配置状态。正确的下一步是什么?

    • A.再用 dpkg -i 加 --force-depends 重装一次,因为重复安装会让 dpkg 自己去取依赖。
    • B.对该软件包执行 apt-cache show,因为读取它的元数据会把依赖标记为已满足。
    • C.执行 dpkg --configure -a,因为重建软件包数据库之后依赖关系就会被登记。
    • D.执行 apt --fix-broken install,因为这个上层工具会从仓库中解决缺失的依赖关系。✓ 答案

    dpkg 是低层工具:它只处理交给它的那一个本地包文件,虽然能报告依赖未满足,却没有仓库信息可用来满足依赖。apt 是会解决依赖的上层前端,它读取已配置的仓库,因此 apt --fix-broken install 会下载并安装 dpkg 缺少的部分;--force-depends 只是把问题掩盖起来,留下一个损坏的已安装包。

    编号 QB-5V4QSS依据: dpkg(1) and apt(8) manual pages; the --fix-broken install operation报告此题的问题

  12. 12. 在 Debian 系主机上,apt update 和 apt upgrade 的区别是什么?

    • A.update 只安装安全补丁,upgrade 会安装所有待更新的软件包,包括内核。
    • B.update 从仓库刷新本地的软件包索引,upgrade 才是安装更新版本的那一步。✓ 答案
    • C.update 会用镜像列表重写 /etc/apt/sources.list,upgrade 会重新下载已安装的软件包。
    • D.update 每次升级一个软件包,upgrade 做同样的事但不会请求确认。

    apt update 会联系 APT 源配置中列出的仓库并重写本地的可用软件包索引,本身完全不安装任何东西;随后 apt upgrade 才利用这个索引为系统上已安装的软件包安装更新版本。不先执行 update 就直接 upgrade,只是在用过期的索引工作;而 full-upgrade 的差别在于它可能为了完成事务而删除某些软件包。

    编号 QB-MCXH7S依据: apt(8) manual page, update and upgrade subcommands报告此题的问题

  13. 13. 在一台 RPM 系主机上,管理员需要知道 /usr/sbin/sshd 由哪个已安装的软件包提供,然后列出该包安装的所有文件。应使用哪一组命令?

    • A.用 rpm -V /usr/sbin/sshd 找出拥有它的包,再用 rpm -qp 列出该包中的文件。
    • B.用 rpm -qi /usr/sbin/sshd 找出拥有它的包,再用 rpm -qa 列出该包中的文件。
    • C.用 rpm -qf /usr/sbin/sshd 找出拥有它的包,再用 rpm -ql 列出该包的文件。✓ 答案
    • D.用 rpm -qR /usr/sbin/sshd 找出拥有它的包,再用 rpm -qd 列出该包中的文件。

    rpm 查询的是本地软件包数据库,其中 -qf 回答某个给定文件路径归哪个已安装包所有,-ql 列出指定包安装了哪些文件。其他选项回答的是别的问题:-qi 显示包信息,-qa 列出所有已安装的包,-qp 查询尚未安装的 .rpm 文件,-qR 列出依赖要求,-V 则把文件与数据库作校验。

    编号 QB-4VRCMR依据: rpm(8) manual page, query options -qf, -ql, -qi, -qa and -qp报告此题的问题

  14. 14. 从一个新添加的第三方 RPM 仓库安装软件时失败,提示 "Public key for pkg.rpm is not installed"。应该怎么处理?

    • A.在仓库文件里设置 gpgcheck=0,让安装在不做校验的情况下继续。
    • B.用 rpm --import 导入该仓库的签名密钥,这样软件包的签名才能被验证。✓ 答案
    • C.这一次用 --nogpgcheck 安装,因为密钥只对厂商自己的包才重要。
    • D.重建 RPM 数据库,因为缺少密钥说明本地索引已经损坏。

    gpgcheck 的作用是让包管理器用发布者的公钥校验每个软件包的签名,从而证明该包是真实的、且自签名之后未被改动。提示缺少密钥说明该密钥还没有被导入,正确做法是通过可信渠道从发布者处获取并导入它;关闭校验只是取消了这项控制措施,而不是满足它。

    编号 QB-KCK72R依据: dnf.conf(5) gpgcheck= and gpgkey= settings; rpm(8) --import报告此题的问题

  15. 15. systemctl is-active nginx 返回 "active",而 systemctl is-enabled nginx 返回 "disabled"。这种组合说明了什么?

    • A.该服务现在正在运行,但下次开机时不会被自动启动。✓ 答案
    • B.该服务被配置为开机启动,但它的主进程已经退出了。
    • C.该服务正在运行,但它的配置文件自修改以来一直没有被重新加载。
    • D.该服务已被屏蔽,它之所以在运行只是因为另一个单元把它作为依赖拉起来了。

    start 和 stop 改变的是当前的运行状态,而 enable 和 disable 只是创建或删除某个 target 的 .wants 目录中的符号链接,正是这个链接让单元在开机时被拉起。因此这两种状态彼此独立——一个单元可以是运行中且未启用,也可以是已停止但已启用——而 systemctl enable --now 才是同时设置两者的命令。

    编号 QB-3VD2FQ依据: systemctl(1), the start, enable, is-active and is-enabled commands报告此题的问题

  16. 16. 某个遗留服务必须被完全禁止启动:开机时不启动,手动也不能启动,其他单元把它列为依赖时也不能启动。哪种操作能做到这一点?

    • A.systemctl disable,它会删除开机符号链接,同时也阻止之后的手动启动。
    • B.systemctl stop,它会结束当前进程,并阻止该单元再次被激活。
    • C.systemctl revert,它会丢弃本地修改,使该单元无法再被启动。
    • D.systemctl mask,它把单元名指向 /dev/null,任何启动请求都无法激活它。✓ 答案

    屏蔽一个单元,等于在管理员单元目录中用一个指向 /dev/null 的符号链接取代它,于是该单元无法被加载,任何启动尝试都会失败,无论来自开机、管理员还是其他单元的依赖。disable 只是删除开机时的符号链接,手动启动和依赖启动依然有效;要撤销屏蔽则使用 systemctl unmask。

    编号 QB-JC8VUP依据: systemctl(1), the mask and unmask commands报告此题的问题

  17. 17. 位于 /usr/lib/systemd/system/app.service 的随包单元文件需要修改其中一条指令,而且这个修改必须在软件包更新后依然有效。正确做法是什么?

    • A.在 /etc/systemd/system/app.service.d/ 下添加一个 drop-in 文件,然后执行 systemctl daemon-reload。✓ 答案
    • B.直接就地编辑 /usr/lib/systemd/system/app.service,然后执行 systemctl daemon-reload。
    • C.把该单元复制到 /run/systemd/system 并在那里编辑,然后执行 systemctl reload app。
    • D.编辑随包提供的单元文件,然后执行 systemctl restart app,它会先重新读取单元文件。

    单元加载有固定的优先级:管理员目录优先于运行时目录,运行时目录又优先于随包目录;而 <unit>.d/ 中的 drop-in 文件只覆盖它所列出的指令,厂商提供的文件仍可正常更新。凡是手工改动单元文件,都要先执行 systemctl daemon-reload 才会生效,因为这条命令才让 systemd 重新读取自己的配置,随后可用 systemctl cat 查看合并后的结果。

    编号 QB-2V2Q9P依据: systemd.unit(5) on unit load path precedence and drop-in directories; systemctl(1) daemon-reload报告此题的问题

  18. 18. 在一次意外重启之后,journalctl -b -1 报告不存在上一次启动的日志文件。这是什么原因,以后又该如何让上一次启动的日志可用?

    • A.日志放在 /run 下,重启即被清空;在 journald.conf 里设置 Storage=persistent。✓ 答案
    • B.-b 选项只能读取当前这次启动的记录;更早的启动记录要改从 /var/log/messages 读取。
    • C.日志在启动时被 logrotate 轮转了;要在 /etc/logrotate.d 里为它加上保留指令。
    • D.日志在启动时被 SystemMaxUse 清理了;把这个上限调高就能保留更早的启动记录。

    当 journald 的存储方式是易失的时候,日志放在 /run 下的目录中,而那是一个由内存支撑的文件系统,关机时就被丢弃,所以除了当前这次启动之外都查不到。在 journald.conf 中设置 Storage=persistent(或在 /var/log 下创建日志目录)会把日志落到磁盘上,之后 -b -1 及更早的启动偏移就能使用;日志仍然是二进制格式,所以必须通过 journalctl 读取,而不是用 grep。

    编号 QB-HCVHPN依据: journald.conf(5) Storage= setting; journalctl(1) -b option报告此题的问题

  19. 19. 管理员只需要查看 sshd.service 从昨天以来记录的错误级别及更严重的消息。哪条命令能做到?

    • A.grep -i error /var/log/journal/*/system.journal | tail
    • B.journalctl --disk-usage -u sshd.service --since yesterday
    • C.journalctl -u sshd.service -p err --since yesterday✓ 答案
    • D.cat /run/log/journal/system.journal | grep sshd | grep err

    journalctl 的过滤条件可以组合使用:-u 把输出限定到某一个单元,-p err 显示该优先级及更严重的全部消息,--since 既接受时间戳也接受 yesterday 这类相对表达。日志以二进制格式存储,所以用 grep 或 cat 去读日志文件并不是有效的办法;而 --disk-usage 只会报告日志占用了多少空间。

    编号 QB-ZUPC4N依据: journalctl(1), the -u, -p and --since options报告此题的问题

  20. 20. 在一台启用 SELinux 强制模式的 RHEL 系主机上,某数据库容器每次被删除并重新创建后数据都会丢失,而且对 /srv/dbdata 的绑定挂载因 AVC 消息被拒绝。哪个运行选项能同时解决这两个问题?

    • A.不挂载卷而使用 --privileged,它能在多次删除之间保住可写层,并绕过标签检查。
    • B.用 --tmpfs /var/lib/pgsql 并执行 setenforce 0,把数据存放在容器之外。
    • C.使用 -v /srv/dbdata:/var/lib/pgsql:Z,它把数据持久化,并为容器重新打标签。✓ 答案
    • D.用 --network host 加 -v /srv/dbdata:/var/lib/pgsql:ro,与它共享主机的标签。

    容器写入的一切都进入叠加在只读镜像之上的那个薄可写层,而该层会随容器一起被销毁,所以需要持久保存的数据必须改放在绑定挂载或命名卷中。在 SELinux 处于强制模式的主机上,被挂载的主机目录还需要一个容器可访问的标签,:Z 后缀正是为该容器私有地打上这个标签;关闭强制模式或以特权方式运行只是取消了保护,而不是满足它。

    编号 QB-8EMP5B依据: podman-run(1) --volume option, including the :z and :Z SELinux relabel suffixes报告此题的问题

  21. 21. 一个无根(rootless)Podman 容器需要提供 HTTP 服务,启动时使用 -p 80:80,结果在主机端口上报权限错误而失败。原因是什么,应如何正确调整?

    • A.无根容器根本不能发布任何端口,所以要改用 --network host 来运行这个容器。
    • B.非特权用户不能绑定 1024 以下的端口,所以要改用高端口,例如 -p 8080:80。✓ 答案
    • C.镜像里没有声明端口,所以要加上 EXPOSE 重新构建,并保留 -p 80:80 的映射。
    • D.SELinux 阻止容器使用 80 端口,所以要关闭强制模式并保留原来的 -p 80:80。

    发布端口意味着容器引擎要在主机上绑定该端口,而主机上 1024 以下的知名端口范围是保留给特权进程的,因此无根引擎无法占用 80 端口。把一个高位主机端口映射到容器的 80 端口可以立即生效;如果确实需要使用低位端口,管理员可以用内核参数下调非特权端口的起始值,或在前面放一个主机层面的反向代理。

    编号 QB-RWSUQB依据: podman-run(1) --publish option; rootless Podman documentation and the net.ipv4.ip_unprivileged_port_start kernel parameter报告此题的问题

  22. 22. 容器镜像与正在运行的容器之间的区别是什么?

    • A.镜像是正在运行的进程树,容器是它被导出成的那个归档文件。
    • B.镜像保存可写的数据,容器保存的是拉取下来的那些只读层。
    • C.镜像是用 Containerfile 构建出来的,容器就是打上标签之后的同一个文件。
    • D.镜像是一叠只读的层,而容器在运行时在这些层之上再加上一个可写层。✓ 答案

    镜像是一叠不可变的文件系统层,构建时每条指令对应一层,多个容器可以同时共享同一个镜像。运行它会创建一个容器,容器以只读方式挂载这些层,并为自己的改动再加上一个薄可写层;由于该层随容器一起被删除,凡是需要比容器活得更久的数据都必须写入挂载的卷中。

    编号 QB-7E9CY9依据: OCI Image Format Specification on image layers; podman-run(1) on the container writable layer报告此题的问题

  23. 23. 一个名为 web 的容器正在运行,管理员需要在它内部打开一个交互式 shell 来检查配置。应使用哪条命令?

    • A.podman run -it web /bin/bash,它会在那个已经在运行的容器里打开一个 shell。
    • B.podman start -it web /bin/bash,它会重新连接到该容器并取代它的主进程。
    • C.podman exec -it web /bin/bash,它会在正在运行的容器内部启动一个额外的进程。✓ 答案
    • D.podman build -it web /bin/bash,它会重新构建镜像,并在其中留下一个打开的 shell。

    exec 是在一个已经在运行的容器内部再启动一个进程,所以它才是进去开 shell 做检查的办法,也正因如此对已停止的容器会失败。run 总是从镜像新建一个容器,start 只是让已存在的已停止容器恢复运行且不接受要执行的命令;而运行时选定的选项事后无法添加——需要不同选项的容器只能删除后重新运行。

    编号 QB-QWEHJA依据: podman-exec(1) and podman-run(1) manual pages报告此题的问题

本考试的其他主题

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