$ users
vorac
# Non-login shell, /root/.profile not sourced.
$ su
$ users
vorac
# Login shell, /root/.profile sourced.
$ su -
$ users
vorac
따라서 이전 예에서는 다른 사용자로 로그인 쉘을 시작했지만 여전히 원래 사용자만 "로그인"되었습니다. "로그인한 사용자"라는 개념은 어떻게 정의됩니까?
답변1
Unix/Linux 시스템은 현재 로그인한 사용자의 데이터베이스를 파일로 유지 관리합니다 /var/run/utmp
(일부 Unix 변형에는 병렬 파일도 있지만 utmpx
모두 동일한 목적으로 사용됩니다). 이 login
프로그램은 물리적 콘솔의 로그인을 제어하며 X 서버가 있는 컴퓨터의 SSH 데몬 또는 GUI 로그인 프로그램은 사용자가 로그인하거나 로그아웃할 때 이 파일의 정보를 업데이트합니다. who
명령은 이 데이터베이스에서 정보를 읽습니다.
시작하는 쉘은 프로그램이나 ssh 데몬에 의해 시작된 로그인 쉘과 동일한 방식으로 동작하지만(동일한 init 파일 실행 등) 로그인을 파일에 기록 하지 않는다는 su -
점에서 "로그인" 쉘입니다. 따라서 이 쉘은 출력에 표시되지 않는다는 명령을 사용하고 있습니다 .login
utmp
who
반면에, 예를 들어 screen
세션 을 시작 하고 screen
파일에 항목을 기록하며 utmp
명령 출력에서 세션을 볼 수 있습니다 who
.
또한 일부 그래픽 DE에서는 사용자가 여는 모든 새 터미널 창이 새 로그인으로 간주되어 로그인되는 반면 utmp
, 다른 경우에는 그렇지 않습니다. utmp
전체 DE 세션 사용자에 로그인하기 위한 마스터 항목이 하나만 있습니다. 물론 이것은 터미널 애플리케이션에 따라 다릅니다.