Sudo при использовании с перенаправлении вывода или Pipe

При исполь­зо­ва­нии sudo с пере­на­прав­ле­ни­ем выво­да (>) или пай­пом (|) bash выво­дит сооб­ще­ние об ошиб­ке Permission denied.

Используйте sudo с tree

Напри­мер, что­бы пере­на­пра­вить вывод коман­ды echo 1 в файл ip_forward, запустите:

При­ве­ден­ная выше коман­да sudo при­ве­ла к ошиб­ке permission denied, посколь­ку пере­на­прав­ле­ние выпол­ня­ет­ся обо­лоч­кой, у кото­рой нет раз­ре­ше­ния на запись.

Мы можем исполь­зо­вать коман­ду sudo с коман­дой tee, что­бы устра­нить эту ошибку:

При исполь­зо­ва­нии опи­сан­но­го выше под­хо­да коман­да, выпол­ня­е­мая перед пай­пом, не будет выпол­нять­ся от име­ни поль­зо­ва­те­ля root (echo 1).

Это полез­но, если вам про­сто нужен вывод про­грам­мы, для кото­рой не тре­бу­ют­ся при­ви­ле­гии root.

Если для коман­ды перед кана­лом тре­бу­ет­ся root, мы мог­ли бы исполь­зо­вать sudo перед каж­дой коман­дой, например:

Ана­ло­гич­ный под­ход, кото­рый мы можем исполь­зо­вать для запи­си «1» в файл «ip_forward», как и в преды­ду­щих при­ме­рах, заклю­ча­ет­ся в повы­ше­нии уров­ня про­цес­са запи­си в файл.

Вот при­мер:

Запустим оболочку с помощью sudo -c

Дру­гой попу­ляр­ный под­ход – запу­стить дру­гую обо­лоч­ку от име­ни поль­зо­ва­те­ля root с пара­мет­ром -c.

При­мер:

Запустим оболочку с помощью sudo -s

Дру­гой спо­соб – запу­стить обо­лоч­ку с помо­щью sudo -s, а затем выпол­нить команду:

С помощью скрипта Bash

Есть еще один спо­соб запу­стить sudo с пере­на­прав­ле­ни­ем или пай­пом- создать скрипт bash со все­ми ваши­ми коман­да­ми и запу­стить этот скрипт с помо­щью sudo.

Посмот­рим, как мы можем это реализовать.

Во-пер­вых, нам нуж­но создать новый файл с помо­щью любо­го тек­сто­во­го редак­то­ра, напри­мер nano, vim, gedit или любо­го другого.

Назо­вем его myscript.sh.

Затем вставь­те сле­ду­ю­щие коман­ды в myscript.sh и сохра­ни­те файл:

Теперь вам про­сто нуж­но запу­стить файл myscript.sh с помо­щью коман­ды sudo: