Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What's the easiest way to get a user's full name on a Linux/POSIX system?

I could grep through /etc/passwd but that seems onerous. 'finger' isn't installed and I'd like to avoid that dependency. This is for a program so it would be nice if there was some command that let you just access user info.

like image 360
Josh Gibson Avatar asked May 07 '09 06:05

Josh Gibson


People also ask

How do I change user information in Ubuntu?

Click on the ubuntu button, search for "User" until the User Accounts application shows up, then launch it. Click on the lock button on the top right, this enables you to change your settings. Then click on your username to change it, and that's it!


1 Answers

You don't specify a programming language, so I'll assume you want to use the shell; here's an answer for Posix shells.

Two steps to this: get the appropriate record, then get the field you want from that record.

First, getting the account record is done by querying the passwd table:

$ user_name=foo $ user_record="$(getent passwd $user_name)" $ echo "$user_record" foo:x:1023:1025:Fred Nurk,,,:/home/foo:/bin/bash 

For hysterical raisins, the full name of the user is recorded in a field called the “GECOS” field; to complicate matters, this field often has its own structure with the full name as just one of several optional sub-fields. So anything that wants to get the full name from the account record needs to parse both these levels.

$ user_record="$(getent passwd $user_name)" $ user_gecos_field="$(echo "$user_record" | cut -d ':' -f 5)" $ user_full_name="$(echo "$user_gecos_field" | cut -d ',' -f 1)" $ echo "$user_full_name" Fred Nurk 

Your programming language probably has a library function to do this in fewer steps. In C, you'd use the ‘getpwnam’ function and then parse the GECOS field.

like image 126
bignose Avatar answered Oct 15 '22 11:10

bignose