実行中のユーザーが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
アイコン名とシャーシの下で、仮想マシンか物理マシンかを確認できます。しかし、lscpu
特にsystemdよりも一般的なアプローチであり、hostnamectl
systemdが必要ないので、それを使用できるかどうか疑問に思います。私の理論は、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コアあたりのスレッドが1つしかないため、必ずしもVMという意味ではありませんが、すべての最新CPUには2つのコアあたりのスレッドが必要であり、最小および最大CPU周波数の不在/存在も考慮できます。出力からlscpu
。
答え1
与えられた条件で:
実行ユーザーがsudoersグループに属する必要はなく、追加のパッケージをインストールする必要なしに一般的に使用されるターミナルコマンド。
所有者が意図的にオペレーティングシステムが仮想マシンであるという事実を隠そうとしない修正されていない仮想マシンの場合、最も簡単な方法は次のとおりです。
cat /sys/class/dmi/id/product_name
より多くの可能性:
OP作成者が提供した条件に加えて、次のようなより複雑な方法があります。私はどこですか?システムコールなしでオペレーティングシステムと仮想化を識別する
答え2
これにはsystemdも必要ですが(とにかく最近はかなり一般的です)systemd-detect-virt
물리적 하드웨어에서 실행되는지 가상 하드웨어에서 실행되는지를 알려주는 더 나은 도구입니다.
당신은 볼 수 있습니다논리를 사용하면 systemd-detect-virt
실제로 여러 가지 다른 가상화 기술을 감지하기 위해 여러 위치를 찾는다는 것을 알 수 있습니다.
출력을 보는 것과 같은 순진한 lscpu
작업은 특정 상황에서는 때때로 작동할 수도 있지만 항상 작동하기는 어려울 것이라고 생각합니다. 또한 많은 기술을 통해 가상 머신이 코어당 여러 스레드를 갖는 것이 가능해졌기 때문에 이 특정 기능만으로는 여기에서 어떤 종류의 안정적인 감지에도 충분하지 않다고 생각합니다.