sudo -i는 오류를 반환


11

내가 사용하여 루트로 전환하려고 sudo -i하면 오류가 발생합니다 /var/tmp/sclDvf3Vx: line 8: -i: command not found... 그러나 su -계속 사용할 것입니다. 나는 결코 리눅스 시스템 관리자가 아니므로 환경이 여전히 나에게 안개 낀다. 내 질문은 다음과 같습니다.

  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

최신 정보:

이것은 C ++ 11 지원이 필요했기 때문에 루트가 아닌 사용자의 ~ / .bashrc a에 추가되었습니다. 주석 처리하고 다시 입력하면 오류없이 sudo -i를 실행할 수 있습니다.

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

당신은 확신하는 -정말 (ASCII)이다 -?
steeldriver

1
누구든지 alias당신의 sudo명령을 만들었 습니까?
garethTheRed

2
좋습니다. 그래서 sudo일반적인 sudo 명령이 아닌 로컬 명령 이 있습니다. sudo의 옵션을 이해하지 못한다면 분명히 표준이 아닙니다. 하나를 사용 /usr/bin/sudo하거나 (그들은 당신이 힘을 sudo를 주었을 때 정말이에 대해 말 했어야) 해당 지역의 관리자에게 문의하십시오.
Gilles 'SO- 악의를 멈춰라'

4
인터넷에서 도움을 줄 수없는 잘 알려지지 않은 자체 개발 프로그램과 관련이 있기 때문에이 질문을 논외 주제로 마무리하려고합니다.
Gilles 'SO- 악마 그만'

3
나는 이것이 집에서 자란 것이라고 생각하지 않는다. CentOS의 RH 개발자 툴셋 버전 : people.centos.org/tru/devtools-1.1 . 아마도 인터넷상의 누군가 가 그것에 대해 알고있을 것입니다.
Michael Homer

답변:


6

의견과 추가 조사에서 devtoolset이을 수정하는 것처럼 보입니다 PATH. 불행히도 여기에는 오래되거나 깨진 sudo 명령으로 보이는 것이 포함됩니다.

devtoolset include를 다음 .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없이 코드를 컴파일하는 데 아무런 문제가 없었습니다.


1

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"
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.