su가 무슨 글자의 줄임말인지 살펴보면
substitute user 의 약자입니다.
흔히 오해하듯이 superuser뭐 그런거 약자 아니었냐 하실테지만
사실 현재 로긴한 유저의 세션에서 로그아웃 하지않고도
다른 유저가 될수 있게 해주는(switch user)명령입니다.
su tom
su baby
su root
등등
우분투 처음 쓰시는 분들이 자주 불평하시는게
왜 룻계정이 없냐 만드는 방법 뭐냐 물으시는데
룻계정 이거 무섭습니다.해킹당할 가능성 머 이런건 차치하고라도
룻계정일때는 사소한깜박 실수로 시스템 전체를 날려먹거든요.
혹시나 있을지 모를 대 재앙을 미연에 방지 하자는 거죠,
또 실제로 룻 계정을 만들 필요가 거의 없습니다.
sudo su - 하시면 root계정 안 만드셔도 되니까요.
sudo su - 조차 저는 거의 쓰지 않습니다.
su
su root
위 두개명령은 같은 뜻입니다
su -
su - root
su --login root
위 세개 명령도 같은 뜻입니다.
즉 su - 와 su 를 구분하는 근본적인 차이는
su - 는 login 쉘을 실행하는 반면에
su 는 그렇지 않다는 겁니다.
로긴쉘이냐 아니냐의 차이는 특정유저로 su했을때
그 유저의 로긴 스크립트
(.bashrc 와 .bash_profile , 그밖의 환경변수 설정들)들을 읽어서
그 유저의 환경변수를 세팅하느냐 아니냐의 차이입니다.
하이픈 없이 그냥 su 했을때는
현재 위치한 디렉토리에 그냥 그대로 머물러 있고
환경변수도 바꾸지 않습니다만
su - 하면 마치 옛 유저 세션에서 logout한뒤 새로 login한것처럼
새유저(이경우는 룻)의 홈 디렉토리로 이동하고
새유저의 환경변수를 완전히 읽어서 세팅해줍니다.
자 위와 같은 차이를 알았으니
su 를 썼을때 그 쉘을 빠져나오는 방법은 exit 엔터하거나
ctrl + D 키를 쓰면 됩니다.
이경우는 빠져나오더라도 현재 위치한 디렉토리에 그대로
있게 되고 환경변수도 그대로 있습니다.
su - 를 썼을 경우는 위 방법 써도 되고
logout 엔터로 나오는 방법이 더 있습니다.
이 경우는 원래 su - 할때 위치해 있던 디렉토리로 돌아오게되고
환경변수도 su - 할당시의 유저 의 것으로 완전히 바뀌게 되죠.
su 와 su - 의 차이는 간단합니다.
su 만 했을때는 기존에 사용하는 유저의 환경 설정 상태에서 사용자만 root 나 지정 사용자로 변환 하는것입니다.
그리너 path 나 환경 변수들이 기존 사용자 것을 따라가죠..
su - 는 사용자만 바꾸는것이 아니고 새로 로그인 하는 효과를 나타냅니다..
그래서 root 나 지정 사용자로 새로 로그인 하니까 전환전 사용자의 환경 변수나 path 등을 가져오지 않습니다..