사용자를 전환 su <username>
한 다음 실행 하면 내가 who am i
로그온 한 이전 사용자가 아닌 내가 전환 한 이전 사용자가 출력되는 이유는 무엇 입니까?
사용자를 전환 su <username>
한 다음 실행 하면 내가 who am i
로그온 한 이전 사용자가 아닌 내가 전환 한 이전 사용자가 출력되는 이유는 무엇 입니까?
답변:
잘못된 명령을 실행했을 가능성이 있습니다.
who
누가 로그인했는지, 즉 어떤 사용자가 터미널을 소유하고 있는지를 나타냅니다. 다음과 같은 줄을 반환합니다.
ckhan pts/1 2012-11-05 03:06 (c-21-13-25-10.ddw.ca.isp.net)
whoami
유효 사용자 ID가 해당 ID를 실행하는 사람이 무엇인지 보여줍니다. 다음과 같은 단일 이름 만 반환합니다 (running과 동일 id -un
).
ckhan
who am i
터미널에 문자 그대로 입력했을 수 있으며 who
두 개의 무시 된 인수 ( am
, i
)로 실행되었습니다.
참조 man who
및 man whoami
자세한 내용은.
'who'명령에 대한 내 Ubuntu 12.04.2 매뉴얼 페이지에서 'who am i'(또는 두 개의 인수를 가진 사람)는 'who -m'과 동일하며 STDIN과 관련된 호스트 이름과 사용자를 제공해야합니다. 그러나 'who am i'로 출력이 없습니다. 매뉴얼 페이지가 잘못되었거나 명령에 버그가 있습니다. ckhan이 이전에 답변 한대로 'whoami'명령은 유효 사용자 ID의 사용자 이름을 제공합니다. 적어도 우분투 12.04.2에서는 id, 'who am i'또는 'whoami'중 어느 것도 현재 터미널에 로그인 한 사람의 사용자 이름 만 제공하지 않습니다. 해결 방법으로 다음과 같이 얻을 수 있습니다.
who | sed 's/ .*//'
해결 방법 :
ls -l `tty` | awk '{print $3}'
에서 대체로 작동합니다 who am i | awk '{print $1}'
. 아래 설명 :
많은 시스템에서 " who am i
"는 " "와 같습니다 who -m
. 여기서 문제는 일부 터미널 에서 " who -m
"는 아무것도 반환하지 않는다는 것입니다.
xfce4- 터미널에서 실행되는 예제 # 1
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 ~ #
그러나 그놈 터미널의 예제 # 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 항목을 추가하지 않은 결과입니다.
stat
대신 사용하십시오 : 드문 경우이지만 사용자 이름에 공백이 포함될 수 있으므로 stat -c '%U' "$(tty)"
구문 분석하지 않아야합니다 who am i
.
am
와i
무시하지, 그들은 심지어 POSIX에 의해 지정됩니다 "는 POSIX 로케일에서 동등 호출하는 사용자, 기술로 출력을 제한하는-m
옵션을 선택합니다."