Shell - Users and Groups
Users and Groups Shell Commands
check current user uid/gid:
# List IDs, e.g. as root
$ id
uid=0(root) gid=0(root) groups=0(root)
# List IDs of a user, e.g. ubuntu (one uid, one gid, a list of groups)
$ id ubuntu
uid=1000(ubuntu) gid=1000(ubuntu) groups=1000(ubuntu),4(adm),20(dialout),24(cdrom),25(floppy),27(sudo),29(audio),30(dip),44(video),46(plugdev),109(netdev),110(lxd),999(docker)
# Get uid only
$ id -u
1000
# Get gid only
$ id -g
1000
# List groups of the user
$ groups ubuntu
ubuntu : ubuntu adm dialout cdrom floppy sudo audio dip video plugdev netdev lxd docker
# List all groups
$ cat /etc/group
# List all users
$ cat /etc/passwd
# Get the read-only, effective user ID
$ echo $EUID
1000
# Get the current user name
$ whoami
ubuntu
# Or check `$USER`
$ echo $USER
ubuntu
getent
Find out the members of a group with the name developers
you would use the following command:
$ getent group developers
Manage Users and Groups
groupadd
: add a new group
$ sudo groupadd docker
usermod
: modify user, e.g. add user to group docker
$ sudo usermod -aG docker $USER
root
How to change to root user?
$ sudo su
$ su - root
Why some commands are only available with sudo?
The shell will lookup commands in PATH
.
$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
It is possible that the root user has a different PATH
from a normal user (check your config files like /etc/profile
, ~/.bashrc
etc). E.g. root user may have /usr/local/sbin
or /usr/sbin
or /sbin
while normal user only has the normal bin
folders in the PATH
.
The other case may also happen: you installed some program in PATH
as a normal user, but needs root permission to execute, for example, if you install node in your own folder while you need $ sudo node bin/www
to serve it, you will get an error saying node
cannot be found.
Solution:
$ sudo env PATH=$PATH [COMMAND]
this will use your own PATH when executing the COMMAND, e.g.
$ sudo env PATH=$PATH node bin/www
or add this to ~/.bashrc
alias sudo='sudo env PATH=$PATH'