centos7 ifconfig命令找不到_分享一个解决 sudo 命令找不到环境变量的小技巧
如何解決 sudo 命令找不到環境變量的問題
在通過 sudo 運行命令時,系統會默認重置環境變量為安全的環境變量,也就是說,先前設置的變量都會失效,只有少數配置文件中指定的環境變量能夠保存下來。
sudo 的配置文件是 /etc/sudoers,需要 root 權限才能讀取,運行以下命令:
$ sudo sed '/^#/d;/^$/d' /etc/sudoerssudo 的配置如下圖所示:
sudo 配置文件
請注意:
第 3 行的 Defaults env_reset 表示默認會重置環境變量,因此自定義的變量會在 sudo 環境中失效,也就不會獲取正確的變量值。
第 4 行至第 8 行的 env_keep 配置項,用于保留部分環境變量不被重置,需要保留的變量就寫入雙引號之中。
第 9 行的 secure_path 配置項,其中包含的路徑將被當做 sudo 環境的 PATH 變量使用,如果在 sudo 環境無法找到某些命令,那么可以將這些命令的路徑加入該配置項之中。
綜上所述,sudo 命令找不到環境變量或命令的問題,有三種解決方法:
加上 -E ?選項后,用戶可以在 sudo ?執行時保留當前用戶已存在的環境變量,不會被 sudo 重置。另外,如果用戶對于指定的環境變量沒有權限,則會報錯。
在內部測試機器中,安全性要求不高,總是需要加上 -E 參數來執行腳本,這個安全設定也不是很方便。因此,可以通過修改 /etc/sudoers 文件的 env_keep 和 secure_path 配置項,來指定 sudo 環境中需要保留的環境變量和路徑。
當然你也可以用更簡單粗暴的方式:直接將 Defaults env_reset 改成 Defaults !env_reset 來取消掉對 PATH 變量的重置,然后在 .bashrc 中最后添加 alias sudo='sudo env PATH=$PATH'。這樣 sudo 執行命令時所搜尋的路徑就是系統的 PATH 變量中的路徑,如果你想添加其他變量方法也是類似。
手動在腳本中設置所需的變量,在執行 sudo 腳本前先將所需要的變量寫入到需要執行的腳本開頭。
參考文檔
https://www.google.com
http://ghoulich.xninja.org/2017/05/09/how-to-find-env-variables-when-exec-sudo-commands/
http://www.ibm.com/developerworks/cn/aix/library/au-sudo/index.html
你可能還喜歡
點擊下方圖片即可閱讀
女朋友通過我畫的 12 張圖,學會了 Kubernetes,我是不是棒棒噠!
點擊上方圖片,打開小程序,加入「玩轉 Linux」圈子
更多有趣的互聯網新鮮事,關注「奇妙的互聯網」視頻號全了解!
總結
以上是生活随笔為你收集整理的centos7 ifconfig命令找不到_分享一个解决 sudo 命令找不到环境变量的小技巧的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mac电脑如何与手机同步复制粘贴_苹果换
- 下一篇: python导入标准库对象的语句_Pyt