# 1. POSIX find 的 -name、-type、-perm、-mtime、-exec 的标准操作 A -perm 按类型 B -mtime 按权限 C -name 按名、-type 按类型、-mtime 按时间、-exec 执行命令 ✓ 正确答案 D -exec 无法执行命令
# 2. find 的 -exec cmd {} + 批量传参、-exec cmd {} \; 逐个执行,两者效率有何差异?配合 -print0 与 xargs -0 如何安全处理含空格/换行的文件名? A -print0 用换行分隔 B -exec {} \; 更高效 C -exec {} + 批量传参更高效,-print0/xargs -0 用 NUL 分隔安全处理含空格文件名 ✓ 正确答案 D xargs -0 用空格分隔
# 3. set -e、set -u 与 -o pipefail 的可移植性如何,pipefail 为何不是 POSIX 标准? A set -u 不是 POSIX 的 B pipefail 是 POSIX 标准 C set -e/-u 是 POSIX 的,pipefail 是 bash 扩展非 POSIX 标准 ✓ 正确答案 D 所有选项都可移植
# 4. POSIX make 的推断规则(如 .c.o)如何自动选择编译命令,$@、$<、$^ 三个自动变量分别指代什么? A $@ 是依赖 B $@ 是目标、$< 是第一个依赖、$^ 是全部依赖 ✓ 正确答案 C $< 是目标 D $^ 是第一个依赖
# 5. at 与 batch 都运行一次性任务,batch 的负载阈值(load average)语义如何决定实际执行时机? A batch 在指定时间执行 B batch 等系统负载降到阈值以下才执行,用于低负载期运行批处理 ✓ 正确答案 C batch 不看负载 D batch 与 at 相同
# 6. PTHREAD_MUTEX_NORMAL、ERRORCHECK、RECURSIVE 三种互斥锁在死锁、重复解锁、错误检测上的行为差异是什么? A ERRORCHECK 允许重入 B RECURSIVE 重复加锁死锁 C NORMAL 重复加锁死锁,RECURSIVE 允许重入,ERRORCHECK 检测非法操作返回错误 ✓ 正确答案 D 三者行为相同
# 7. 标准信号不排队而实时信号(SIGRTMIN+)排队的差异,在可靠事件通知场景应如何选型? A 实时信号合并事件 B 标准信号也可靠 C 事件不能丢时应选实时信号,它排队可靠且可携带数据 ✓ 正确答案 D 标准信号排队
# 8. 多线程进程中信号如何被投递到特定线程,pthread_sigmask 与 pthread_kill 如何控制这一行为? A pthread_sigmask 控制线程阻塞信号,pthread_kill 精确投递到指定线程 ✓ 正确答案 B pthread_kill 投递到任一线程 C 进程信号由所有线程处理 D pthread_sigmask 与投递无关
# 9. POSIX sh 的 15 个特殊内建命令(break、:、continue、.、eval、exec、exit、export、readonly、return、set、shift、times、trap、unset)与普通内建命令(如 cd、pwd、read)在命令查找与变量赋值持久性上有何区别? A 特殊内建命令不经 PATH 搜索且前置变量赋值在命令后持续生效 ✓ 正确答案 B 特殊内建与普通内建相同 C 特殊内建前置赋值不持久 D 特殊内建需 PATH 查找
# 10. POSIX awk 的记录(record)与字段(field)处理模型 A FS 是输出分隔符 B awk 按字段分记录 C NF 是记录号 D awk 按 RS 分记录、FS 分字段,逐记录执行 pattern-action ✓ 正确答案
# 11. POSIX grep 的 BRE(基本正则)与 ERE(扩展正则)的差异 A BRE 中 + 直接是量词 B ERE(-E)中 +?|() 直接使用,BRE 需转义才有特殊含义 ✓ 正确答案 C ERE 需转义 D 两者正则完全相同
# 12. POSIX sed 的 s 命令与 -e、-i 标志的工程语义 A s 命令无法替换 B -e 是做原地编辑 C -i 是全局替换 D s 命令做替换、-e 组合编辑命令、-i 原地编辑(但 -i 不可移植) ✓ 正确答案
# 13. POSIX xargs 的输入分块(-n)与空输入边界 A -n N 每次最多 N 个参数,-r 禁止空输入执行命令 ✓ 正确答案 B xargs 永远一次执行所有参数 C -n 只影响输入读取不影响执行 D 空输入时 xargs 一定不执行
# 14. POSIX 工具集,awk、sed、grep、find、xargs 的标准化规范(POSIX.1-2017 §12) A GNU 扩展是 POSIX 标准的一部分 B §12 定义 awk/sed/grep/find/xargs 等标准工具行为,保证跨平台一致 ✓ 正确答案 C 工具行为无统一标准 D 只有 awk 是必需的
# 15. POSIX sh 参数扩展 ${var:-default}、${var:=default}、${var:?error} 的语义差异是什么? A ${var:?e} 不会退出 B 三者语义完全相同 C ${var:-d} 会修改 var 的值 D ${var:-d} 只取值不赋值、${var:=d} 赋值再用、${var:?e} 未设置报错退出 ✓ 正确答案
# 16. awk 的内建变量 NR(当前记录号)、NF(字段数)、FS(输入分隔符)、OFS(输出分隔符)各起什么作用?BEGIN/END 块为何只在首尾各执行一次? A NR 是记录号、NF 是字段数、FS/OFS 是分隔符,BEGIN 初始化、END 汇总各执行一次 ✓ 正确答案 B NF 是记录号 C BEGIN 每行执行一次 D FS 是输出分隔符
# 17. POSIX locale 与 i18n 在 shell 工具中的处理 A locale 控制字符集/排序/格式,LC_ALL=C 提供最小可预测行为 ✓ 正确答案 B locale 与字符处理无关 C LC_ALL=C 启用 UTF-8 D 排序次序与 locale 无关
# 18. POSIX signal 默认动作(default action)的 5 类 A 所有信号默认终止 B 分五类:Term/Core/Stop/Continue/Ignore,SIGSEGV 默认 Core 转储 ✓ 正确答案 C SIGSTOP 默认忽略 D SIGCONT 默认终止
# 19. POSIX 必需工具 vs 可选工具的 SUS 标记 A XSI 是必需工具标记 B 所有工具都是必需的 C 可选工具行为毫无标准 D 必需工具(ls/sh/grep)所有实现都有,可选工具(make/cron)实现可省略 ✓ 正确答案
# 20. POSIX 标准规定 vs GNU 扩展的兼容性处理 A GNU 扩展是 POSIX 标准 B POSIX 是最小可移植,GNU 扩展增强但不可移植 ✓ 正确答案 C 所有 GNU 工具都遵循 POSIX D 可移植性由 GNU 扩展决定
# 21. POSIX.1-2017 与 SUSv4(Single UNIX Specification v4)的对应关系 A SUSv4 比 POSIX 更小 B 两者完全无关 C 两者等同,SUS 在 POSIX 基础上增加 XSI 扩展 ✓ 正确答案 D XSI 是 POSIX 核心
# 22. pax/tar 的 ustar 格式在路径长度(name 100/prefix 155 字节)与文件大小(8GB)上有何限制,pax 扩展头如何突破? A ustar 支持任意长路径 B ustar 限制 name 100/prefix 155 字节、文件 8GB,pax 扩展头用 key=value 突破 ✓ 正确答案 C pax 扩展头无限制仍受 ustar 字段约束 D 文件大小字段无上限
# 23. POSIX 1003.1-2017 的章节(chapter)结构与查询路径 A 所有内容都在一章 B 函数在 System Interfaces、工具在 Shell and Utilities、头文件在 Base Definitions ✓ 正确答案 C 工具在 Base Definitions D 函数在 Shell and Utilities
# 24. POSIX thread-safe 函数与 MT-safe 等级 A strtok 是线程安全的 B 所有函数都线程安全 C thread-safe 函数可多线程并发调用无竞争,非安全函数用 *_r 变体或加锁 ✓ 正确答案 D MT-Safe 与线程无关
# 25. POSIX 头文件(unistd.h、sys/types.h、pthread.h)的包含规则 A 头文件无需宏即可看到全部声明 B 需定义 _POSIX_C_SOURCE 才能看到 POSIX 声明,pthread 程序链接 -pthread ✓ 正确答案 C pthread.h 是系统接口 D sys/types.h 定义线程
# 26. POSIX 选项(POSIXLY_CORRECT)的 GNU 工具兼容 A 它让 GNU 工具更严格遵循 POSIX 行为,提高可移植性 ✓ 正确答案 B 它是 POSIX 标准强制要求 C 设置后 GNU 增强更多 D 与工具行为无关
# 27. crontab 的五个时间字段(分时日月周)如何组合匹配,SHELL、PATH、MAILTO 环境变量如何影响任务执行? A PATH 默认完整 B 日与周是"与"匹配 C 五字段为分时日月周,SHELL/PATH 需显式设置避免命令找不到 ✓ 正确答案 D MAILTO 不影响输出
# 28. 为什么条件变量必须配合 mutex 保护谓词变量,单独使用条件变量会产生竞态? A wait 不释放锁 B 条件变量可独立使用 C mutex 保护谓词检查与 wait 的原子性,防止丢失唤醒 ✓ 正确答案 D 谓词检查无需加锁
# 29. 异步信号安全(async-signal-safe)函数列表为何如此有限,malloc、printf 为什么不能安全地在信号处理器中调用? A malloc 可在处理器安全调用 B 所有函数都异步信号安全 C 列表有限,因 malloc/printf 持锁重入会死锁,处理器只调 safe 函数 ✓ 正确答案 D printf 不持锁
# 30. 被信号打断的慢速系统调用返回 EINTR 时,SA_RESTART 自动重启与手动重试各有什么陷阱? A 手动重试无副作用 B SA_RESTART 重启所有调用 C EINTR 无需处理 D SA_RESTART 只自动重启部分调用,手动重试需注意已读数据与信号饿死 ✓ 正确答案
# 31. sed 的 pattern space 与 hold space 如何配合(h/H/g/G/x)实现多行处理?地址范围(如 1,5、/re1/,/re2/)如何限定命令作用行? A hold space 暂存多行,h/H/g/G/x 传输实现多行处理,地址范围限定作用行 ✓ 正确答案 B pattern 与 hold 相同 C 地址范围不能限定 D h 命令丢弃 hold
# 32. grep 的 -E(ERE)、-F(固定字符串)、-P(PCRE)分别用什么匹配引擎?找到匹配返回 0、未找到返回 1、出错返回 2 的退出码约定有何用途? A 退出码 0 表示出错 B -F 用正则 C -F 字面匹配、-P 用 PCRE,退出码 0 匹配/1 不匹配/2 出错 ✓ 正确答案 D -P 是 POSIX 标准
# 33. 命令替换的反引号与 $() 在嵌套引用与可读性上有何差异,为何推荐后者? A 反引号嵌套更清晰 B $() 嵌套与引号处理更清晰,推荐使用,反引号转义复杂 ✓ 正确答案 C $() 不支持嵌套 D 两者转义规则相同
# 34. xargs 的 -n(每次参数数)、-P(并发数)、-I(替换占位符)如何控制批量与并发?并发执行时输出交错与退出码如何处理? A 并发输出不交错 B -P 是批量 C -I 是并发 D -n 批量、-P 并发、-I 替换占位符,并发输出交错、退出码 123 表示有失败 ✓ 正确答案
# 35. 为什么脚本中处理文件名要用 NUL 分隔(-print0/xargs -0)而非默认换行分隔? A NUL 不能出现在文件名中,-print0/xargs -0 可安全处理含换行/空格的文件名 ✓ 正确答案 B 换行分隔最安全 C 文件名不含换行 D xargs 默认 NUL 分隔
# 36. here document 与 here string 的区别是什么,bash 的数组、[[ ]]、<<< 为何不可移植? A [[ ]] 可移植 B here string 是 POSIX 标准 C 数组是 POSIX sh 特性 D here document 是 POSIX 标准,here string(<<<)、数组、[[ ]] 是 bash 扩展不可移植 ✓ 正确答案
# 37. 什么是虚假唤醒(spurious wakeup)?为什么条件变量等待必须写成 while 循环而非 if 判断? A 虚假唤醒可能使谓词未满足即唤醒,需 while 循环唤醒后重新检查 ✓ 正确答案 B if 判断足够 C 虚假唤醒不会发生 D while 循环会死锁
# 38. pthread_cond_signal 与 pthread_cond_broadcast 的区别是什么?何时必须用 broadcast 避免饥饿? A 两者都唤醒全部 B signal 唤醒一个、broadcast 唤醒全部,多谓词竞争用 broadcast 避免饥饿 ✓ 正确答案 C signal 唤醒全部 D broadcast 唤醒一个
# 39. pthread_once 如何保证初始化例程在多线程下只执行一次? A 它可重复执行多次 B 它保证初始化例程多线程下只执行一次,其余线程等待完成 ✓ 正确答案 C 它需要额外加锁 D 它是非线程安全的
# 40. sigaction 相比传统 signal() 在语义可移植性与标志控制上解决了哪些历史问题,SA_RESTART 改变了什么? A sigaction 语义可移植、用标志控制(如 SA_RESTART 自动重启系统调用),signal() 语义不统一 ✓ 正确答案 B signal() 语义更可移植 C SA_RESTART 让调用返回 EINTR D sigaction 无法设置标志
# 41. SA_SIGINFO 标志使处理器获得 siginfo_t 与 ucontext,能额外取得哪些故障地址与发送者信息? A siginfo_t 无故障地址 B 处理器只获得信号号 C SA_SIGINFO 提供 siginfo_t(si_addr、si_code、si_pid)与 ucontext,用于区分故障来源 ✓ 正确答案 D si_code 是处理器地址
# 42. sigaltstack 配置的备用栈在 SIGSEGV/SIGBUS 处理中为何不可或缺,未配置会导致什么后果? A sigaltstack 与栈无关 B 处理器总在主栈运行 C 未配置也能处理栈溢出 D 栈溢出时无主栈可用,sigaltstack 提供备用栈让处理器安全运行 ✓ 正确答案