在本教程中,我將向您展示如何使用 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 使用重定向或管道並避免權限被拒絕錯誤。 如果您知道實現此目的的另一種方法或有任何疑問,請將它們發佈在下面的評論部分。