使用sudo執行複雜linux命令的方法

2021-09-17 18:21:30 字數 741 閱讀 6637

當使用sudo命令來執行乙個linux命令時,我們希望這個linux命令能以root身份執行,但有時候都會遇到「permission denied」的錯誤,結果發現是linux命令中只有部分語句是按root使用者執行的。

比如,如果以root身份執行下面的命令,沒有任何問題:

$ echo 12000 > /proc/sys/vm/dirty_writeback_centisecs
但,如果這樣執行:

$ sudo echo 12000 > /proc/sys/vm/dirty_writeback_centisecs
就會得到「permission denied」的錯誤。

為什麼?/bin/echo 是以root身份執行的,因為你使用了sudo,但將echo的輸出結果寫入root所有的檔案時,仍然是按照你自己的身份執行的,而不是root身份。shell的執行順序是先於sudo執行了輸出重定向。

解決辦法是,使用管道(pipeline)將整個命令送給sudo。有幾種方式可以做到這些,我最喜歡的一種是:

echo "echo 12000 > /proc/sys/vm/dirty_writeback_centisecs" | sudo sh
這樣,不管命令有多複雜,都可以把它放到 | sudo sh 之前,這樣執行sudo 命令非常保險,只是稍微增加了一點複雜度,但是十分有效的避免了遇到「permission denied」這種錯誤。

linux 下使用sudo 授權

linux下使用sudo授權1 使用root使用者授權 有兩種方法 a vim etc sudoers root all all all 允許操作的主機 想成為誰 授權的命令 在下面新增 使用者名稱 all all all 授權所有命令的許可權 all all usr bin cat 授權單個命令 ...

linux為什麼sudo命令執行變慢

cqq kali uname a linux kali 4.16.0 kali2 amd64 1 smp debian 4.16.16 2kali1 2018 06 25 x86 64 gnu linux 最近發現使用sudo命令的時候變得比平常慢了很多倍,然後網上搜原因,發現是修改了 etc ho...

docker取消sudo執行

docker為什麼要用sudo執行?docker的守護執行緒繫結的是unix socket,這個套接字預設屬於root使用者。docker服務程序都是以root賬戶執行的。解決方法 建立docker使用者組,把當前使用者加入到docker使用者組裡面。這樣就可以直接執行docker命令了。sudo ...