如何判断我的系统是作为 EFI/UEFI 还是 BIOS 启动的?

Ale*_*zzi 149 boot bios uefi

如何确定特定运行的 Ubuntu 系统是使用 EFI/UEFI 还是 BIOS 启动的?

Col*_*ing 161

最简单的方法是检查是否/sys/firmware/efi存在。如果您使用传统 BIOS 启动,它不会出现。

#!/bin/bash
[ -d /sys/firmware/efi ] && echo UEFI || echo BIOS
Run Code Online (Sandbox Code Playgroud)

  • 挑剔,该表达式是 POSIX 所以应该在各种 shell 中工作,而不仅仅是 `bash` (3认同)

ish*_*ish 22

已弃用

下面的答案是一种可能并不总是有效的方法。
而是使用Colin基于的答案/sys/firmware/efi


很容易判断系统是否在 EFI 中启动(或者不是,在这种情况下它必须是 BIOS):

只需使用 dmesg | grep "EFI v"

  • 如果系统是从 EFI 启动的,这将返回如下一行:

    [0.000000] EFI v2.00 by American Megatrends
  • 如果不是,则不返回任何内容,在这种情况下,它是从 BIOS 启动的

基于grep 的退出代码的 bash 脚本使用示例:

...
留言 | grep -q "EFI v" # -q 告诉 grep 不输出任何内容
如果 [$? -eq 0 ] # 检查退出代码;如果 0 EFI,否则 BIOS
然后
    echo "您正在使用 EFI 启动。"
  别的
    echo "您正在使用 BIOS 启动"
菲
...

来源:有关如何确定 EFI 系统是否使用传统 BIOS 仿真,以及有关测试 EFI 和 EFI 兼容性的更多信息,以及许多 EFI 供应商/版本的字符串,请参阅此页面Precise 的 Ubuntu 开发者峰会

  • 这是脆弱的,因为不能保证搜索的字符串是由所需的特征生成的。 (3认同)
  • 我会将其简化为`if dmesg | grep -Fq "EFI v"; 然后……`。另外运行 `[` 命令没有意义,只是为了测试成功/失败。`$?` 主要用于检查特定错误。 (2认同)
  • @izx,任何脚本都可能将“EFI v”写为其他内容的一部分。如果这种情况发生在 BIOS 机器上,这将是误报。 (2认同)
  • 最好不要在内核日志中搜索文本,它可能会发生变化。最好看看/sys/firmware/efi (2认同)
  • 不过我想提一下,这是获取 EFI 版本的好方法! (2认同)