如何在Perl中获取当前登录用户的主要组和其他组?

Ziz*_*ncs 4 perl

根据这个网站我可以简单地写

$user = getlogin();
Run Code Online (Sandbox Code Playgroud)

但是组处理函数似乎无法接受用户名/ userid作为参数.我是否应该遍历所有/ etc/group文件行并从中解析组名?

fB.*_*fB. 8

不需要解析系统文件,在类UNIX操作系统上我会使用内置接口来访问getpwuid和getgrgid系统:

use strict;
use warnings;

# use $< for the real uid and $> for the effective uid
my ($user, $passwd, $uid, $gid ) = getpwuid $< ;
my $group = getgrgid $gid ;

printf "user: %s (%d), group: %s (%d)\n", $user, $uid, $group, $gid;
Run Code Online (Sandbox Code Playgroud)

比较简单的东西

my $group = getgrgid $(
Run Code Online (Sandbox Code Playgroud)

也可以,因为$(和$)已经应该包含GID和EGID.

最后是POSIX模块中定义的getgroups函数,

use POSIX qw(getgroups)
Run Code Online (Sandbox Code Playgroud)

正如dsw所建议的那样,如果您的操作系统(例如Linux不同)支持同时拥有多个活动组,那么还应允许您获取辅助组.

查找非活动的辅助组可能确实涉及解析/ etc/group文件,直接或通过getgrend内置和标准User :: grent模块的组合使用.