Take the 2-minute tour ×
Unix & Linux Stack Exchange is a question and answer site for users of Linux, FreeBSD and other Un*x-like operating systems.. It's 100% free, no registration required.

The command id can be used to look up a user's uid, for example:

$ id -u ubuntu
1000

Is there a command to lookup up a username from a uid? I realize this can be done by looking at the /etc/passwd file but I'm asking if there is an existing command to to this, especially if the user executing it is not root.

I'm not looking for the current user's username, i.e. I am not looking for whoami or logname.

This also made me wonder if on shared web hosting this is a security feature, or am I just not understanding something correctly?

For examination, the /etc/passwd file from a shared web host:

root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
news:x:9:13:news:/etc/news:
uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
gopher:x:13:30:gopher:/var/gopher:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
nscd:x:28:28:NSCD Daemon:/:/sbin/nologin
vcsa:x:69:69:virtual console memory owner:/dev:/sbin/nologin
pcap:x:77:77::/var/arpwatch:/sbin/nologin
rpc:x:32:32:Portmapper RPC user:/:/sbin/nologin
mailnull:x:47:47::/var/spool/mqueue:/sbin/nologin
smmsp:x:51:51::/var/spool/mqueue:/sbin/nologin
oprofile:x:16:16:Special user account to be used by OProfile:/home/oprofile:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
avahi:x:70:70:Avahi daemon:/:/sbin/nologin
rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin
haldaemon:x:68:68:HAL daemon:/:/sbin/nologin
xfs:x:43:43:X Font Server:/etc/X11/fs:/sbin/nologin
avahi-autoipd:x:100:104:avahi-autoipd:/var/lib/avahi-autoipd:/sbin/nologin
named:x:25:25:Named:/var/named:/sbin/nologin
mailman:x:32006:32006::/usr/local/cpanel/3rdparty/mailman/mailman:/usr/local/cpanel/bin/noshell
dovecot:x:97:97:dovecot:/usr/libexec/dovecot:/sbin/nologin
mysql:x:101:105:MySQL server:/var/lib/mysql:/bin/bash
cpaneleximfilter:x:32007:32009::/var/cpanel/userhomes/cpaneleximfilter:/usr/local/cpanel/bin/noshell
nagios:x:102:106:nagios:/var/log/nagios:/bin/sh
ntp:x:38:38::/etc/ntp:/sbin/nologin
myuser:x:1747:1744::/home/myuser:/usr/local/cpanel/bin/jailshell

And here is a sample directory listing of /tmp/

drwx------  3 root     root        1024 Apr 16 02:09 spamd-22217-init/
drwxr-xr-x  2      665      664    1024 Apr  4 00:05 update-cache-44068ab4/
drwxr-xr-x  4      665      664    1024 Apr 17 15:17 update-extraction-44068ab4/
-rw-rw-r--  1      665      664   43801 Apr 17 15:17 variable.zip
-rw-r--r--  1      684      683    4396 Apr 17 07:01 wsdl-13fb96428c0685474db6b425a1d9baec

We can see root is the owner of some files, and root is also showing up in /etc/passwd , however the other users/groups all show up as numbers.

share|improve this question
2  
Keep in mind that more than one user may have the same UID. It's rare, but happens occasionally. –  Barry Brown Apr 17 '12 at 2:47

3 Answers 3

up vote 4 down vote accepted

ls already performs that lookup. You can perform a user information lookup from the command line with getent passwd.

If ls shows a user ID instead of a user name, it's because there's no user by that name. Filesystems store user IDs, not user names. If you mount a filesystem from another system, or if a file belongs to a now-deleted user, or if you passed a numerical user ID to chown, you can have a file that belongs to a user ID that doesn't have a name.

On a shared host, you may have access to some files that are shared between several virtual machines, each with their user database. This is a bit weird (why share files but not the users that own them?), but it's technically possible.

share|improve this answer

Parse /etc/passwd:

% awk -F: "/:$(id -u ubuntu):/{print \$1}" /etc/passwd
ubuntu
share|improve this answer
2  
Unlike getent, this does not work if the system uses LDAP. –  choroba Apr 17 '12 at 8:51
    
this doesn't work either if NIS is used or whatever other distributed authentication protocol. –  jlliagre Apr 18 '12 at 1:25
    
@choroba : if he had a specific requirement for LDAP or NIS, he probably would have mentioned it. My solution works on typical linux setups. –  laebshade Apr 18 '12 at 2:55

Try

getent passwd "$uid" | cut -d: -f1
share|improve this answer
    
If this returns nothing does that mean I don't have access to translate the id to a username? –  cwd Apr 17 '12 at 4:07
1  
More likely you didn`t set "$uid" or that uid doesn't exist. Does grep ":$uid:" /etc/passwd find it? Does getent passwd produce any output? –  Mikel Apr 17 '12 at 4:14
    
@cwd: You should always have access to translate an id to a username. For instance, ls -l is always doing this. –  camh Apr 17 '12 at 7:00
    
Just curious because looking at an ls listing on a shared host was showing numbers in the user / group name columns with ls. Perhaps it is a security precaution or jailshell thing? –  cwd Apr 17 '12 at 19:50
    
@cwd More likely the shared host is using an /etc/passwd mounted / shared from elsewhere which wasn't mounted at the time. –  jw013 Apr 17 '12 at 19:56

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

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