技巧分享 实现Linux的whoami命令

Linux下的whoami命令会显示当前的用户是谁,也就是显示自己的用户名。开始我一直想从utmp文件入手,但是总不知道怎么确定自己,后来我去群里问了,他们说每个进程都有用户ID,而用户ID可以通过geteuid系统函数获得,有了ID就好办了,下面是怎么将他转化成一个用户名,用utmp?没有uid这个数据,后来知道是查找/etc/passwd这个文件,自己写查找代码很麻烦,还好有个系统调用可以解决这个问题,它帮我们查找passwd文件,我们只要给出id就可以了

struct passwd* getpwuid(uit_t id)

这样,实现起来就超 easy了

#include
#include
#include
#include

int
main()
{
uid_t id;
struct passwd* pbuf;
id=geteuid();
pbuf=getpwuid(id);
printf("%s\n",pbuf->pw_name);
return 0;

who、whoami命令 和 who am i 命令的区别

先看看普通用户root用户输入这三条命令的不同结果:

技巧分享 实现Linux的whoami命令

看出区别来了吧,whoami显示的是当前“操作用户”的用户名,而who am i显示的是“登录用户”的用户名。

用Linux的术语来解释就是:(实际用户=uid,即user id。有效用户=euid,即effective user id)

who am i 显示的是实际用户的用户名,即用户登陆的时候的用户ID。此命令相当于who -m。
whoami  显示的是有效用户ID(
操作用户).

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wzyssw.html