Я ищу команду терминала, которая не требует, чтобы исполняющий пользователь был в группе sudoers, а также был универсальным и не требовал установки дополнительных пакетов. Итак, я обнаружил, что если в системе установлен systemd, я могу использовать:
$ 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
и под Именем значка и Шасси я могу видеть, является ли это VM или физическая машина. Но мне было интересно, могу ли я использовать lscpu
, тем более что это более универсальный метод, чем hostnamectl
и не требующий systemd. Моя теория состоит в том, что если у ЦП есть только один поток на ядро, а также не указаны минимальная и максимальная частота ЦП, это должно указывать на то, что сервер действительно виртуализирован.
$ 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
Я знаю, что если ЦП имеет только один поток на ядро, это не обязательно означает, что это виртуальная машина, но тогда все современные ЦП должны иметь 2 потока на ядро, и кроме того, я также могу принять во внимание отсутствие / наличие минимальная и максимальная частота процессора на lscpu
выходе.
источник
Ответы:
При данных условиях:
очевидный простейший метод для неизмененных виртуальных машин, владельцы которого намеренно не пытались скрыть тот факт, что ОС является виртуальной машиной,
Больше возможностей:
Помимо приведенных автором ОП условий, существуют более сложные подходы, подобные этому: где я? Идентификация операционной системы и виртуализации без системных вызовов
источник
cat /sys/class/dmi/id/product_name
, поэтому я не уверен, насколько это полезно.Standard PC (i440FX + PIIX, 1996)
- это хорошо известный отпечаток виртуальных машин QEMU / KVM. Кстати, этот отпечаток можно легко переопределить: askubuntu.com/questions/564643/…pr -t /sys/class/dmi/id/sys_vendor /sys/class/dmi/id/product_name
содержимое этих двух файлов также должно дать вам довольно точное представление о том, является ли система физической или виртуальной.Это также требует systemd (который в наши дни довольно распространен), но
systemd-detect-virt
это лучший инструмент, чтобы определить, работает ли он на физическом или виртуальном оборудовании.Вы можете посмотреть на можно логике , используемой
systemd-detect-virt
, вы заметите , что она на самом деле выглядит во многих местах , чтобы обнаружить несколько различных технологий виртуализации ...Я думаю, что что-то наивное, такое как просмотр
lscpu
результатов, может иногда работать, но я думаю, что это вряд ли будет работать постоянно. Также обратите внимание, что многие технологии позволяют (и даже вероятно) виртуальным машинам иметь более одного потока на ядро, поэтому я даже не думаю, что конкретной функции достаточно для любого надежного обнаружения.источник