「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 iwho2つの無視された引数(am、)を使用して、実行中の端末にそのまま入力した可能性がありますi

詳しくはこちらをご覧くださいman whoman 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」(または2つの引数を持つ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期待どおりに動作します。

関連情報