Su와 su - 의 차이점에 관해서

제가 루트 계정으로 갈때,

su 와

su - 으로 들어가봤거든요.

일단 접속시,

su 로 접속하면, root@사용자서버:/home/사용자이름#이렇게 나오고,

su -로 접속하면, root@사용자서버:~# 이렇게 나오는데,

질문은, su 로 접속하면 logout명령으로 나올 수가 없고, (exit로만 나올 수 있음)

su - 로 접속하면 logout과 exit 두 개의 명령으로 나올 수가 있는데,(물론, 약간 다르지만…)

왜 이런가요?

su 로 접속 후 cd … 이나, cd \으로 su -로 접속했을때와 같이 디렉토리를 맞춰줘도,

어쨌든, su 로 접속 후, exit 명령외엔 나갈 수 없는 것 같습니다.

이유는 무엇인가요??

부탁드릴게요.

제가 알고 있는 선에서 말씀드리면…

su 는 그냥 root로 바꾸는것이고…
su - 는 해당 root의 설정 파일을 다시 읽어서 설정하는걸로 알고 있습니다.

해당 유저에만 bash.rc 파일 같은데 설정 해놓은게 있다면
su 로 했을때는 그 설정을 다시 안 읽어들이지만
su - 로 하면 그 설정을 다시 읽어서 설정하는거죠

su oracle
su - oracle 도 마찬가지로 틀리구요…

제가 잘못 알고 있는 부분이 있거나 좀 더 상세한 설명은 다른분께서… ㅋ

[quote="sggida":3pmm463q]제가 루트 계정으로 갈때,

su 와

su - 으로 들어가봤거든요.

일단 접속시,

su 로 접속하면, root@사용자서버:/home/사용자이름#이렇게 나오고,

su -로 접속하면, root@사용자서버:~# 이렇게 나오는데,

질문은, su 로 접속하면 logout명령으로 나올 수가 없고, (exit로만 나올 수 있음)

su - 로 접속하면 logout과 exit 두 개의 명령으로 나올 수가 있는데,(물론, 약간 다르지만…)

왜 이런가요?

su 로 접속 후 cd … 이나, cd \으로 su -로 접속했을때와 같이 디렉토리를 맞춰줘도,

어쨌든, su 로 접속 후, exit 명령외엔 나갈 수 없는 것 같습니다.

이유는 무엇인가요??

부탁드릴게요.[/quote:3pmm463q]

위 상황들은 사용자 설정이나 배포판에 따라 다를수 있지만…
su 와 su - 의 차이는 간단합니다.
su 만 했을때는 기존에 사용하는 유저의 환경 설정 상태에서 사용자만 root 나 지정 사용자로 변환 하는것입니다.
그리너 path 나 환경 변수들이 기존 사용자 것을 따라가죠…
su - 는 사용자만 바꾸는것이 아니고 새로 로그인 하는 효과를 나타냅니다…
그래서 root 나 지정 사용자로 새로 로그인 하니까 전환전 사용자의 환경 변수나 path 등을 가져오지 않습니다…


먼저 답변을 하셨네용… ^^; 뒷북 두~~~ 둥…

아, 정말 감사합니다. 두분 모두…

뭐 윗분들이 잘 설명해주셨지만
조금더 부연 설명드리자면 이렇습니다.

먼저 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 - 할당시의 유저 의 것으로 완전히 바뀌게 되죠.

아~ 감사드립니다.

sudo를 이용하면, root계정과 거의 비슷하다는 걸 오늘 알았네요.