su - root
vs su root
su root
: 이 명령은 현재 사용자 세션에서root
사용자로 전환합니다. 이 때, 현재 사용자의 환경 변수는 대부분 유지됩니다. 즉,PATH
,HOME
등의 환경 변수가 원래 사용자의 것을 계속 사용하게 됩니다. 이는root
사용자의 환경 설정이 완전히 적용되지 않음을 의미합니다.
su - root
: 여기서-
옵션(또는--login
의 축약형)은 로그인 쉘을 시작하며,root
사용자의 환경 변수를 완전히 로드합니다. 즉,root
사용자의HOME
,PATH
, 쉘 설정 등이 사용되며, 사용자가root
로 로그인했을 때와 동일한 환경이 설정됩니다. 이 옵션은 보다 깨끗한 환경에서 작업할 수 있게 해주며, 예상치 못한 환경 변수 문제로부터 보호할 수 있습니다.
- 간단히 말해서,
su - root
는root
사용자로 완전히 전환하여root
의 로그인 환경을 가져오는 반면,su root
는 현재 사용자의 일부 환경 설정을 유지한 채로root
사용자로 전환합니다.
root 환경에서 gedit이 실행되지 않는 문제
- 기본 사용자 :
centos
su root
>gedit
실행 가능
[centos@localhost test]$ su root
암호:
[root@localhost test]# gedit /etc/passwd
[root@localhost test]# exit
exit
[root@localhost ~]#
su - root
>gedit
실행 불가능
[centos@localhost test]$ su - root
암호:
[root@localhost ~]# gedit /etc/passwd
Unable to init server: 연결할 수 없습니다: 연결이 거부됨
(gedit:5447): Gtk-WARNING **: 21:26:11.668: cannot open display:
su root
는 현재 사용자의 환경 변수를 대부분 유지합니다. 이 경우,DISPLAY
환경 변수가 그대로 유지되어 X 윈도 시스템의 GUI 애플리케이션(여기서는gedit
)을 실행할 수 있습니다.su - root
(또는su -l root
)는 사용자를root
로 전환하면서 로그인 환경을 새롭게 시작합니다.
- 즉,
root
사용자의 로그인 쉘 환경을 완전히 로드하며, 이 과정에서 대부분의 환경 변수가 초기화됩니다. - 이 때문에
DISPLAY
환경 변수가 설정되지 않아 X 서버에 대한 정보를 잃게 되고 GUI 애플리케이션을 실행할 때 필요한 디스플레이 정보가 없어gedit
같은 프로그램이 실행되지 않습니다.