Существует ли какой-либо «стандартный» способ использования sudo с оболочкой?

Вы не можете rmdirкаталог, который не пуст или является точкой монтирования. Так что это удовлетворит ваше требование:

rm -f mountpoint/.autodiskmounted    # MacOS cookie
rmdir mountpoint 2>/dev/null

Если вы работаете в сценарии с установленным выходом при ошибке , вы можете использовать rmdir... || true. (Обратите внимание, что от --ignore-fail-on-non-emptyмало толку, потому что мы получим необработанную ошибку при попытке удалить точку монтирования.)

Должен отметить, что у меня нет доступа к системе Mac, поэтому я не могу проверить, присутствует ли файл .autodiskmounted, когда файловая система действительно смонтирована, или он является заполнителем, когда файловая система размонтирована.

-1
10.09.2019, 05:00
1 ответ

Вы используете оболочку, а не конвейер. Обертки будут нести свои разрешения с собой.

В данном случае из соображений безопасности используйте

sudo watch dmesg

вместо

watch sudo dmesg

, чтобы активировать аутентификацию sudoтолько один раз. В противном случае он будет постоянно обновлять вашу аутентификацию, так как sudoзапускается каждую секунду. Если вы затем отойдете, и кто-то подойдет и ^Cвыполнит вашу команду, он сможет немедленно sudoчто-то еще, независимо от того, сколько времени прошло с тех пор, как вы нажали Enter для этой команды.

В общем, каждая команда, которой требуется повышение прав, требуетsudo:

sudo command1 | sudo command2

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

Если у вас есть несколько команд, которые передаются друг другу, и все они требуют повышения прав, обычно их можно увидеть в оболочке bash sub -с повышенными правами:

sudo bash -c "command1 | command2"
2
28.01.2020, 05:09

Теги

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