如何确定是否使用EFI / UEFI或BIOS引导了特定的运行Ubuntu系统?

评论

有趣的问题。不是确切的欺骗,但可以在此处尝试回答类似的问题。

unix.stackexchange.com/questions/148356/…

#1 楼

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

#!/bin/bash
[ -d /sys/firmware/efi ] && echo UEFI || echo BIOS


评论


在QEMU 2.0.0,OVFM和Ubuntu 14.04上进行了测试:github.com/cirosantilli/runlinux/tree/…

– Ciro Santilli郝海东冠状病六四事件法轮功
2015年9月7日下午13:36

适用于Ubuntu 16.04和Fedora 24

–geek1011
16年6月23日在22:32

nitpick,该表达式是POSIX,因此应在各种shell中工作,而不仅仅是bash

– iruvar
19年11月30日在19:45

#2 楼


不建议使用
下面的答案可能并不总是有效。而是使用基于/sys/firmware/efi的科林答案。如果系统是从EFI启动的,请使用dmesg | grep "EFI v"


这将返回以下行:
[ 0.000000] EFI v2.00 by American Megatrends



或返回如果不是,则什么都不做,在这种情况下,它是从BIOS中启动的。
基于grep退出代码的bash脚本用法示例:
...
dmesg | grep -q "EFI v"    # -q tell grep to output nothing
if [ $? -eq 0 ]      # check exit code; if 0 EFI, else BIOS
then
    echo "You are using EFI boot."
  else
    echo "You are using BIOS boot"
fi
...


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


评论


我将其简化为if dmesg | grep -Fq“ EFI v”;然后....除了运行[命令之外,没有其他意义,只是为了测试成功/失败。 $?主要用于检查特定错误。

– Geirha
2012年7月12日上午10:50

这很脆弱,因为无法保证搜索的字符串是由所需功能生成的。

–索比昂·拉文·安德森(ThorbjørnRavn Andersen)
2012年7月13日在1:28

@izx,任何脚本都可能写“ EFI v”作为其他内容的一部分。如果在BIOS计算机上发生这种情况,那将是误报。

–索比昂·拉文·安德森(ThorbjørnRavn Andersen)
2012年7月13日在1:37

最好不要在内核日志中使用grep获取文本,这可能会发生变化。最好看看/ sys / firmware / efi

–科林·伊恩·金(Colin Ian King)
2012年7月27日在18:24

我想提一下,这是获得EFI版本的好方法!

–欧米茄
2012年9月3日,2:01

#3 楼

用于检查系统是否使用UEFI或ROM BIOS引导的Python代码:

import os,sys
def main():
    if(os.path.exists("/sys/firmware/efi")):
        print"\n\n System is booted with uefi!"
    else:
        print"\n\n System is booted with rom bios"
main()
sys.exit(0)