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ż hostnamectl
i 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 lscpu
wyjściu.