sudo -i はエラーを返します。

sudo -i はエラーを返します。

ルートを使用して切り替えようとするとsudo -iエラーが発生し/var/tmp/sclDvf3Vx: line 8: -i: command not foundますが...su -引き続き使用する予定です。私は決してLinuxシステム管理者ではないので、環境はまだあいまいです。私の質問は次のとおりです。

  1. エラーが発生するのはなぜですか?
  2. これら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

修正する:

C++11 サポートが必要だったため、root ではなくユーザーの ~/.bashrc にしばらく前に追加されました。コメントアウトしてsshを再実行すると、エラーなしでsudo -iを実行できます。

if [ "$(gcc -dumpversion)" != "4.7.2" ]; then 
  scl enable devtoolset-1.1 bash
fi

答え1

コメントと追加調査によると、開発ツールセットが修正されているようですPATH。残念ながら、これには古いまたは破損しているように見えるsudoコマンドが含まれています。

.bashrc開発ツールセットを次のように変更して再度ログインしてみることをお勧めします。

if [ "$(gcc -dumpversion)" != "4.7.2" ]; then 
  scl enable devtoolset-1.1 bash
  PATH=/usr/bin:$PATH    # We need a working sudo
fi

答え2

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を混在させることなくコードをコンパイルするのに問題はありませんでした。

答え3

sudo -Edevtoolset-4を使用した後、同様のフラグの問題が発生しました。この場合、-Eフラグは/opt/rh/devtoolset-4/root/usr/bin/sudoラッパースクリプトに追加されるため、追加しないでください。その内容は次のとおりです。

#! /bin/sh
# TODO: parse & pass-through sudo options from $@
sudo_options="-E"

for arg in "$@"
do
   case "$arg" in
    *\'*)
      arg= ;;
   esac
   cmd_options="$cmd_options '$arg'" 
done
exec /usr/bin/sudo $sudo_options LD_LIBRARY_PATH=$LD_LIBRARY_PATH PATH=$PATH scl enable devtoolset-4 "$cmd_options"

答え4

これはRedHatに報告されました。BZ1319936devtoolset devtoolset-9-9.0-3.el7で修正されました(RHEA-2019:4132)。

関連情報