我具有使用stat
命令读取的文件的参数(尤其是userid和groupid),并且我在一个在ldap服务器上指定用户和组的网络中工作。
我已经从getent passwd userid
命令的结果中获得了用户名。
现在,我的想法是使用getent group groupid
来获取组名,但这是行不通的。
谁能告诉我哪里出了错或如何获得组名?
谢谢!
最佳答案
撇开您输入错误的组ID的可能性,这
可能是LDAP设置中的错误,它以反向组解析的形式显示,而不是
加工。事实证明,这适用于普通的"file"
建立。
getent(1)指出:
group When no key is provided, use setgrent(3), getgrent(3), and
endgrent(3) to enumerate the group database. When one or
more key arguments are provided, pass each numeric key to
getgrgid(3) and each nonnumeric key to getgrnam(3) and
display the result.
这可能意味着getgrgid(3)在您的设置上失败。
要对此进行测试,请使用“make getgrgid_test”编译该程序(getgrgid_test.c):
#include <stdio.h>
#include <sys/types.h>
#include <grp.h>
int
main(int argc, char **argv)
{
int gid;
struct group *g;
if (argc != 2) {
fprintf(stderr, "Invalid number of positional arguments\n");
fprintf(stderr, "Usage getgrid_test GID\n");
return 1;
}
gid = atoi(argv[1]);
g = getgrgid(gid);
if (g == NULL) {
fprintf(stderr, "gid %d not found\n", gid);
return 1;
}
printf("%s\n", g->gr_name);
return 0;
}
然后使用您的gid运行它,如下所示:
getgrgid_test GID
如果没有产生组名,请报告给系统管理员。
否则,如果可以,但是“getent group GID”无效,则是一个错误
“getent”。
关于linux - 有组号时如何获取组名,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16163910/