linux获得用户的主要信息,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

⑴    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

在passwd文件中记录的是所有系统用户

每一行表示一个完整的struct passwd结构,以':'分隔出每一项值,其7项。

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

#include

#include

#include

#include

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值