найдите: чернослив не игнорирует указанный путь

Целевая доля (Вы не дали путь 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.

11
18.01.2014, 18:57
3 ответа

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) не был бы назван, следовательно строка печатается.

3
27.01.2020, 19:57

Я был сбит с толку, почему обрезал каталоги также распечатывались командой 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 , -print выполняется для всех файлов, для которых выражение истинно.

, что означает, что, поскольку выражение соответствует имени каталога 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 должна быть обновлена, чтобы предотвратить бесконечную путаницу во всем мире по поводу этой команды.

21
27.01.2020, 19:57

Вот быстрый и грязный вариант:

find | fgrep -v /.git

Я просто не могу вспомнить findсложный синтаксис...

-1
20.08.2021, 12:58

Теги

Похожие вопросы