Thank you for reading this post, don't forget to subscribe!
При использовании sudo с перенаправлением вывода (>) или пайпом (|) bash выводит сообщение об ошибке Permission denied.
Используйте sudo с tree
Например, чтобы перенаправить вывод команды echo 1 в файл ip_forward, запустите:
1 2 |
$ sudo echo 1 > /proc/sys/net/ipv4/ip_forward bash: /proc/sys/net/ipv4/ip_forward: Permission denied |
Приведенная выше команда sudo привела к ошибке permission denied, поскольку перенаправление выполняется оболочкой, у которой нет разрешения на запись.
Мы можем использовать команду sudo с командой tee, чтобы устранить эту ошибку:
1 |
$ echo 1 | sudo tee /proc/sys/net/ipv4/ip_forward |
При использовании описанного выше подхода команда, выполняемая перед пайпом, не будет выполняться от имени пользователя root (echo 1).
Это полезно, если вам просто нужен вывод программы, для которой не требуются привилегии root.
Если для команды перед каналом требуется root, мы могли бы использовать sudo перед каждой командой, например:
1 |
$ sudo echo 1 | sudo tee /proc/sys/net/ipv4/ip_forward > /dev/null |
Аналогичный подход, который мы можем использовать для записи «1» в файл «ip_forward», как и в предыдущих примерах, заключается в повышении уровня процесса записи в файл.
Вот пример:
1 2 3 |
$ sudo tee /proc/sys/net/ipv4/ip_forward > /dev/null << EOF 1 EOF |
Запустим оболочку с помощью sudo -c
Другой популярный подход – запустить другую оболочку от имени пользователя root с параметром -c.
Пример:
1 |
$ sudo sh -c 'echo 1 > /proc/sys/net/ipv4/ip_forward' |
Запустим оболочку с помощью sudo -s
Другой способ – запустить оболочку с помощью sudo -s, а затем выполнить команду:
1 2 3 4 |
$ sudo -s # echo 1 > /proc/sys/net/ipv4/ip_forward # ^D $ |
С помощью скрипта Bash
Есть еще один способ запустить sudo с перенаправлением или пайпом- создать скрипт bash со всеми вашими командами и запустить этот скрипт с помощью sudo.
Посмотрим, как мы можем это реализовать.
Во-первых, нам нужно создать новый файл с помощью любого текстового редактора, например nano, vim, gedit или любого другого.
Назовем его myscript.sh.
Затем вставьте следующие команды в myscript.sh и сохраните файл:
1 2 |
#!/bin/sh echo 1 > /proc/sys/net/ipv4/ip_forward |
Теперь вам просто нужно запустить файл myscript.sh с помощью команды sudo:
1 |
$ sudo myscript.sh |