It is often said that...
the fact that resources say that...
Не следуйте слепо «рекомендациям»; невозможно сделать карго -культовое программирование "правильно". Есть ли какой-то первичный «ресурс», такой как справочная страница bash (1 )или стандартная спецификация, в которой говорится об этом?
Если вы хотите оценить строку как фрагмент скрипта, вам следует использовать eval
. Для этого:
cmd="echo \"You can't see me\""
eval "$cmd"
Когда вы используете переменную без кавычек, ее расширения не будут повторно сканироваться на наличие метасимволов оболочки, таких как одинарные или двойные кавычки, и повторно анализироваться, а будут разделены только на символы из переменной IFS
и расширенного глобуса -. (, если он содержит символы *
, ?
или [
):
cmd="echo \"What's a *? \""
eval "$cmd"
What's a *?
$cmd
"What's a [all the files in your directory] "
В последнем примере cmd
будет развернуто, затем разбито на echo
, "What's
, a
, *?
и "
, *?
будет развернуто по шаблону, а затем echo
будет запущен со всеми остальными строками в качестве аргументов и выведет их, соединенные пробелами, в стандартный вывод (, а в некоторых оболочках echo
также будет интерпретировать \n
и другие escape-последовательности в своих аргументах ).
Это комментарий, размещенный здесь для оформления:
Это полный вывод lsmod | grep kvm
? В этом случае что-то кажется неправильным, мой вывод:
kvm_intel 233472 0
kvm 757760 1 kvm_intel
irqbypass 16384 1 kvm
В случае отзыва эквивалент применим для процессоров AMD,kvm_amd
Вы также можете попробовать простую kvm
команду в своей оболочке; пустая виртуальная машина с BIOS, пытающимся загрузиться, должна запуститься. В этом случае с qemu -kvm все в порядке, возможно, что-то не так с libvirt
или Virt -Manager.
KVM загружен, но также должен быть загружен модуль kvm_intel
или kvm_amd
. Например, на моей машине это выглядит так:
[Alex@NormandySR2 nested_virt_kvm]$ lsmod | grep kvm
kvm_intel 327680 7
kvm 909312 1 kvm_intel
Как вы заметили, может быть как минимум 2 причины, по которым это не работает.
Вы можете проверить, поддерживает ли ваш ЦП виртуализацию с помощью:
lscpu | grep vmx # intel
lscpu | grep svm # amd
Если его нет, проверьте, поддерживает ли ваша модель ЦП виртуализацию. (На веб-сайте поставщика есть эта информация ). Чтобы получить модель вашего процессора, вы можете использовать.
lscpu | grep 'Model'
Model: 60
Model name: Intel(R) Core(TM) i7-4810MQ CPU @ 2.80GHz
Как включить их автоматически? В зависимости от вашего дистрибутива они уже должны быть загружены после запуска. Но если по какой-то причине это не так, вы можете использовать:
echo -e 'kvm\nkvm_amd' | sudo tee -a /etc/modules-load.d/kvm.conf
Это сэкономит две строки в /etc/module-load.d
. Дополнительные сведения о модулях -load.d можно найти в man 5 modules-load.d
или на одном из веб-сайтов, на которых размещены руководства, такие как :https://www.systutorials.com/docs/linux/man/5-modules-load.d/