"su" 뒤의 "who am I"에는 새 사용자 ID가 표시되지 않습니까?

"su" 뒤의 "who am I"에는 새 사용자 ID가 표시되지 않습니까?

사용자를 전환 su <username>한 후 실행할 때 who am i전환한 사용자가 아닌 로그인한 이전 사용자가 출력되는 이유는 무엇입니까?

답변1

잘못된 명령을 실행했을 수 있습니다.

  • who누가 로그인했는지, 즉 어떤 사용자가 터미널을 소유하고 있는지 표시하도록 설계되었습니다. 다음과 같은 줄을 반환합니다.

    ckhan    pts/1        2012-11-05 03:06 (c-21-13-25-10.ddw.ca.isp.net)
    
  • whoami실행하는 사람의 유효 사용자 ID가 무엇인지 보여주는 것입니다. 다음과 같은 이름을 반환합니다( running 과 동일 id -un).

    ckhan
    

who am iwho두 개의 무시된 인수( am, )를 사용하여 실행 중인 터미널에 그대로 입력했을 수도 있습니다 i.

자세한 내용을 보시고 배워보시기 man who바랍니다 .man whoami

답변2

해결책:

ls -l `tty` | awk '{print $3}'

대용으로 사용할 수 있습니다 who am i | awk '{print $1}'. 설명은 다음과 같습니다.

많은 시스템에서 " who am i"은(는) " "과 동일합니다 who -m. 여기서 문제는 어떤 사람들에게는단말기, " who -m" 아무것도 반환하지 않습니다!

예제 #1 xfce4 터미널에서 실행

Pegasus ~ # whoami
root
Pegasus ~ # who am i
thomas   pts/1        2017-08-19 11:15 (:0.0)
Pegasus ~ # who -m
thomas   pts/1        2017-08-19 11:15 (:0.0)
Pegasus ~ # who
thomas   tty8         2017-08-19 10:18 (:0)
thomas   pts/1        2017-08-19 11:15 (:0.0)
thomas   pts/5        2017-08-19 16:16 (:0.0)
Pegasus ~ # who am i | awk '{print $1}'
thomas
Pegasus ~ # 

그러나 gnome 터미널의 예 #2(동일한 컴퓨터, 동일한 명령)

Pegasus ~ # whoami
root
Pegasus ~ # who am i
Pegasus ~ # who -m
Pegasus ~ # who
thomas   tty8         2017-08-19 10:18 (:0)
thomas   pts/1        2017-08-19 11:15 (:0.0)
thomas   pts/5        2017-08-19 16:16 (:0.0)
Pegasus ~ # 

이는 gnome-terminal이 utmp 항목을 추가하지 않은 결과인 것 같습니다...

답변3

내 Ubuntu 12.04.2 매뉴얼 페이지의 "who" 명령에 따르면 "who am i"(또는 두 개의 인수가 있는 who)는 "who -m"과 동일하며 STDIN 이름 및 사용자와 연결된 호스트를 제공해야 합니다. . 그러나 나는 "나는 누구인가"라는 결과를 얻지 못합니다. 매뉴얼 페이지가 잘못되었거나 명령이 잘못되었습니다. 어쨌든 ckhan이 이전에 답변했듯이 "whoami" 명령은 유효한 사용자 ID에 대한 사용자 이름을 제공합니다. 적어도 Ubuntu 12.04.2에서는 id, 'who am i' 또는 'whoami' 중 어느 것도 현재 터미널 로그인의 사용자 이름만 제공하지 않습니다. 해결 방법은 다음과 같습니다.

who | sed 's/ .*//'

답변4

내 경우에는 사용자 셸이 /bin/false/etc/passwd에 있으므로 su가 오류를 반환하지 않습니다. 즉, su somebody실패하고 오류가 없으며 누군가가 아닌 여전히 루트입니다.

해결책은 su somebody -s /bin/bash또는 원하는 쉘입니다. 그러면 분명히 whoami예상대로 작동합니다.

관련 정보