本原创文章属于《Linux大棚》博客,博客地址为http://roclinux.cn。文章作者为rocrocket。
为了防止某些网站的恶性转载,特在每篇文章前加入此信息,还望读者体谅。

===

[正文开始]

今天要说的不是成龙的电影“我是谁”,而是Linux里的who系列命令,包括who、whoami和who am i。

先看看这三个命令的输出信息:

[rocrocket@rocrocket ~]$ whoami
rocrocket
[rocrocket@rocrocket ~]$ who am i
rocrocket pts/3        2008-12-30 13:17 (:0.0)
[rocrocket@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)
当我用sudo su(或者sudo su -)更换到root用户之后,你再看看:

[rocrocket@rocrocket ~]$ sudo su
[root@rocrocket rocrocket]# whoami
root
[root@rocrocket rocrocket]# who am i
rocrocket pts/3        2008-12-30 13:17 (:0.0)
[root@rocrocket 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来输出,这样可以在每列加上列名称,有助于阅读。

随机推荐

  1. < < < 2013年国家集训队作业 > > >

    完成题数/总题数:  道/37道 1.  A1504. Book(王迪): 数论+贪心   ★★☆        2013中国国家集训队第二次作业 2.  A1505. 树(张闻涛): 倍增LCA+可 ...

  2. android camera(一):camera模组CMM介绍

    一.摄像头模组(CCM)介绍: 1.camera特写 摄像头模组,全称CameraCompact Module,以下简写为CCM,是影像捕捉至关重要的电子器件.先来张特写,各种样子的都有,不过我前一段 ...

  3. Hadoop-Map/Reduce之单表连接的实现

    MapReduce程序就是根据其特性对数据进行一个简单的逻辑处理,其中最为重要的一个特性就是根据key值将value值进行合并,其次就是在shuffle阶段有排序. 遇到一个MR程序就是要巧妙利用合并 ...

  4. mongDB基本命令和Java操作MongoDB

    上一篇博文<mongoDB安装>我们安装了mongoDB,现在来复习一下它的一些基本命令:mongoDB的bin目录加入到path之后,命令行中输入mongo: 然后我们进入正题 1.查看 ...

  5. AX2012服务器配置--Windows Server 2012 配置远程桌面同一帐户允许多session同时登录

    网上找了很多关于设置远程桌面最大连接数的文章,大都是说先要到控制面板的管理工具中设置远程桌面会话主机等,大体和我之前的文章<设置WINDOWS SERVER 2008修改远程桌面连接数>里 ...

  6. CUDA8.0+VS2013的安装和配置

    首先声明,本文借鉴自:http://blog.csdn.net/u011314529/article/details/51505029 所以,可参考链接的博文.但原文有个瑕疵就是,cublas.lib ...

  7. Quartz定时任务学习(四)调度器

    org.quartz.Scheduler 类层次 作为一个 Quartz 用户,你要与实现了 org.quartz.Scheduler 接口的类交互.在你调用它的任何 API 之前,你需要知道如何创建 ...

  8. ABAP程序的效率(转)

    在网上看到的一篇文章: 程序的效率是每个程序员都应该重视的,无论您是采用哪一种语言进行开发. 程序有时候越短,并不一定越快,有时候程序很多代码,但不一定会很慢. 性能是一把双刃剑, 获得时间效率的同时 ...

  9. 文件读写操作(含SDCard的读写)

    1.在AndroidManifest文件下添加SDCard的读写权限 <!-- 在SDCard中创建与删除文件权限 --> <uses-permission android:name ...

  10. magic_quotes_sybase(魔术引号开关)

    magic_quotes_sybase,如果该选项在php.ini文件中是唯一开启的话,将只会转义%00为\0(即null字符).此选项会完全覆盖magic_quotes_gpc.如果同时开启这两个选 ...