Целевая доля (Вы не дали путь qemu, пытается получить доступ), должен иметь svirt_image_t
контекст защиты (может быть проверен путем выполнения ls -ldZ <pathToDestination>
). Если это маркировано как что-то еще, что SELinux не позволит kvm чтению-записи на том dir.
Решение состоит в том, чтобы сделать следующее (замена <pathToDestination> с фактическим путем):
semanage fcontext -a -t svirt_image_t "/<pathToDestination>(/.*)?"
restorecon -vR <pathToDestination>
Вышеупомянутые наборы контекст файла по умолчанию для чего-либо под и включая pathToDestination, вторая команда говорит SELinux восстанавливать контексты файла на всем под тем каталогом к тому, что мы имеем как являющийся значением по умолчанию (т.е. что semanage изменяет).
Можно также проверить /var/log/audit/audit.log
для возможной причины для отказа AVC
Ищите отказы AVC сегодня /sbin/ausearch -m avc -ts today
Или проверьте /var/log/messages
Это скажет Вам уникальный идентификатор для отказа AVC, который должен быть выполнен как аргумент sealert -l
Пример: sealert-l 84e0b04d-d0ad-4347-8317-22e74f6cd020
Необходимо пройти ту информацию. Это говорит командам, что необходимо выполниться для преодоления отказов AVC.
man
страница для find
дает:
-prune True; if the file is a directory, do not descend into it. If
-depth is given, false; no effect. Because -delete implies
-depth, you cannot usefully use -prune and -delete together.
Таким образом в первом примере это не так, чтобы -path ./.git -prune
неверно и поэтому действие по умолчанию (-print
) не был бы назван, следовательно строка печатается.
Я был сбит с толку, почему обрезал каталоги также распечатывались командой find
и некоторыми другими запутанными подробностями того, как работает -prune
, но удалось выяснить это с помощью нескольких примеров.
Для выполнения приведенных ниже примеров создайте следующие каталоги и файлы.
mkdir aa
mkdir bb
touch file1
touch aa/file1
touch bb/file3
Чтобы создать эту структуру:
$ tree
.
├── aa
│ └── file1
├── bb
│ └── file3
└── file1
Теперь используйте find для поиска каталогов с именем aa
. Здесь нет проблем.
$ find . -type d -name aa
./aa
Ищем все каталоги, кроме aa, и получаем текущий каталог .
и ./ bb
, что тоже имеет смысл.
$ find . -type d ! -name aa
.
./bb
Пока все хорошо, но когда мы используем -prune
, find возвращает каталог, который мы сокращаем, что сначала смутило меня, потому что я ожидал, что он вернет все другие каталоги, а не тот, который удаляется. .
$ find . -type d -name aa -prune
./aa
Причина, по которой он возвращает удаляемый каталог, объясняется не в разделе -prune
страниц руководства, как указано в ответе Тимо , а в ВЫРАЖЕНИЯХ
раздел:
Если выражение не содержит действий, кроме
-prune
,
, что означает, что, поскольку выражение соответствует имени каталога aa
, тогда выражение будет иметь значение true и будет напечатано, потому что find неявно добавляет -print
в конце всей команды.Он не будет добавлять -print
, однако, если вы намеренно добавите действие -o -print
в конец самостоятельно:
find . -type d -name aa -prune -o -print
.
./file1
./bb
./bb/file3
Здесь команда find НЕ добавляет неявных -print
больше не будет, поэтому каталог, который мы сокращаем ( aa
), не будет напечатан.
Итак, наконец, если мы добавим предложение, которое ищет файлы с шаблоном имени файла file *
после -o
, то вы должны поместить -отпечаток
в конце этого второго предложения следующим образом:
find . \( -type d -name aa -prune \) -o \( -type f -name 'file*' -print \)
./file1
./bb/file3
Причина, по которой это работает, та же самая: если вы не поместите -print
во втором предложении, то, поскольку нет другого действия, кроме действия -prune
, find автоматически добавит -print
в КОНЕЦ команды, заставляя предложение -prune
печатать сокращенный каталог:
find . \( \( -type d -name aa -prune \) -o \( -type f -name 'file*' \) \) -print
./aa
./file1
./bb/file3
В общем, вам нужно поместить команду -print
во второе предложение. Если вы поместите его посередине, как это было с оригинальным плакатом, он не будет работать правильно, потому что удаляемые файлы будут напечатаны немедленно, и во втором предложении не будет возможности выбрать нужные файлы:
find . \( -type d -name aa -prune -o -print \) -o \( -type f -name 'file*' \)
.
./file1
./bb
./bb/file3
Так что, к сожалению, оригинал poster ошибся в приведенной выше команде, разместив -print
не в том месте. Это могло бы сработать для его конкретного случая, но не работает в общем случае.
Есть тысячи людей, которым трудно понять, как работает -prune
.
Страница руководства find
должна быть обновлена, чтобы предотвратить бесконечную путаницу во всем мире по поводу этой команды.
Вот быстрый и грязный вариант:
find | fgrep -v /.git
Я просто не могу вспомнить find
сложный синтаксис...