귀하의 질문에 언급했듯이 주요 차이점은 환경입니다.
sudo su -
vs. sudo -i
의 경우 sudo su -
그것이 로그인 쉘, 그래서 /etc/profile
, .profile
그리고 .bashrc
실행하면 루트의 환경과 루트의 홈 디렉토리에있는 자신을 발견 할 것이다.
sudo -i
거의 동일 (초기 로그인을 시뮬레이션) 옵션은 로그인 쉘과 같은 대상 사용자의 암호 데이터베이스 항목에 의해 지정된 쉘을 실행합니다. 이 로그인 특정 자원과 같은 파일을 의미 , 또는 읽고 쉘에 의해 실행됩니다.sudo su -
-i
.profile
.bashrc
.login
sudo su
vs. sudo -s
sudo su
sudo
명령으로 호출 합니다 su
. Bash는 대화 형 비 로그인 셸이라고합니다. 따라서 bash
만 실행 .bashrc
합니다. 루트로 전환 한 후에도 여전히 같은 디렉토리에 있음을 알 수 있습니다.
user@host:~$ sudo su
root@host:/home/user#
sudo -s
$SHELL
변수를 읽고 내용을 실행합니다. 경우 $SHELL
포함 /bin/bash
이 호출 sudo /bin/bash
그 의미, /bin/bash
비 로그인 쉘로 시작되기 때문에 모든 점 파일이 실행되지 않습니다,하지만 bash
그 자체가 읽습니다. bashrc
발신 사용자의 환경은 동일하게 유지됩니다. 당신의 집은 뿌리의 집이 아닙니다. 그래서 당신은 근본이지만 호출하는 사용자의 환경에 있습니다.
결론
-i
플래그에 추가 sudo
로 2004 유사한 기능을 제공하기 sudo su -
때문에, sudo su -
대한 템플릿을했다 sudo -i
과 같은 일을 의미했다. 환경이 중요하지 않은 한 실제로 사용하는 것이 중요하지 않다고 생각합니다.
부가
여기서 언급해야 할 기본 요점은 더 높은 권한으로 하나의 단일 명령sudo
만 실행 한 다음 해당 권한을 원래 권한으로 삭제 하도록 설계된 것입니다. 실제로 사용자를 전환 하고 루트 셸을 열어 두는 것은 결코 아닙니다 . 시간이 지남에 따라 sudo
사람들은 sudo
모든 명령 앞에 사용해야하는 이유에 대해 화가 났기 때문에 그러한 메커니즘으로 확장되었습니다 .
그래서의 의미 sudo
가 남용되었습니다. sudo
사용자가 루트 권한 사용을 최소화하도록 권장하기위한 것입니다.
우리가 지금 가지고있는 것은 sudo
점점 더 대중화되고 있습니다. 그것은 거의 모든 잘 알려진 리눅스 배포판에 통합되어 있습니다. 다른 사용자 계정으로 전환하는 원래 도구는 su
입니다. 오래된 학교 * nix 베테랑의 경우와 같은 것이 sudo
불필요하게 보일 수 있습니다. 복잡성을 추가하고 Microsoft의 os 제품군에서 알고있는 메커니즘에 더 적합하게 작동하므로 * nix 시스템의 단순성에 위배됩니다.
나는 정말 베테랑이 아니지만 내 의견으로 sudo
는 항상 내 편에 가시가있었습니다. 시간이 소개되고 sudo
가능한 경우 항상 사용법을 사용했습니다 . 나는 사용하기를 가장 꺼려한다 sudo
. 모든 시스템에서 루트 계정이 활성화되어 있습니다. 그러나 su
더 이상 사용되지 않고 완전히 sudo
대체 되는시기가 올 것 su
입니다.
따라서 나는 같은 오래된 도구에 의존하는 대신에 sudo
내부 메커니즘 ( -s
, -i
) 을 사용하는 것이 최선이라고 생각합니다 su
.
ubuntu
사용자를 표준에서 사용하지 못하게 하는 멋진 시스템을 이해하지 못했습니다su -
. 그들은 문제를 만들어 냈고 이제는 그 문제를 해결하는 방법에 대한 끝없는 토론이 있습니다.