Shell
如何執行涉及使用 sudo 重定向或管道的命令?
我正在嘗試遵循我認為使用 sudo 而不是 root 帳戶的最佳做法。
我正在執行一個簡單的 concat 文件操作,例如:
sudo echo 'clock_hctosys="YES"' >> /etc/conf.d/hwclock
對於以普通使用者身份執行的“>>”右側而言,這將失敗。添加額外的 sudos 也會失敗(預期的行為,因為管道到 sudo 命令而不是文件)。
範例僅此而已,但已在 root 帳戶下進行了驗證和測試。
您可以以 root 身份呼叫新的 shell:
sudo sh -c 'echo clock_hctosys=\"YES\" >> /etc/conf.d/hwclock'
您也可以只提升一個程序以寫入文件:
sudo tee -a /etc/conf.d/hwclock > /dev/null << EOF clock_hctosys="YES" EOF
另一個同樣安全的選擇是使用
sudo
’-i
開關以 root 身份登錄:$ sudo -i # echo clock_hctosys=\"YES\" >> /etc/conf.d/hwclock'
這仍然遵循最佳實踐規則,因為 root 帳戶實際上並未啟用,但可以讓您安全地以 root 身份執行操作。來自
man sudo
:The -i (simulate initial login) option runs the shell specified by the password database entry of the target user as a login shell. This means that login-specific resource files such as .profile or .login will be read by the shell. If a command is specified, it is passed to the shell for execution via the shell's -c option. If no command is specified, an interactive shell is executed.