루트를 사용하여 전환하려고 하면 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
고쳐 쓰다:
C++11 지원이 필요했기 때문에 루트가 아닌 사용자의 ~/.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).