In rare cases, you will find sometimes we need to list users above or below particular user id. Such requirement mostly come when you are playing around users related troubleshooting.
For an example, we want to list the users which are above userid 500 in Linux System.
The user related information like username and user id is available in /etc/passwd file in Linux/Unix like Operating System.
First check in which row the user id is present in /etc/passwd file. Generally it is located at 3 rd row in /etc/passwd file.
List users which has above user-id 500
List users which has above user-id 500, use below given syntax:
-F: means separator
$3 represents 3rd row
< 500 means above 500
awk -F: ‘$3 < 500' /etc/passwd
linux@tuxworld:~/Desktop$ awk -F: '$3 < 500' /etc/passwd root:x:0:0:root:/root:/bin/bash daemon:x:1:1:daemon:/usr/sbin:/bin/sh bin:x:2:2:bin:/bin:/bin/sh sys:x:3:3:sys:/dev:/bin/sh sync:x:4:65534:sync:/bin:/bin/sync games:x:5:60:games:/usr/games:/bin/sh man:x:6:12:man:/var/cache/man:/bin/sh lp:x:7:7:lp:/var/spool/lpd:/bin/sh mail:x:8:8:mail:/var/mail:/bin/sh news:x:9:9:news:/var/spool/news:/bin/sh uucp:x:10:10:uucp:/var/spool/uucp:/bin/sh proxy:x:13:13:proxy:/bin:/bin/sh www-data:x:33:33:www-data:/var/www:/bin/sh backup:x:34:34:backup:/var/backups:/bin/sh list:x:38:38:Mailing List Manager:/var/list:/bin/sh irc:x:39:39:ircd:/var/run/ircd:/bin/sh gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/bin/sh libuuid:x:100:101::/var/lib/libuuid:/bin/sh syslog:x:101:103::/home/syslog:/bin/false colord:x:102:105:colord colour management daemon,,,:/var/lib/colord:/bin/false messagebus:x:103:107::/var/run/dbus:/bin/false lightdm:x:104:108:Light Display Manager:/var/lib/lightdm:/bin/false avahi-autoipd:x:105:112:Avahi autoip daemon,,,:/var/lib/avahi-autoipd:/bin/false avahi:x:106:113:Avahi mDNS daemon,,,:/var/run/avahi-daemon:/bin/false usbmux:x:107:46:usbmux daemon,,,:/home/usbmux:/bin/false kernoops:x:108:65534:Kernel Oops Tracking Daemon,,,:/:/bin/false pulse:x:109:119:PulseAudio daemon,,,:/var/run/pulse:/bin/false rtkit:x:110:122:RealtimeKit,,,:/proc:/bin/false speech-dispatcher:x:111:29:Speech Dispatcher,,,:/var/run/speech-dispatcher:/bin/sh hplip:x:112:7:HPLIP system user,,,:/var/run/hplip:/bin/false saned:x:113:123::/home/saned:/bin/false mysql:x:114:125:MySQL Server,,,:/nonexistent:/bin/false whoopsie:x:115:126::/nonexistent:/bin/false dhcpd:x:116:128::/var/run:/bin/false ftp:x:117:129:ftp daemon,,,:/srv/ftp:/bin/false bind:x:118:130::/var/cache/bind:/bin/false gdm:x:119:131:Gnome Display Manager:/var/lib/gdm:/bin/false jetty:x:120:132::/usr/share/jetty:/bin/false libvirt-qemu:x:121:133:Libvirt Qemu,,,:/var/lib/libvirt:/bin/false libvirt-dnsmasq:x:122:134:Libvirt Dnsmasq,,,:/var/lib/libvirt/dnsmasq:/bin/false debian-tor:x:123:135::/var/lib/tor:/bin/false apt-mirror:x:124:136::/var/spool/apt-mirror:/bin/sh vde2-net:x:125:137::/var/run/vde2:/bin/false sshd:x:126:65534::/var/run/sshd:/usr/sbin/nologin smmta:x:127:138:Mail Transfer Agent,,,:/var/lib/sendmail:/bin/false smmsp:x:128:139:Mail Submission Program,,,:/var/lib/sendmail:/bin/false postfix:x:129:140::/var/spool/postfix:/bin/false postgres:x:130:142:PostgreSQL administrator,,,:/var/lib/postgresql:/bin/bash clamav:x:131:143::/var/lib/clamav:/bin/false festival:x:132:29::/home/festival:/bin/false ntp:x:133:144::/home/ntp:/bin/false linux@tuxworld:~/Desktop$
Now from above information, we will filter more. By using above output, we will list only User name and its user id.
List only User name and its user id above user-id 500
Use the below given Syntax
Here, {print $1,$3;} prints only row no. 1 and 3.
Whereas we have again used the -F: for separator.
awk -F: '$3 < 500' /etc/passwd|awk -F: '{print $1,$3;}'
See the below given output from above command
linux@tuxworld:~/Desktop$ awk -F: '$3 < 500' /etc/passwd|awk -F: '{print $1,$3;}' root 0 daemon 1 bin 2 sys 3 sync 4 games 5 man 6 lp 7 mail 8 news 9 uucp 10 proxy 13 www-data 33 backup 34 list 38 irc 39 gnats 41 libuuid 100 syslog 101 colord 102 messagebus 103 lightdm 104 avahi-autoipd 105 avahi 106 usbmux 107 kernoops 108 pulse 109 rtkit 110 speech-dispatcher 111 hplip 112 saned 113 mysql 114 whoopsie 115 dhcpd 116 ftp 117 bind 118 gdm 119 jetty 120 libvirt-qemu 121 libvirt-dnsmasq 122 debian-tor 123 apt-mirror 124 vde2-net 125 sshd 126 smmta 127 smmsp 128 postfix 129 postgres 130 clamav 131 festival 132 ntp 133 linux@tuxworld:~/Desktop$
Second Scenario : List users below particular user id
Use the given syntax for listing user below user id 500
-F: means separator
$3 represents 3rd row
> 500 means below 500
awk -F: '$3 > 500' /etc/passwd
See the below given output
linux@tuxworld:~/Desktop$ awk -F: '$3 > 500' /etc/passwd nobody:x:65534:65534:nobody:/nonexistent:/bin/sh sharad:x:1000:1000:sharad chhetri,111,91-000000,91-0000001:/home/sharad:/bin/bash linux:x:1002:1002::/home/linux:/bin/bash FOSS:x:1004:1004::/home/FOSS:/bin/sh linuxtolinux:x:1006:1006::/home/linuxtolinux:/bin/bash vbox:x:1007:1007::/home/vbox:/bin/sh ram:x:1008:1008::/home/ram:/bin/sh red:x:1009:1009::/home/red:/bin/sh joe:x:1010:1010::/home/joe:/bin/ksh john:x:1011:1011:John k,222,000001010,9100234-1,System administrator:/home/john:/bin/sh linux@tuxworld:~/Desktop$
List only User name and its user id below user-id 500
awk -F: '$3 > 500' /etc/passwd|awk -F: '{print $1,$3;}'
See below given output:
linux@tuxworld:~/Desktop$ awk -F: '$3 > 500' /etc/passwd|awk -F: '{print $1,$3;}' nobody 65534 sharad 1000 linux 1002 FOSS 1004 linuxtolinux 1006 vbox 1007 ram 1008 red 1009 joe 1010 john 1011 linux@tuxworld:~/Desktop$
Why not simplify
awk -F: ‘$3 > 500’ /etc/passwd|awk -F: ‘{print $1,$3;}’
to
awk -F: ‘$3 > 500 {print $1,$3;}’ /etc/passwd
?
This saves at least one invocation of the ‘awk’ command 🙂
🙂 It is there Edward.
Regards
Sharad