web-dev-qa-db-ja.com

`su`が新しいユーザーIDを表示していない後の` who am i`?

ユーザーを切り替えると、なぜsu <username>を実行してからwho am iは、私が切り替えたユーザーではなく、ログインした前のユーザーを出力しますか?

9
user1091856

間違ったコマンドを実行している可能性があります。

  • whoは、誰がログインしているか、つまり、どのユーザーが端末を所有しているかを示すためのものです。次のような行を返します。

    ckhan    pts/1        2012-11-05 03:06 (c-21-13-25-10.ddw.ca.isp.net)
    
  • whoamiは、それを実行しているユーザーの有効なユーザーIDを示します。次のように単一の名前のみを返します(id -unを実行するのと同じです)。

    ckhan
    

ターミナルで文字どおりwho am iを入力した可能性があります。これは、2つの無視された引数(whoam)でiを実行しました。

詳細については、man whoおよびman whoamiを参照してください。

13
ckhan

私のUbuntu 12.04.2の「who」コマンド、「who am i」(または任意の2つの引数を持つ)のマニュアルページでは、「who -m」と同じであり、STDINに関連付けられているホスト名とユーザーが表示されます。ただし、「who am i」では出力がありません。マニュアルページが間違っているか、コマンドにバグがあります。いずれにせよ、ckhanが以前に回答したように、「whoami」コマンドは有効なユーザーIDのユーザー名を提供します。少なくともUbuntu 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」が何も返さないことです。

例1 xfce4-terminalから実行

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はgnome-terminalから(同じコンピューター、同じコマンド)

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