sudo su shell 변경


13

sudo su내 표준 zsh( oh-my-zsh 프레임 워크 를 사용함) 에서 실행할 때마다 sh기본적으로 이전 Bourne 셸 ( ) 을 사용해야합니다 (분명히, 이것은 대부분의 * nix 계열 시스템에서 표준 동작 임). 내가 실행하면 zsh내에서 sh실행 한 후 sudo su, 나는 Z 쉘을 얻을 수 있지만, 오 - 내 - zsh을의 개선없이.

sudo su실행을 로 변경하는 방법 이 zsh있습니까? 그렇다면 ?를 zsh사용하여 해당 시작 인스턴스를 가질 수도 있습니다 oh-my-zsh.

OS X 10.8.4를 사용하고 있습니다.

답변:


21

수퍼 유저로서 대화식 쉘을 실행하는 또 다른 방법 은 쉘로 sudo -s사용 $SHELL하는입니다.

언급 된 다른 답변의 의견 su -s /path/to/zsh이 OS X에서 작동하지 않습니다.

OS X은 로그인 쉘 변경을 지원하지 /etc/passwd않지만 다음을 사용할 수 있습니다 dscl.

$ dscl . -read /Users/root UserShell
/bin/sh
$ sudo dscl . -change /Users/root UserShell /bin/sh /bin/zsh
$ dscl . -read /Users/root UserShell
/bin/zsh
$ sudo su
My-iMac# echo $0
zsh
My-iMac# exit
$ sudo dscl . -change /Users/root UserShell /bin/zsh /bin/sh
$ 

/bin/sh대부분의 플랫폼에서 더 이상 Bourne 쉘이 아닙니다. OS X 에서는 bashPOSIX 호환 버전이며 Ubuntu에서는 대시입니다.


이것이 내가 원하는 질문이라고 생각합니다. 그것은 분명히 나를 위해 일한 것입니다. 정말 고맙습니다! 편집 나는 그가 지금 원했던 것을 본다-나는 이것이 그가 원한 것이라고 생각하지 않는다. 그래서 나는이 질문에 대해 그것을 공평하게 바꿀 수는 없지만 어쨌든 메달을받을 자격이 있다고 생각한다. 당신은 질문에 대한 답변을 했다!
Wyatt8740

4

로부터 su맨, 당신은이 작업을 수행 할 수있는 두 가지 방법이 있습니다.


첫 번째 방법은 단순히 -sor 또는 --shell플래그 를 사용하는 것입니다 ( su이 인수를 지원 하는 버전으로 * NIX 기반 OS를 사용한다고 가정 ). 선택한 쉘의 경로가 뒤 따릅니다. 전달 된 쉘을 찾을 수 없으면 su다음 메소드로 되돌아가 실패하면 호출을 시도합니다 /bin/sh.

예를 들어, 당신은 강제로 su실행합니다 zsh(그것은 존재 가정 /bin/zsh으로) :

sudo su --shell /bin/zsh

두 번째 방법은 root사용자에게 지정된 기본 셸을 수정하는 것입니다 (조심하십시오! ). 파일을 편집 /etc/passwd하고 root사용자에게 지정된 쉘을 변경하면됩니다 . 기본적으로 어떤 쉘이 지정되었는지 확인하려면 다음 명령을 실행할 수 있습니다 (슈퍼 유저가 root라고 가정).

sudo grep root /etc/passwd 

명령은 다음과 같이 출력되어야합니다 root:x:0:0:root:/root:/bin/bash. 대신 /bin/bash(또는 시스템에 설정된 내용을) zsh대신 간단하게 변경할 수 있습니다 .


3
항상 그렇듯이 루트 쉘 변경에주의하십시오. 단일 사용자 모드에 있고 싶지 않은 경우 / usr이 필요한 루트 쉘이 있어야합니다. 임대 할 때 새 쉘에 교체 할 파일 시스템보다 더 많은 파일 시스템 종속성이 없는지 확인하십시오.
Rich Homolka

실행 sudo su -s /bin/zsh(또는 사용 --shell)은을 반환합니다 su: illegal option -- s. OS X 10.8.4에 있습니다. OS X은 다른 명령을 수행합니까?
Jules

@JulesMazur 출력은 cat /etc/shells무엇입니까? 있지만 해당 파일에 허용 기술적으로 만 쉘은 시작됩니다 su맨이이 문제가 아닌 경우해야한다고 말했습니다 su루트에 의해 호출된다 : S
혁신

cat /etc/shells/bin/zsh허용되는 셸로 반환합니다 .
Jules

2
@JulesMazur는 이러한 종류의 혼란을 피하기 위해 항상 OS를 포함해야합니다.
terdon

1

사용자 정의 쉘이 터졌을 때 시스템을 보호하는 더 확실한 방법은 루트의 홈 디렉토리에 .profile을 작성하는 것입니다.

if [ -x /opt/local/bin/bash ]; then
    SHELL=/opt/local/bin/bash
    export SHELL
    exec /opt/local/bin/bash
else
    echo /opt/local/bin/bash not found using default shell of $SHELL
fi

bash 대신 원하는 쉘의 경로를 변경하십시오.


0

다음과 chpass같이 쉽게 수행 할 수 있습니다 .

$ sudo chpass -s /bin/zsh
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.