Estoy buscando un comando de terminal que no requiera que el usuario que lo ejecuta esté en el grupo sudoers y que también sea universal y no requiera instalar paquetes adicionales. Hasta ahora he descubierto que si el sistema tiene systemd instalado, entonces puedo usar:
$ hostnamectl status
Static hostname: mint
Icon name: computer-laptop
Chassis: laptop
Machine ID: bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
Boot ID: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
Operating System: Linux Mint LMDE
Kernel: Linux 3.16.0-6-amd64
y bajo Nombre de icono y Chasis, puedo ver si es una máquina virtual o una máquina física. Pero me preguntaba si puedo usar lscpu
, especialmente porque es un método más universal que hostnamectl
y no requiere systemd. Mi teoría es que si la CPU tiene solo un subproceso por núcleo y tampoco aparece la frecuencia mínima y máxima de la CPU, esto debería ser una indicación de que el servidor está realmente virtualizado.
$ lscpu
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
CPU(s): 8
On-line CPU(s) list: 0-7
Thread(s) per core: 2
Core(s) per socket: 4
Socket(s): 1
NUMA node(s): 1
Vendor ID: GenuineIntel
CPU family: 6
Model: 60
Model name: Intel(R) Core(TM) i7-4710HQ CPU @ 2.50GHz
Stepping: 3
CPU MHz: 2500.488
CPU max MHz: 3500.0000
CPU min MHz: 800.0000
BogoMIPS: 4988.18
Virtualization: VT-x
L1d cache: 32K
L1i cache: 32K
L2 cache: 256K
L3 cache: 6144K
NUMA node0 CPU(s): 0-7
Sé que si una CPU tiene solo un subproceso por núcleo no significa necesariamente que sea una VM con seguridad, pero todas las CPU modernas deberían tener 2 subprocesos por núcleo y, además, también puedo tener en cuenta la falta/presencia de frecuencia de CPU mínima y máxima en el lscpu
salida.
Respuesta aceptada:
En determinadas condiciones:
comando de terminal que no requiere que el usuario que lo ejecuta esté en el grupo sudoers y que también sea universal y no requiera instalar paquetes adicionales.
el método más simple y obvio para máquinas virtuales no modificadas, cuyos propietarios no han tratado de ocultar intencionalmente el hecho de que el sistema operativo es una máquina virtual, es
cat /sys/class/dmi/id/product_name
Más posibilidades:
- Cómo detectar la virtualización
- 16 métodos para verificar si un sistema Linux es una máquina física o virtual
Fuera de las condiciones dadas por el autor de OP, existen enfoques más complicados como este:¿Dónde estoy? Sistema operativo e identificación de virtualización sin llamadas al sistema