Estoy buscando un comando de terminal que no requiera que el usuario ejecutor esté en el grupo de sudoers y que también sea universal y no requiera instalar paquetes adicionales. Hasta ahora he descubierto que si el sistema tiene instalado systemd, 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 el nombre del icono y el chasis puedo ver si es VM o máquina física. Pero me preguntaba si puedo usarlo lscpu, especialmente porque es un método más universal que hostnamectly no requiere systemd. Mi teoría es que si la CPU tiene solo un hilo por núcleo y tampoco figura en 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 VM, 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 la lscpusalida.