#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)
评论
有趣的问题。不是确切的欺骗,但可以在此处尝试回答类似的问题。unix.stackexchange.com/questions/148356/…