ユーザーを切り替えて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が何であるかを示すことを意味します。これは、次のように1つの名前だけを返します(これは、runningと同じですid -un
)。
ckhan
2つの無視された引数(、)who am i
で実行されたターミナルで文字どおりに入力した可能性があります。who
am
i
詳細についてはman who
、およびman whoami
を参照してください。
私のUbuntu 12.04.2の「who」コマンド、「who am i」(または2つの引数を持つwho)のマニュアルページでは、「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エントリを追加していないためです...
stat
代わりに使用してください:まれにユーザー名にスペースが含まれることがあるため、stat -c '%U' "$(tty)"
おそらくどちらも解析しwho am i
ないでください。
am
とi
無視されていない、彼らはさえPOSIXによって指定されている:「POSIXロケールでは、と等価で呼び出しているユーザー、記述に出力を制限する-m
オプションを選択します。」