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

标签 perl

根据this site我可以简单地写

$user = getlogin();

但组处理功能似乎无法接受用户名/用户 ID 作为参数。我真的应该遍历所有/etc/group 文件行并从中解析组名吗?

最佳答案

无需解析系统文件,在类 UNIX 操作系统上,我将使用 getpwuid 和 getgrgid 系统调用的内置接口(interface):

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;

更简单的东西,比如
my $group = getgrgid $(

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

最后是 POSIX 模块中定义的 getgroups 函数,
use POSIX qw(getgroups)

正如 dsw 所建议的那样,如果您的操作系统(与 Linux 不同)支持同时拥有多个事件组,则还应该允许您获取辅助组。

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

关于perl - 如何在 Perl 中获取当前登录用户的主要组和其他组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/337588/

相关文章:

perl - Sail Align软件安装语音处理

windows - Windows 上的 Perl GUI 编程

excel - Perl Spreadsheet::ParseExcel 无法解析并返回 undef

bash - 使用 Perl 通过 Gmail 发送邮件

perl - 在 PERL 中将 SHA1 十六进制转换为 base64 编码(对于 Apache htpasswd)

linux - 用于创建文件夹和移动文件的“管家”脚本

Perl - 如何转换日期?

perl - 脚本中的标题格式错误。错误 header =&lt;!DOCTYPE html>

regex - 如何使用 Perl 通过正则表达式替换在连续匹配之间散布字符?

algorithm - 这个算法有名字吗?