Любая опция ведения журнала, предоставляемая QEMU, будет слишком низкоуровневой для того, что вам нужно: ваша проблема не в том, что виртуальное оборудование работает некорректно, а только в том, что программное обеспечение внутри виртуальной машины требует внимание.
В этом отношении виртуальная машина не отличается от реальной машины, и решение то же самое. Ваш вопрос предполагает, что виртуальная машина работает под управлением FreeBSD, поэтому вам следует проверить, используя rsyslog
, чтобы отправить журналы на внешний сервер системного журнала (который может быть вашим хост-компьютером) через сетевое соединение.
(Я не очень хорошо знаком с BSD, поэтому я не уверен на 100%, что rsyslog
- правильное или единственное решение здесь, но это ключевое слово должно помочь вам начать.)
Это работает.
#!/bin/bash
OUTPUT=$(cat /etc/passwd | grep -v nologin | grep -v root | awk -F: '{ print
$1 }')
block1=`hostname`
while read -r line
do
if [[ `sudo -l -U $line | grep NOPASSWD` ]];then
echo $block1 $line
else
echo $block1 $line
fi
done <<< "$OUTPUT"
Вы можете сделать это, как показано ниже:-
первая строка скрипта напечатает строку 1, а sed извлечет строку из [] и сохранит в param1
Вторая строка скрипта напечатает 4-ю строку, а awk напечатает столбец 3 и сохранит его в переменной param2
3-я строка скрипта напечатает 5-ю строку, а 4-я строка скрипта напечатает 6-ю строку, awk напечатает столбец 1, а sed удалит из него "
param1=$(head -1 sudoers.txt | sed 's/ok: \[//g;s/] => {//g')
param2=$(head -4 sudoers.txt | tail -1 | awk '{print $3}')
param3=$(head -5 sudoers.txt | tail -1 | awk '{print $1}' | sed 's/"//g')
param4=$(head -6 sudoers.txt | tail -1 | awk '{print $1}' | sed 's/"//g')
echo '$param1 $param2 $param3 $param4' > sudoers.txt
Если элементы вывода, о которых вы упомянули, являются статическими (, если вы уверены, что они не изменятся )означает. Вы можете напрямую использовать команду ниже
Здесь file.txt является доступным выводом
egrep -o "test1|oracle|cuser|dogfish" file.txt | sort | uniq | tac | tr "\n" " " | awk '{$5=$3;$3=$4;$4="";print $0}'| sed -r "s/\s+/ /g"
выход
test1 oracle cuser dogfish