linux下获取用户基本信息

 

通过c语言基础库从获取linux用户的基本信息。

1、使用struct passwd管理用户信息。

struct passwd

{

  char *pw_name;                /* 用户登录名    */

  char *pw_passwd;              /* 密码(加密后)*/

  __uid_t pw_uid;               /* 用户ID     */

  __gid_t pw_gid;               /* ID       */

  char *pw_gecos;               /* 详细用户名    */

  char *pw_dir;                 /* 用户目录       */

  char *pw_shell;               /* Shell程序名 */

};

 

2、分析相并的系统文件/etc/passwd

1.     root:x:0:0:root:/root:/bin/bash   

2.     daemon:x:1:1:daemon:/usr/sbin:/bin/sh   

3.     bin:x:2:2:bin:/bin:/bin/sh  

passwd文件中记录的是所有系统用户
每一行表示一个完整的struct passwd结构,以':'分隔出每一项值,其7项。

3、获取系统当前运行用户的基本信息。

#include <grp.h>

#include <pwd.h>

#include <unistd.h>

#include <stdio.h>

 

int main ()

{

      uid_t uid;

      struct passwd *pw;

      struct group *grp;

      char **members;

     

      uid = getuid ();

      pw = getpwuid (uid);

     

      if (!pw)

      {

           printf ("Couldn't find out about user %d./n", (int)uid);

           return 1;

      }

     

      printf ("I am %s./n", pw->pw_gecos);

      printf ("User login name is %s./n", pw->pw_name);

      printf ("User uid is %d./n", (int) (pw->pw_uid));

      printf ("User home is directory is %s./n", pw->pw_dir);

      printf ("User default shell is %s./n", pw->pw_shell);

      grp = getgrgid (pw->pw_gid);

      if (!grp)

      {

           printf ("Couldn't find out about group %d./n",

                      (int)pw->pw_gid);

           return 1;

      }

     

      printf ("User default group is %s (%d)./n",

                 grp->gr_name, (int) (pw->pw_gid));

     

      printf ("The members of this group are:/n");

      members = grp->gr_mem;

      while (*members)

      {

           printf ("/t%s/n", *(members));

           members++;

      }   

      return 0;

}

 

编译,结果输出

$gcc -o userinfo userinfo.c

$./userinfo

I am root.

My login name is root.

My uid is 0.

My home is directory is /root.

My default shell is /bin/bash.

My default group is root (0).

The members of this group are:

         test

         user

         test2

 

4、查看所有的用户信息

使用pwd.h定义的方法getpwent(),逐行读取/etc/passwd中的记录,每调用getpwent函数一次返回一个完整用户信息struct passwd结构。

再次读取时,读入下一行的记录。

在使用之前先使用setpwent()打开文件(如果文件关闭)或重定位到的文件开始处,操作结束时使用endpwent()关闭/etc/passwd文件,避免对后面的使用产生负作用。

 

5、脚本操作,显示所有用户的信息中的name

使用cut命令将/etc/passwd中的内容逐行解析,"-d:"':'将一行划分出7人字段列,-f1,为第一列

cut -d: -f1 /etc/passwd

 

 

你可能感兴趣的:(加密,linux,struct,shell,user,login)