Отменить stderr «доступ запрещен» изначально в find

Проблема вызвана ошибкой в ​​используемой версии TSM, когда клиент TSM может автоматически пропускать файлы в файловых системах btrfs и связывать монтирования.

Подробную информацию об ошибке можно найти на веб-сайте IBM: http://www-01.ibm.com/support/docview.wss?uid=swg21977589

Решение - для обновления до более новой версии клиента TSM (например, 7.1.4.1).

1
12.06.2019, 01:08
2 ответа

Чтобы избежать получения ошибок разрешений от find, вам следует избегать провоцирования этих ошибок. Вы делаете это, избегая входа в недоступные каталоги.

Поиск и отображение путей к каталогам, которые не читаются текущим пользователем, но не спускаются в них, стиль GNU find:

find / -type d ! -readable -prune

Действие -pruneудаляет исследуемый в настоящее время путь из пути поиска find.

Со стандартным findвам пришлось бы сложным образом комбинировать -permи -userи -groupдля проверки разрешений для каждого каталога в зависимости от владельцев каталога. Я думаю, что пытался сделать это пару раз, но это сложно.

Чтобы заботиться только о битах разрешения «другие»:

find / -type d ! -user "$(id -u)" ! -group "$(id -g)" ! -perm -005 -prune

Это найдет любой каталог, не принадлежащий текущему пользователю, не принадлежащий к группе текущего пользователя и биты разрешения которого не позволяют «другим» читать (список )или выполнять (ввод )это, а затем удалить их из пути поиска.

Полная проверка всех битов разрешений может выглядеть примерно так

find / -type d \( \(   -user "$(id -u)"                     ! -perm -500 \) -o \
                  \( ! -user "$(id -u)"   -group "$(id -g)" ! -perm -050 \) -o \
                  \( ! -user "$(id -u)" ! -group "$(id -g)" ! -perm -005 \) \) -prune

Разница между этим и -readableGNU findзаключается в том, что -readableтакже рассматривает ACL и т. д.


Чтобы отбросить ошибки разрешений из find, перенаправьте его стандартный поток ошибок на /dev/null.

2
27.01.2020, 23:22

Маловероятно, что вы найдете много команд (, если таковые имеются ), которые имеют возможность подавлять сообщения об ошибках. Это связано с тем, что отбросить stderr с такой конструкцией, как 2>/dev/null, тривиально.

В частности, findизначально не имеет такой опции.

1
27.01.2020, 23:22

Теги

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