3

The man page description of who command is who - show who is logged on

But there exists a similar command whoami. The man page description of whoami is

whoami - print effective userid

Can anyone explain what exactly these commands do ? How are they different from each other ?

7

I am logging in as root in my shell and typing who and this is the output.

who
root     tty1         2014-08-25 14:01 (:0)
root     pts/0        2014-09-05 10:22 (:0.0)
root     pts/3        2014-09-19 10:08 (xxx.xxx.edu)

It effectively shows all the users that have established a connection.

ssh ramesh@hostname

Running who again will result in another entry for the user ramesh.

who
root     tty1         2014-08-25 14:01 (:0)
root     pts/0        2014-09-05 10:22 (:0.0)
root     pts/3        2014-09-19 10:08 (xxx.xxx.edu)
ramesh   pts/4        2014-09-19 12:11 (xxx.xxx.edu)

Inside the root shell, I just do a su ramesh and then give whoami. It will give me the output as the current user which is ramesh.

So effectively with who it gives the list of all users currently logged in to the machine and with whoami you can know the current user who is in the shell.

3

who : Print information about users who are currently logged in.

whoami : Print effective username of being ran whoami.

For example:

mohsen@debian:~$ who ## list logged in usernames
mohsen   :0           2014-09-19 16:31 (:0)
mohsen   pts/0        2014-09-19 16:32 (:0)
mohsen   pts/1        2014-09-19 19:42 (:0)

mohsen@debian:~$ whoami 
mohsen                        ##### print my username (mohsen)
mohsen@debian:~$ 

I also recommend a command better than who: the w command. Its output is:

mohsen@debian:~$ w
 21:45:45 up  5:16,  3 users,  load average: 0.68, 0.54, 0.46
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
mohsen   :0       :0               16:31   ?xdm?   1:40m  0.27s gdm-session-wor
mohsen   pts/0    :0               16:32    1.00s  0.15s  0.01s w
mohsen   pts/1    :0               19:42    2:03m  0.13s 14.06s /usr/bin/python

See Also :

last command , /var/log/btmp and /var/log/wtmp files

1

Note on the difference between who and whoami.

The who command will always display the account that you used to login (the real user info).

The whoami command will show your effective user.

For example, if you login as "blammy", the who and whoami commands will display something like this:

> who
blammy  pts/0  2011-04-23 13:43 (123.23.123.123)

> whoami
blammy

This indicates that user "blammy" logged in on 23 Apr 2011 at 13:43 from ip "123.23.123.123".

If you then run su - kapow, you change your effective user to be "kapow".

Now, the who and whoami commands will display something like this:

> who
blammy  pts/0  2011-04-23 13:43 (123.23.123.123)

> whoami
kapow

Notice that the who info stays the same, but the whoami info changes based on the su.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.