有时候我们拿到一台设备,因为不是自己的,不清楚是虚拟机还是物理机,那想判断是虚拟机还是物理机怎么办呢?在linux下提供一些命令可查看是物理机还是虚拟机,例如:lscpu、systemd-detect-virt、dmidecode命令等方式。

可以这么想,如果是物理机,这个物理机厂商是什么,如果是虚拟机,这是虚拟化环境到底是 VMware 还是 KVM呢等等信息。

下面我们通过几个命令来介绍如果判断是否是物理机还是虚拟机:

lscpu命令

我们先看man lscpu:

lscpu - display information about the CPU architecture

翻译就是显示有关CPU架构的信息。具体的描述如下:

翻译一下:

lscpu命令从sysfs、/proc/cpuinfo、或者某些适用于特定架构的库中收集数据。命令的输出会以人类易读的方式展示如下信息:cpu、线程、核心、插槽和Non-Uniform MemoryAccess (NUMA)节点的数量,也有cpu共享缓存,cpu的族号,运行模式,处理指令的速度,大小端,步进等信息

在虚拟环境下,系统架构信息展示映射着客户操作系统的设置,这和物理主机是有明显差异的。在架构上支持检索物理拓扑信息,lscpu命令也显示主机系统中的物理插槽数量,芯片,内核数。

我们再来看一下命令执行结果:


可以看出厂商是VMware,表示这是一个虚拟机。我们再来看一下命令执行结果:


上面的信息,虚拟化类型是VT -x。

systemd-detect-virt命令

我们先看man systemd-detect-virt:

检测虚拟环境中的执行情况

具体的描述如下:


翻译如下:

systemd-detect-virt在虚拟环境中检测执行。 它可以识别虚拟化技术,并且可以
将完整的VM虚拟化与容器虚拟化区分开来。 systemd-detect-virt退出,返回值为0(成功)是否检测到虚拟化技术,否则为非零(错误)。 默认情况下,任何类型的检测到虚拟化,并且选–container和–vm可用于限制虚拟化的类型 检测到。

下面我们可以直接通过systemd-detect-virt命令判断是否物理机:

如果输出为none,则说明是物理机。如果输出下面的信息如:

表示这是一台虚拟机。

dmidecode命令

dmidecode命令可以让你在Linux系统下获取有关硬件方面的信息。dmidecode的作用是将DMI数据库中的信息解码,以可读的文本方式显示。由于DMI信息可以人为修改,因此里面的信息不一定是系统准确的信息。dmidecode遵循SMBIOS/DMI标准,其输出的信息包括BIOS、系统、主板、处理器、内存、缓存等等。

我们再来看一下命令执行结果:

如上可以看出这台是物理机,厂商为MICRO-STAR…,型号为MS-S0391等信息。当然如果是虚拟机,如执行命令。


看出这台是虚拟机,还有厂商信息VMware等等。输入dmidecode -s system-product-name 直接输出厂商信息。

物理机:

虚拟机:

这个时候我们可以写个脚本:

#!/bin/bashfunction IsVirtualMachine()
{dmidecode -s system-product-name | grep -i "virtual"if [ $? -eq 0 ]; thenreturn 1fireturn 0
}IsVirtualMachine

编译输出:

在qemu kvm, VBOX虚拟机也可以这样判断。最后,还可以使用dmesg |grep -i virtual命令查找,这里就不多说了。

检查当前设备是物理机还是虚拟机环境

下面写个程序,检查是物理机还是虚拟机环境,当前已知的虚拟环境类型基本都列举出来了,主要有:

qemu QEMU 软件虚拟机
kvm Linux 内核虚拟机
zvm s390 z/VM
vmware VMware 虚拟机
microsoft Hyper-V 虚拟机
oracle Oracle VirtualBox 虚拟机
xen Xen 虚拟机(仅 domU, 非 dom0)
bochs Bochs 模拟器
uml User-mode Linux
parallels Parallels Desktop, Parallels Server

如上整合如下代码初略判断:

#include <stdio.h>
#include <string.h>#define VIRTUAL_TYPE 13/**********************************
功能描述:检查当前设备是实体机还是虚拟机环境
返回值: 0虚拟机环境,1实体机环境
***********************************/int check_env_type(void){FILE *fp = NULL;char buff[256] = {0};//当前已知的虚拟环境类型char *virtual[] = {"VMWARE","VIRTUAL","VIRUALBOX","VBOX","QEMU","KVM","ZVM","ORACLE","MICROSOFT","XEN","BOCHS","UML","PARALLELS"};int i = 0;if (NULL == (fp = popen("dmidecode -s system-product-name","r"))){printf("popen error\n"); return 1;//默认实体机设备}if (NULL != fgets(buff,sizeof(buff),fp)){printf("system name = %s\n",buff);for (i = 0; i < VIRTUAL_TYPE; i++){if (0 == strcasecmp(buff,virtual[i])){printf("mach virtual system = %s\n",buff);pclose(fp);return 0;}} }printf("not match virtual system = %s \n",buff);pclose(fp);return 1;
}int main(int argc, char *argv[]){printf("Check whether it is a virtual machine or a physical machine\n");printf("env type %d\n",check_env_type());return 0;
}

输出结果:

上面测试的是在物理机上进行测试的,直接输出厂商信息。

总结

如上总结了几种判断Linux服务器是虚拟机还是物理机的方法,不一定准确,仅供参考,当然也可能还有其他更好的方法。欢迎补充!


欢迎关注微信公众号【程序猿编码】,添加本人微信号(17865354792),回复:领取学习资料。或者回复:进入技术交流群。网盘资料有如下:

Linux下如何判断服务器是虚拟机还是物理机?相关推荐

  1. 判断服务器是虚拟机还是物理机方式

    一.如果是Windows: 1.cmd使用命令:systeminfo | findstr /i "System Model" 如果System Model返回信息内:后面含有Vir ...

  2. linux区分物理机和虚拟机,如何判断linux服务器是虚拟机还是物理机

    如何判断linux服务器是虚拟机还是物理机 发布时间:2020-03-31 15:38:12 来源:亿速云 阅读:1089 作者:三月 随着虚拟化技术的日益成熟,越来越多的企业开始接受使用虚拟化软件产 ...

  3. 虚拟机linux ftp慢,虚拟机Linux下配置FTP服务器的方法

    虚拟机Linux下配置FTP服务器的方法 1.确保虚拟机系统与宿主系统是桥接设置,以方便连接. 2.在虚拟机系统中安装ftp服务器,我安装的是vsftpd服务器.由于安装的虚拟机系统CentOS 中已 ...

  4. Linux下搭建Apache服务器

    Linux下搭建Apache服务器(完整版) 什么是Apache? Apache Licence是著名的非盈利开源组织Apache采用的协议.该协议和BSD类似,同样鼓励代码共享和尊重原作者的著作权, ...

  5. 查linux服务器CPU多少C,在linux 下怎么查看服务器的cpu和内存的硬件信息

    在linux 下怎么查看服务器的cpu和内存的硬件信息 ------------------------------------------------ fzljnqkt 采纳率:44% 11级 20 ...

  6. 批量修改linux服务器密码,Linux下批量修改服务器用户密码方法步骤

    Linux下批量修改服务器用户密码方法步骤 密码快要过期.由于机器数量众多,因此采用批量修改密码的方式来进行处理. 下面是具体步骤: 1.配置ssh免key # ssh-keygen -t rsa - ...

  7. Linux下的DNS服务器的搭建实战

    Linux下的DNS服务器的搭建 DNS(Domain Name Server,域名服务器) 是进行域名(domain name)和与之相对应的IP地址 (IP address)转换的服务器. DNS ...

  8. Linux下的WEB服务器的搭建实战

    Linux下的web服务器搭建详细过程 每次搭建一个服务器之前,比如MySQL.DNS.WEB等首先要挂载磁盘目录文件 挂载就是当要使用某个设备时(例如光盘或软盘),必须先将它们对应放到 Linux ...

  9. linux服务器的功能需求,Linux下的各种服务器技术及配置 (毕业论文).doc

    Linux下的各种服务器技术及配置 (毕业论文) PAGE 26 PAGE 27 Linux下的各种服务器技术及配置 姓 名: 学 号: 指导老师: 系 名: 专 业: 班 级: . 二00一二年 十 ...

最新文章

  1. 配置免密码登录Linux服务器
  2. 基于Autoencoder的反欺诈数据集的异常检测
  3. ETSI MEC — 面向边缘计算的 5G 增强技术探讨
  4. android电话api,Android电话信息相关API
  5. Leetcode:The Skyline Problem
  6. [转]JAVA实现文件压缩
  7. 19.Mysql索引结构及常见索引的区别
  8. 极速生成缩略图,Serverless 支撑赛事转播锁定冬奥亮点
  9. 如何在Python3.x上安装Sentry,实时监控业务错误
  10. JDBC原生连接与连接池介绍
  11. 不想使用Windows自带远程桌面客户端的另外一种选择
  12. pwm占空比的c语言编程详解,灵动微MM32F003硬件最小系统 --- PWM占空比从0%到100%例程解析【18】...
  13. peer之间的通信协议
  14. windows主机如何登录阿里云服务器
  15. pmp中ram和raci的区别_【PMP考前冲刺】知识点大全(六)
  16. php站长统计,PHP统计各大引擎蜘蛛爬行访问记录插件
  17. 纵观计算机简史ppt,纵观计算机简史初中信息技术新课本中国地图出社..ppt
  18. 使用js调用设备摄像头并实现拍照
  19. 分布式系统理论:Quorum算法
  20. CSS Display与Visibility区别和用法

热门文章

  1. 如何提升产品用户体验?分享4个用户体验图表工具!
  2. PHP利用Java+JasperReport生成PDF快递单
  3. 2022中国碳交易与碳管理国际峰会邀请函
  4. 计算机一级考试题word方面,2016年计算机一级考试Word模拟试题
  5. springboot毕设项目高校课程知识库系统hd2m4(java+VUE+Mybatis+Maven+Mysql)
  6. 终于发布一个android应用程序到机锋市场,AppChina应用汇了
  7. mapgis处理编辑属性结构时 死机问题
  8. 金钱、理想与人生(1)
  9. net-java-php-python-小区物业管理系统功能添加计算机毕业设计程序
  10. 融e学 一个专注于重构知识,培养复合型人才的平台【获取考试答案_破解】