identity, groups, and getent
One common use of the id command is to ensure that a script is being run with the appropriate privileges. This is not particularly useful for enforcing security mechanisms, as scripts can easily be copied and edited, but sometimes it is useful to inform the user that the script will not work as expected if they are not root. For example, this short script displays configured network adapters and their current speeds. The ethtool command requires root privileges to perform its task, so it makes sense to bail out instead of failing to work properly.
$ cat nicspeed.sh
#!/bin/bash
# This script only works for the root user.
if [ 'id -u' -ne 0 ]; then
echo "Error: This script has to be run by root."
exit 2
fi
for nic in '/sbin/ifconfig | grep "Link encap:Ethernet" | \
grep "^eth" | awk '{ print $1 }''
do
echo -en $nic
ethtool $nic | grep Speed:
done
↓When run as an unprivileged user, it refuses to continue.
$ ./nicspeed.sh
Error: This script has to be run by root.
↓When run as root, the script works.
# ./nicspeed.sh
eth0 Speed: 1000Mb/s
eth1 Speed: 100Mb/s
eth4 Speed: 1000Mb/s
#
nicspeed.sh
Another command related to name services in general, but including the password database, is getent. getent retrieves keyed values from certain naming services (as listed in /etc/nsswitch.conf). Some of these databases can be output ...
Get Shell Scripting: Expert Recipes for Linux, Bash, and More now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.