ユーザーを切り替えた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 i
who
2つの無視された引数(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」(または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
期待どおりに動作します。