ユーザーを切り替えると、なぜ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 -un
を実行するのと同じです)。
ckhan
ターミナルで文字どおりwho am i
を入力した可能性があります。これは、2つの無視された引数(who
、am
)でi
を実行しました。
詳細については、man who
およびman whoami
を参照してください。
私の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エントリを追加していないためです...