コマンドラインプラットフォームでは、たとえば、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)
=========================
何かを出力するのはwhoami
とid
のみであることに注意してください。コンピューターで同じことを実行すると、すべてのコマンドで同様の結果が表示されます。
Codecademyがw
およびwho
のユーザーを表示しないのはなぜですか?これらのコマンドの何が違うのですか?
id
レポートwhoami
は、自身のプロセスの現在の資格情報を報告します。who
およびw
は、loginデータベースからアクティブなログインセッションテーブルを報告します。BSD docoは、whoami
はid
のジョブのサブセットを実行し、id
はそれを廃止することに注意しています。
システムにアクティブなログインセッションテーブルがなくてもかまいません。 LinuxオペレーティングシステムとBSDでは、ブートストラップ時にテーブルが作成されていないか、テーブルが削除されている場合、システムはテーブルなしで動作します。さらに、ログインしてログアウトしても、Linuxオペレーティングシステムでは暗黙的に作成されません。
さらに、権限のないユーザーがテーブルを読み取れる必要はありません。who
コマンドもw
コマンドもこれをエラーとして報告しません。
systemd-update-utmp.service
。 systemdのマニュアルページ。 Freedesktop.org。