web-dev-qa-db-ja.com

`w`、` who`、 `whoami`、` id`の異なる出力

コマンドラインプラットフォームでは、たとえば、Codecademyのプラットフォームのように、実行すると

for cmd in w who whoami id
do
    echo $cmd
    $cmd
    echo =========================
    echo "             "
done

私は得る

w                              
00:52:54 up 8 days, 14:10,  0 users,  load average: 3.78, 2.98, 2.69      
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT       
=========================                            

who
=========================                                                 

whoami                          
ccuser                          
=========================                              
  
id
uid=1000(ccuser) gid=1000(ccuser) groups=1000(ccuser)     
=========================                   

何かを出力するのはwhoamiidのみであることに注意してください。コンピューターで同じことを実行すると、すべてのコマンドで同様の結果が表示されます。

Codecademyがwおよびwhoのユーザーを表示しないのはなぜですか?これらのコマンドの何が違うのですか?

9
whoami
  • idレポート
    • 独自のプロセスの現在の資格。または
    • システムアカウントデータベースから読み取られる、指定されたユーザーの資格情報。
  • whoamiは、自身のプロセスの現在の資格情報を報告します。
  • whoおよびwは、loginデータベースからアクティブなログインセッションテーブルを報告します。

BSD docoは、whoamiidのジョブのサブセットを実行し、idはそれを廃止することに注意しています。

システムにアクティブなログインセッションテーブルがなくてもかまいません。 LinuxオペレーティングシステムとBSDでは、ブートストラップ時にテーブルが作成されていないか、テーブルが削除されている場合、システムはテーブルなしで動作します。さらに、ログインしてログアウトしても、Linuxオペレーティングシステムでは暗黙的に作成されません。

さらに、権限のないユーザーがテーブルを読み取れる必要はありません。whoコマンドもwコマンドもこれをエラーとして報告しません。

参考文献

13
JdeBP