실행 중인 사용자가 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에 코어당 스레드가 하나만 있고 최소 및 최대 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에 코어당 스레드가 하나만 있다고 해서 반드시 VM이라는 의미는 아니지만 모든 최신 CPU에는 코어당 스레드가 2개 있어야 하며, 최소 및 최대 CPU 주파수의 부재/존재도 고려할 수 있습니다. 출력에서 lscpu
.
답변1
주어진 조건에서:
실행 사용자가 sudoers 그룹에 속할 필요가 없고 추가 패키지를 설치할 필요 없이 보편적으로 사용되는 터미널 명령입니다.
소유자가 의도적으로 운영 체제가 가상 머신이라는 사실을 숨기려고 시도하지 않는 수정되지 않은 가상 머신의 경우 가장 쉬운 방법은 다음과 같습니다.
cat /sys/class/dmi/id/product_name
더 많은 가능성:
OP 작성자가 제공한 조건 외에도 다음과 같이 더 복잡한 방법이 있습니다.내가 어디 있지? 시스템 호출 없이 운영 체제 및 가상화 식별
답변2
여기에는 systemd도 필요하지만(어쨌든 요즘 꽤 일반적임)systemd-detect-virt
물리적 하드웨어에서 실행되는지 가상 하드웨어에서 실행되는지를 알려주는 더 나은 도구입니다.
당신은 볼 수 있습니다논리를 사용하면 systemd-detect-virt
실제로 여러 가지 다른 가상화 기술을 감지하기 위해 여러 위치를 찾는다는 것을 알 수 있습니다.
출력을 보는 것과 같은 순진한 lscpu
작업은 특정 상황에서는 때때로 작동할 수도 있지만 항상 작동하기는 어려울 것이라고 생각합니다. 또한 많은 기술을 통해 가상 머신이 코어당 여러 스레드를 갖는 것이 가능해졌기 때문에 이 특정 기능만으로는 여기에서 어떤 종류의 안정적인 감지에도 충분하지 않다고 생각합니다.