Перейти к содержимому

разрешение sudo отклонено

3

Я запустил этот код:

sudo cat <<EOF | sudo sed -e "s,%,$,g" >/etc/init.d/dropbox echo "Hello World" EOF 

Но даже при том, что я получаю «разрешение запрещено», потому что вы должны быть пользователем root, чтобы вносить изменения в каталог /etc/init.d. И почему-то моя команда выше не работает.

Есть ли способ решить это?

6 292 просмотра
8k_of_power спросил 15 лет назад
8 353

3 ответа

7

Перенаправление в файл обрабатывается bash. Поэтому он не наследует разрешения, предоставленные sudo.

Используйте sudo teeдля записи в файл как root.

Попробуй это:

cat | sed -e 's,%,$,g' | sudo tee /etc/init.d/dropbox << EOF echo "Hello World" EOF 

Обратите внимание, что $,внутри двойные кавычки могут быть интерпретированы.

Это все еще дает мне «Отказано в доступе».

8k_of_power · 15 лет назад · 0

Я отредактировал ответ. скорее используйте sudo tee.

Benoit · 15 лет назад · 0
Benoit ответил 15 лет назад
B 5 991
4

Вы можете предоставить себе постоянные права с
# sudo -s

затем ваша команда (больше не нужно sudo) и выход с
# exit

РЕДАКТИРОВАТЬ:
Я предполагаю, что вы спрашиваете, связанных с Ubuntu, потому что ваш вопрос помечен этим. В других дистрибутивах, таких как Suse, у вас будет возможность использовать
# su
вместо# sudo -s

Или получить постоянные права su с помощью просто su.

Chetan · 15 лет назад · 0

@Chetan: это не работает в Ubuntu. (Вопрос помечен Ubuntu, поэтому я ожидаю, что это было в этом согласии)

MOnsDaR · 15 лет назад · 1

извините, я забыл упомянуть, что это в сценарии, поэтому я не могу сделать sudo для его запуска.

8k_of_power · 15 лет назад · 0

Если это в сценарии, вы можете запустить сценарий с sudo, насколько я знаю: # sudo. / MyScript

MOnsDaR · 15 лет назад · 0

Но так как это скрипт, я не могу использовать sudo -s внутри скрипта, потому что строки после него не запускаются.

8k_of_power · 15 лет назад · 0
MOnsDaR ответил 15 лет назад
M 140
0

Эта часть: sudo sed -e "s,%,$,g" >/etc/init.d/dropboxCen будет рассматриваться как это:

sudo somecommand --put the result of the sudo command into--> /etc/init.d/dropbox 

Точно так же как это:

ls somedirectory > filename ls somedirectory --put the result of the ls command into--> filename 

Это означает, что запись в файл будет выполняться как ваш текущий пользователь, а не как root.

Вы можете решить это, используя, teeкак показывает Бенуа в своем ответе.

Спасибо за описание проблемы. Но как мне это решить?

8k_of_power · 15 лет назад · 0
Emil Vikström ответил 15 лет назад
E 364