澄清:
getent group | grep someGroup | grep someUser
Run Code Online (Sandbox Code Playgroud)
问题:这会在企业环境中转储整个组db(可能附加到LDAP等),然后使用grep过滤它们以查看某个组中是否存在用户.
这就是所有团体,无处不在.哎哟.
此外,管理命令通常设置为使得除管理员之外的任何人都完全无法使用的命令.即使是一个简单的"嘿,他是该组织的成员吗?" 类型查询.无法使用if [ -f -d etc...]命令,因为我正在为sodu -u someUser执行做准备.这就是说脚本没有以相关用户身份运行.
问题:有更好的方法吗?
如果你知道用户名和组(就像你看到的那样),你可以这样使用id:
id -Gn username | grep '\bgroupname\b'
Run Code Online (Sandbox Code Playgroud)
id -Gn将显示用户所属的所有组名,grep如果该组存在则返回0 ,否则返回1. \b仅匹配单词边界,这使您无法匹配组名的子串(例如everyfor everyone).
我相信id所有Unix和类Unix系统都可以使用.它在Linux,OS X和OpenBSD上肯定存在并且功能相同.但是,\b对后者不起作用,因为它使用BSD grep而不是GNU - grep需要替代模式.