1. 程式人生 > >《who am i》-linux命令五分鐘系列之十六

《who am i》-linux命令五分鐘系列之十六

為了防止某些網站的惡性轉載,特在每篇文章前加入此資訊,還望讀者體諒。

===

[正文開始]

今天要說的不是成龍的電影“我是誰”,而是Linux裡的who系列命令,包括who、whoami和who am i。

先看看這三個命令的輸出資訊:

[[email protected] ~]$ whoami
rocrocket
[[email protected] ~]$ who am i
rocrocket pts/3        2008-12-30 13:17 (:0.0)
[[email protected] ~]$ who
rocrocket :0           2008-12-30 09:54
rocrocket pts/0        2008-12-30 09:55 (:0.0)
rocrocket pts/1        2008-12-30 09:57 (:0.0)
rocrocket pts/3        2008-12-30 13:17 (:0.0)
當我用sudo su(或者sudo su -)更換到root使用者之後,你再看看:

[[email protected] ~]$ sudo su
[[email protected] rocrocket]# whoami
root
[[email protected] rocrocket]# who am i
rocrocket pts/3        2008-12-30 13:17 (:0.0)
[[email protected] rocrocket]# who
rocrocket :0           2008-12-30 09:54
rocrocket pts/0        2008-12-30 09:55 (:0.0)
rocrocket pts/1        2008-12-30 09:57 (:0.0)
rocrocket pts/3        2008-12-30 13:17 (:0.0)

看出區別來了吧,whoami顯示的是當前“操作使用者”的使用者名稱,而who am i顯示的是“登入使用者”的使用者名稱。

用Linux的術語來解釋就是:(實際使用者=uid,即user id。有效使用者=euid,即effective user id)

who am i 顯示的是實際使用者的使用者名稱,即使用者登陸的時候的使用者ID。此命令相當於who -m。
whoami   顯示的是有效使用者ID.

好了,明白了兩者區別之後,我們來說說who這個命令。

有人會問,為什麼我sudo su到root之後,who裡面卻沒有顯示呢?

這是因為su過去的使用者程序空間是作為一個子空間存在,他並沒有得到一個登入的tty。

who這個命令重點是用來檢視當前有哪些使用者登入到了本臺機器上。

who -m的作用和who am i的作用是一樣的。

who -q用來顯示當前登入使用者的個數。

當你覺得who的輸出資訊晦澀難懂時,可以使用who -H來輸出,這樣可以在每列加上列名稱,有助於閱讀。

如果你對自己編寫who和whoami命令有興趣,推薦給大家兩篇文章,其中用到了utmp結構:

over~