Sto cercando un comando da terminale che non richieda all'utente in esecuzione di essere nel gruppo sudoers e anche di essere universale e non richiedere l'installazione di pacchetti aggiuntivi. Finora ho scoperto che se il sistema ha installato systemd, posso usare:
$ 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
 e sotto Nome icona e Chassis posso vedere se si tratta di una macchina virtuale o di una macchina fisica. Ma mi chiedevo se posso usare lscpu , soprattutto perché è un metodo più universale di hostnamectl e non richiede systemd. La mia teoria è che se la CPU ha un solo thread per core e non elenca la frequenza minima e massima della CPU, ciò dovrebbe indicare che il server è effettivamente virtualizzato.
$ 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
 So che se una CPU ha un solo thread per core non significa necessariamente che sia una VM di sicuro, ma tutte le CPU moderne dovrebbero avere 2 thread per core e inoltre posso anche tenere conto della mancanza/presenza di frequenza CPU minima e massima in lscpu uscita.
Risposta accettata:
A determinate condizioni:
comando del terminale che non richiede che l'utente in esecuzione sia nel gruppo sudoers e che sia anche universale e non richieda l'installazione di pacchetti aggiuntivi.
il metodo più semplice ovvio per le VM non modificate, che i proprietari non hanno intenzionalmente provato a nascondere il fatto che il sistema operativo è una VM, è
cat /sys/class/dmi/id/product_name
Più possibilità:
- Come rilevare la virtualizzazione
- 16 metodi per verificare se un sistema Linux è fisico o macchina virtuale
Al di fuori delle condizioni dell'autore fornite dall'OP, ci sono approcci più complicati come questo:dove sono? Identificazione del sistema operativo e della virtualizzazione senza chiamate di sistema