2017-09-09 22 views
0

나는 윈도우 쉘을 열고 루트 사용자로 스와을 쓸 때, 나는 다시 스와, 다시, 다시 쓸 수 있는지 알 ... 내가 종료을 작성하는 경우 다음이가 저를 이끌어 이전 "su 인스턴스"(?)를 입력하고 번을으로 작성하고 su으로 작성해야합니다. 이 여러 "인스턴스"의 의미는 무엇이며이 동작의 이점이 있습니까?쉘에서 중첩 된 "su"명령 호출의 의미는 무엇입니까?

답변

0

su 명령을 실행할 때마다 새 셸이 현재 셸에서 열립니다.

쉘을 종료하려면 exit을 실행하십시오.

0

su를 실행하면 상위 쉘의 하위 프로세스 (하위 프로세스)를 생성하게됩니다. 쉘에서 bash (또는 zsh)를 실행하면 그 의미는 같습니다.

현재 서브 쉘의 레벨을 알고 싶다면 echo $SHLVL을 실행하십시오.

단순히 su를 여러 번 실행하면 프로세스 패밀리가 작성됩니다.

2

유닉스 프로그래밍 모델 내에서는 사용자 프로세스가 루트 또는 다른 사용자의 권한을 얻을 수있는 방법이 없습니다.

즉, 단순히 현재 쉘을 루트 쉘로 바꾸는 su 버전을 쓸 수 없습니다. 대신 suid 실행 파일을 실행하여 루트 액세스 권한을 얻어야하며, 이는 반드시 새로운 인스턴스를 생성합니다.

전통적인 유닉스에서는 su을 구현하는 유일한 방법 일뿐 특별한 이점은 없습니다.

su 대신 exec su을 사용하여 현재 인스턴스를 새 인스턴스로 바꿀 수 있습니다. 즉, 루트 쉘에 exit이 로그 아웃하면됩니다.

그러나 나는 그걸 가지고가는 것이 좋습니다. vim 또는 nano을 종료하면 원래 셸로 돌아갈 것으로 예상됩니다. ssh을 종료하면 원래 쉘로 돌아갈 것으로 예상됩니다. su을 예외로 설정하지 마십시오.

+0

_exec su_가 어린이 대신에 평행 껍질을 연다 고 말할 수 있을까요? 이게 무슨 도움이 될 수 있니? – Leopoldo

+1

'exec su'는 현재 쉘을 새로운 프로세스로 대체합니다. – chepner