linux 如何检测脚本是否在虚拟机上运行?

m0rkklqb  于 4个月前  发布在  Linux
关注(0)|答案(4)|浏览(81)

我不认为这个问题需要任何解释。我正在编写一个软件,可以 Boot 虚拟机来模拟网络。如果该软件已经在虚拟机上运行,我想禁用此功能。
我已经读过这篇文章:How to detect if my application is running in a virtual machine?,但我需要在Linux上做,那篇文章只涉及Windows。
我把它标记为Perl问题,因为我必须在Perl中这样做,但可能在proc或其他地方有一些文件需要检查,这对所有语言都是一样的。
我主要对检测VirtualBox和KVM感兴趣,因为这些是我正在使用的虚拟机。
有什么建议吗?

p5fdfcr1

p5fdfcr11#

我将具体谈谈VMware和虚拟机盒虚拟机运行Linux作为客户操作系统.如果你运行下面的命令,你会知道,底层硬件是VMware/VirtualBox这证明它是一个虚拟机.
对于VMware访客:

# dmidecode  | grep -i product
        Product Name: VMware Virtual Platform

字符串
对于Virtual Box访客:

# dmidecode  | grep -i product
    Product Name: VirtualBox


dmidecode“是一个Linux系统命令。你可以让perl在脚本的开头运行dmidecode并提取值。如果它是一个虚拟机,那么脚本应该退出,不再执行。
我没有任何其他的管理程序在我的处置,让你什么上面的命令返回他们。
希望这对你有帮助。

bvhaajcl

bvhaajcl2#

一个快速的谷歌收益dmo.ca/ blog/ How to detect virtualization
Perl模块和一切。

6yt4nkrj

6yt4nkrj3#

你有没有试过Sys::Detect::Virtualization,在CPAN上可用?

vkc1a9a2

vkc1a9a24#

在安装了systemd的现代Linux系统上,您可以简单地运行systemd-detect-virt。如果它检测到它正在虚拟环境(VM容器)中运行,它将打印一个字符串指示检测到的环境并以0退出,否则,它将打印“none”并以非零值退出。在PERL中,您可以这样做:

#! /usr/bin/perl -w
if ( system("systemd-detect-virt >& /dev/null") == 0){
    print "Running in a virtual machine\n";
}
else {
    print "No virtualization technologies detected\n";
}

字符串

相关问题