ルートを使用して切り替えようとするとsudo -i
エラーが発生し/var/tmp/sclDvf3Vx: line 8: -i: command not found
ますが...su -
引き続き使用する予定です。私は決してLinuxシステム管理者ではないので、環境はまだあいまいです。私の質問は次のとおりです。
- エラーが発生するのはなぜですか?
- これら2つのコマンドの違いは何ですか?
- なぜ他のものを使うのですか?
修正する:
私は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 -E
devtoolset-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)。