実行中のユーザーが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
私の理論では、CPUのコアあたりのスレッドが1つだけで、最小および最大のCPU周波数もリストされていない場合、これはサーバーが実際に仮想化されていることを示しているはずです。
$ 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
CPUのコアあたりのスレッドが1つだけである場合、必ずしもそれがVM=であることは確かですが、すべての最新のCPUはコアあたり2つのスレッドを持っている必要があります。さらに、また、lscpu
の出力で最小および最大CPU周波数の欠如/存在を考慮に入れてください。
特定の条件下で:
実行ユーザーがsudoersグループに属している必要がなく、ユニバーサルであり、追加のパッケージをインストールする必要がない端末コマンド。
所有者が意図的にOSがVMであるという事実を隠そうとしなかった、変更されていないVMの最も簡単な方法は、
cat /sys/class/dmi/id/product_name
その他の可能性:
OP作成者の条件以外に、次のようなより複雑なアプローチがあります: 私はどこですか?システムコールなしのオペレーティングシステムと仮想化の識別
これにはsystemdも必要です(これは最近かなり一般的になっています)が、- systemd-detect-virt
は、これが物理ハードウェアで実行されているか仮想ハードウェアで実行されているかを判断するための優れたツールです。
systemd-detect-virt
によって使用される logic を見ると、実際にさまざまな場所を調べて、いくつかの異なる仮想化テクノロジーを検出していることがわかります...
場合によっては、lscpu
の出力を確認するなどの単純なことでうまくいく場合もありますが、常にうまくいくとは限りません。また、多くのテクノロジーにより、VMがコアごとに複数のスレッドを持つことが可能になる可能性が高いため、ここでは特定の機能で信頼できる検出を行うのに十分であるとは思わないことに注意してください。