How can I look up a username by id in linux?

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

$ id -u ubuntu

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:

ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nscd:x:28:28:NSCD Daemon:/:/sbin/nologin
vcsa:x:69:69:virtual console memory owner:/dev:/sbin/nologin
rpc:x:32:32:Portmapper RPC user:/:/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
mysql:x:101:105:MySQL server:/var/lib/mysql:/bin/bash

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
-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.

Asked By: cwd



getent passwd "$uid" | cut -d: -f1
Answered By: jw013

Parse /etc/passwd:

% awk -F: "/:$(id -u ubuntu):/{print $1}" /etc/passwd
Answered By: laebshade

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.

You might enjoy this little ditty.

$ id -nu [number]

3.17.3-1-ARCH #1 SMP PREEMPT Fri Nov 14 22:56:01 CET 2014 i686 GNU/Linux

I can confirm that it returns a corresponding user name, if one exists, on Arch Linux. I can also confirm that it does not work on Ubuntu when run as a normal user, although I have not tested this as the superuser. It also does not work on Alpine Linux. Maybe a security feature prevents this from working on some systems.

Answered By: Stefan

I realize this is an old question, but here’s another answer

awk -F: '{print $1,$3}' /etc/passwd | grep <UID>
Answered By: D Smith
id | awk '{print $1}' | sed 's/.*(//;s/)$//'

This oneliner does the following:

  • get user information
  • extract the first column (“uid=ID(NAME)”)
  • remove anything before brackets, and the brackets themselves
Answered By: NAIM

The command id can be used to both to look up UID and/or USER name

  1. look up a UID by USER, for example:
    $ id -u ubuntu
  1. look up a USER by UID, for example:
    $ id -un 1000

If the UID or USER is not found on current machine it prints no such user message to stderr, for example:

$ id -un 1234
id: 1234: no such user

From man id:

id - print real and effective user and group IDs
   -n, --name
          print a name instead of a number, for -ugG
   -u, --user
          print only the effective user ID
   -g, --group
          print only the effective group ID
   -G, --groups
          print all group IDs
Answered By: ino

Just to add another method for use on systems without a suitably recent id utility:

perl -le 'print scalar getpwuid $ARGV[0]' "$uid"

Unlike grepping the passwd file, this works fine on systems that use other methods of username/uid mapping (e.g. LDAP or NIS), and it has high probability of working even on really weird or ancient unix-ish systems thanks to perl’s extreme portability and its long legacy of being used as a swiss army knife for system admins.

Answered By: Matthijs
Categories: Answers Tags: , , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.