The id commands is used to show the real and effective UIDs and GIDs of users. Called with a username it shows the username, primary and secondary groups:
root:~> id marc
uid=1000(marc) gid=1000(marc) groups=1000(marc),10(wheel)
If we use it without any argument, it shows the information above for our effective UID plus the SELinux context:
root:~> id
uid=0(root) gid=0(root) groups=0(root) context=unconfined_u:unconfined_r:unconfined_t:s0s0:c0.c1023
We can also extract a subset of that information. The -u, -g and -G flags show the UID, primary GID and secondary GIDs respectively:
root:~> id -u
0
root:~> id -g
0
root:~> id -G
0
We can show the data above in name rather than numeric format with -n:
root:~> id -un
root
root:~> id -gn
root
root:~> id -Gn
root
With either -u, -g or -G we can query the real user/group rather than the effective one shown by default with the -r flag:
root:~> id -unr
root
root:~> id -gnr
root
root:~> id -Gnr
root
If we need to feed either of the 3 items above to a script, we can do so with the -z flag to avoid having to strip the carriage return with awk/sed:
root:~> id -unr
root
root:~> id -unrz
rootroot:~>
If we want to know what user we originally logged in as (disregarding any subsequent su / sudo changes) we can find that with the logname command:
root:~> logname
marc
The groups command shows the primary & secondary groups for our own user or for others:
marc:~/.vim> groups
marc wheel
.
marc:~/.vim> groups qemu
qemu : qemu kvm
If we just want to find out the names of those users currently logged in we can use users:
root:~> users
marc marc alex marc
We can also show logged in users with the w command:
root:~> w
.12:04:27 up 12 days, 21:25, 4 users, load average: 1.16, 1.22, 1.19
USER TTY LOGIN@ IDLE JCPU PCPU WHAT
marc :0 15Oct15 ?xdm? 16:41m 0.62s gdmsessionworker [pam/gdmpassword]
marc pts/0 15Oct15 10.00s 2.79s 10:35 /usr/libexec/gnometerminalserver
marc pts/3 16Oct15 0.00s 1:32 10:35 /usr/libexec/gnometerminalserver
marc pts/1 Mon19 1:39m 0.02s 10:35 /usr/libexec/gnometerminalserver
The JCPU time is the time used by all processes attached to the tty, including the currently running background jobs. Background jobs already terminated are not accounted for.
The PCPU time is the time used by the current process, named in the “what” field.
We can use the flags -s for short output and -i to show IPs instead of DNSes:
root:~> w -s
12:06:43 up 12 days, 21:27, 4 users, load average: 1.10, 1.20, 1.19
USER TTY IDLE WHAT
marc :0 ?xdm? gdmsessionworker [pam/gdmpassword]
marc pts/0 2:26 /usr/libexec/gnometerminalserver
marc pts/3 2.00s /usr/libexec/gnometerminalserver
marc pts/1 1:41m /usr/libexec/gnometerminalserver
.
root:~> w -i
12:06:55 up 12 days, 21:27, 4 users, load average: 1.07, 1.19, 1.19
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
marc :0 :0 15Oct15 ?xdm? 16:42m 0.62s gdmsessionworker [pam/gdmpassword]
marc pts/0 :0 15Oct15 2:38 2.79s 10:36 /usr/libexec/gnometerminalserver
marc pts/3 :0 16Oct15 3.00s 1:32 10:36 /usr/libexec/gnometerminalserver
marc pts/1 :0 Mon19 1:41m 0.02s 10:36 /usr/libexec/gnometerminalserver
With whoami we shall get our effective user ID:
root:~> whoami
root
With who am i we shall see the user that is logged to our terminal (us?) plus the terminal and login time.
root:~> who am i
marc pts/3 20151016 15:29 (:0)
The who command shows us who is logged in the system now …
root:~> who
marc :0 20151015 15:39 (:0)
marc pts/0 20151015 15:40 (:0)
marc pts/3 20151016 15:29 (:0)
marc pts/1 20151026 19:59 (:0)
… but it can also show us the time of last system boot …
root:~> who –boot –heading
NAME LINE TIME PID COMMENT
system boot 20151015 15:39
… system login processes …
root:~> who –login –heading
NAME LINE TIME IDLE PID COMMENT
… dead processes …
root:~> who –dead –heading
NAME LINE TIME IDLE PID COMMENT EXIT
. pts/2 20151026 17:57 0 id=/2 term=0 exit=0
. pts/4 20151021 20:27 0 id=/4 term=0 exit=0
… counts …
root:~> who –count –heading
marc marc marc marc
# users=4
… current runlevel …
root:~> who –runlevel –heading
NAME LINE TIME IDLE PID COMMENT
. runlevel 5 20151015 15:39
… time of last system clock change …
root:~> who –time –heading
NAME LINE TIME PID COMMENT
… and normal output plus idle time and PIDs …