检测给定名称是否是有效内核模块的更好方法?

检测给定名称是否是有效内核模块的更好方法?

要检测给定的内核模块是否有效(不是检测它是否已加载,而是检测它是否在系统中可用),可以在 dry-mode 下运行 modprobe,它会做出响应。目前,我只需执行此操作并执行 grep 匹配单词“not found”即可在代码中输出此信息。但我认为输出不能保证,例如,如果它恰好被翻译了。有没有更好的方法来做到这一点?

答案1

在我的 Debian 10 中,退出状态modprobe --dry-run …反映是否有任何错误。毫不奇怪,退出状态基本上就是为此而设的。

示例(shell 代码):

  • modprobe --quiet --dry-run loop       && echo "loop - valid"
    modprobe --quiet --dry-run garbage123 && echo "garbage123 - valid"
    
  • modprobe --quiet --dry-run loop       || echo "loop - invalid"
    modprobe --quiet --dry-run garbage123 || echo "garbage123 - invalid"
    
  • if modprobe --quiet --dry-run loop; then
       # code to run when valid
       echo "loop - valid"
    else
       # code to run when invalid
       echo "loop - invalid"
    fi
    

我注意到我不需要以 root 身份来使用modprobe --dry-run这样的功能。


有些工具使用它们的退出状态不仅仅是为了指示错误。例如,如果grep未找到任何内容,它将返回1(这通常表示失败)。当我读到你曾经grep告诉是否有匹配项时,我以为你测试了退出状态grep。这个答案的重点是你可以(并且应该)测试退出状态modprobe

相关内容