Linux
sudo -i 返回錯誤
當我嘗試使用切換到 root
sudo -i
時出現錯誤/var/tmp/sclDvf3Vx: line 8: -i: command not found
…但是,su -
我將繼續使用這些作品。我絕不是 linux 系統管理員,所以環境對我來說仍然很模糊。我想我的問題是:
- 為什麼會拋出錯誤?
- 這兩個命令有什麼區別?
- 你為什麼要使用一個而不是另一個?
更新:
我正在使用 CentOS 版本:CentOS 6.6 版(最終版)
這是我被要求執行的一些命令的輸出,在下面的評論中。
type sudo
:sudo is /opt/centos/devtoolset-1.1/root/usr/bin/sudo
sudo -V
:/var/tmp/sclIU7gkA: line 8: -V: command not found
grep'^root:' /etc/passwd
:root:x:0:0:root:/root:/bin/bash
更新:
這被添加到我的非 root 使用者的 ~/.bashrc 中,因為我需要 C++11 支持。當我將其註釋掉,重新 ssh 時,我可以執行 sudo -i 就可以了,沒有任何錯誤。
if [ "$(gcc -dumpversion)" != "4.7.2" ]; then scl enable devtoolset-1.1 bash fi
從評論和您的進一步調查看來,您的 devtoolset 正在修改
PATH
. 不幸的是,這包括似乎是舊的或損壞的 sudo 命令。值得嘗試
.bashrc
像這樣修改您的 devtoolset 包含,然後重新登錄:if [ "$(gcc -dumpversion)" != "4.7.2" ]; then scl enable devtoolset-1.1 bash PATH=/usr/bin:$PATH # We need a working sudo fi
我沒有解決 SCL 損壞的 sudo 包裝器,而是禁用了它。
echo >> /opt/rh/devtoolset-2/root/usr/bin/sudo chmod -x /opt/rh/devtoolset-2/root/usr/bin/sudo
在文件末尾添加換行符可確保它不會被後續的 Yum 更新覆蓋,然後我只是使其不可執行。
我安裝了開發工具集以在 RHEL 6 上獲得現代版本的 gcc 和 c++,並且在沒有假 sudo 的情況下編譯程式碼沒有問題。