Szukam polecenia terminalu, które nie wymaga, aby wykonujący użytkownik był w grupie sudoers, a także był uniwersalny i nie wymagał instalowania dodatkowych pakietów. Do tej pory odkryłem, że jeśli system ma zainstalowany system, mogę użyć:
$ 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
i pod nazwą ikony i podwozia widzę, czy jest to maszyna wirtualna czy fizyczna. Zastanawiałem się jednak, czy mogę użyć lscpu, zwłaszcza, że jest to metoda bardziej uniwersalna niż hostnamectli nie wymaga systemd. Moja teoria jest taka, że jeśli procesor ma tylko jeden wątek na rdzeń, a także nie ma na nim minimalnej i maksymalnej częstotliwości procesora, powinno to oznaczać, że serwer jest rzeczywiście zwirtualizowany.
$ 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
Wiem, że jeśli procesor ma tylko jeden wątek na rdzeń, niekoniecznie oznacza, że jest to VM, ale wszystkie współczesne procesory powinny mieć 2 wątki na rdzeń, a ponadto mogę wziąć pod uwagę brak / obecność minimalna i maksymalna częstotliwość procesora na lscpuwyjściu.