Is there something which a docker container can't be used for while a Linux virtual machine can?
Конечно. Контейнер — это просто процесс :, он не может вести себя как другой процессор, не может загружать другое ядро и не может запускать другую операционную систему. Виртуальная машина может делать все эти вещи. Поскольку все состояние виртуальной машины сохраняется внутри гипервизора, ее можно приостановить/возобновить, перенести на другие физические хосты и выполнить аналогичные действия, которые затруднительны или невозможны при использовании существующей технологии контейнеров.
Is it correct that if you require a Linux kernel version different from the host's, you can only use a virtual machine not a docker container?
Верно. Контейнеры — это просто процессы, работающие в ядре хоста, точно так же, как и неконтейнерные -процессы на хосте.
In particular, Docker and VirtualBox seem to put KVM/QEMU at disadvantage.
У них разные варианты использования. В зависимости от того, что вы хотите сделать, любая технология может оказаться лучшим выбором.
Аргументы для опций xinput
принимают имена устройств в виде строк:
$ xinput --list --id-only '2.4G Composite Devic'
29
$ xinput --disable '2.4G Composite Devic' # Equivalent to 'xinput --disable 29'
На случай, если регулярное выражение все еще нужно, вот решение на основе perl -:
echo "↳ 2.4G Composite Devic id=29 [slave keyboard (3)]" | perl -pe 's/.*id=(\d+)\s.*/$1/g'
Использованиеawk
:
echo "2.4G Composite Devic id=29 [slave keyboard (3)]" | awk '{gsub(/id=/,"",$4); print $4}'
29
Использованиеsed
:
echo "2.4G Composite Devic id=29 [slave keyboard (3)]" | sed 's/.*id\=\([0-9]\+\).*/\1/g'
29
Использование grep:
echo "2.4G Composite Devic id=29 [slave keyboard (3)]" | grep -Eo 'id=[0-9]+' | grep -Eo '[0-9]+'
29
sed
является надмножеством grep
здесь, так что вы можете сделать:
xinput list |
sed -n '/.*2\.4G Composite Devic.*id=\([[:digit:]]\{1,\}\).*/\1/p'
Если ваш sed
поддерживает -E
для расширенных регулярных выражений, это становится немного более разборчивым:
xinput list |
sed -nE '/.*2\.4G Composite Devic.*id=([[:digit:]]+).*/\1/p'
С реализациями grep
, которые поддерживают-o
(для вывода согласованной части )и -P
для PCRE:
xinput list | grep -Po '2\.4G Composite Devic.*id=\K\d+'