Sudo 權限被重定向或管道拒絕 [Solutions]

在本教程中,我將向您展示如何使用 sudo 命令與重定向或管道一起使用時。 使用時 sudo 使用重定向 (>) 或管道 (|),您將獲得 沒有權限 錯誤信息在 bash 輸出。 在這裡,我將向您展示解決此問題的不同方法。

利用 sudo 帶三通

例如,要將“echo 1”命令的輸出重定向到“ip_forward”文件,請運行:

$ sudo echo 1 > /proc/sys/net/ipv4/ip_forward
bash: /proc/sys/net/ipv4/ip_forward: Permission denied

以上 sudo 命令導致 沒有權限 因為重定向是由 它沒有寫權限。

我們可以用 sudo 命令和 tee 命令來解決這個錯誤:

$ echo 1 | sudo tee /proc/sys/net/ipv4/ip_forward

使用上述方法,管道前執行的命令將不會以 root 身份運行(echo 1)。 如果您只需要不需要 root 權限的程序輸出,這將很有用。

如果管道之前的命令需要root,我們可以使用 sudo 在每個命令之前,如:

$ sudo echo 1 | sudo tee /proc/sys/net/ipv4/ip_forward > /dev/null

我們可以使用類似的方法將“1”寫入“ip_forward”文件,就像在前面的示例中一樣,將提升寫入文件的進程。

一個 example 如下:

$ sudo tee /proc/sys/net/ipv4/ip_forward > /dev/null << EOF
1
EOF

運行外殼 sudo -C

另一種流行的方法是使用 root 運行另一個 shell -c 選項。

例子:

$ sudo sh -c 'echo 1 > /proc/sys/net/ipv4/ip_forward'

運行外殼使用 sudo -s

另一種方法是啟動一個shell sudo -s 然後運行命令:

$ sudo -s
# echo 1 > /proc/sys/net/ipv4/ip_forward
# ^D
$

通過使用 Bash 腳本

還有另一種跑步方式 sudo 使用重定向或管道,它是通過創建一個 bash 使用所有命令編寫腳本,然後運行該腳本 sudo.

讓我們看看我們如何做到這一點。 首先,我們需要使用任何文本編輯器創建一個新文件,例如 nano、vim、gedit 或任何其他。 我們將其命名為“myscript.sh”。

然後將以下命令粘貼到 myscript.sh 並保存文件:

#!/bin/sh
echo 1 > /proc/sys/net/ipv4/ip_forward

現在你只需要運行 myscript.sh 文件 sudo 命令:

$ sudo myscript.sh

結論

我們已經看到了多種使用方式 sudo 使用重定向或管道並避免權限被拒絕錯誤。 如果您知道實現此目的的另一種方法或有任何疑問,請將它們發佈在下面的評論部分。