Linux

sudo -i 返回錯誤

  • August 10, 2020

當我嘗試使用切換到 rootsudo -i時出現錯誤/var/tmp/sclDvf3Vx: line 8: -i: command not found…但是,su -我將繼續使用這些作品。我絕不是 linux 系統管理員,所以環境對我來說仍然很模糊。我想我的問題是:

  1. 為什麼會拋出錯誤?
  2. 這兩個命令有什麼區別?
  3. 你為什麼要使用一個而不是另一個?

更新:

我正在使用 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 的情況下編譯程式碼沒有問題。

引用自:https://unix.stackexchange.com/questions/192809