You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

修复polkit规则:优化PCRE正则匹配/proc/status中的特定GID

修复polkit规则中匹配进程GID的正则表达式问题

问题分析

原正则表达式"^Groups:.+?\\\s990[\\\s\\\0]"的问题在于:

  1. 非贪婪匹配的.+?会尽可能少地匹配字符,当目标GID(990)不是紧跟在Groups:后的第一个组时,无法正确定位到目标GID的位置;
  2. 没有明确的边界匹配,存在误匹配包含990的其他GID(如1990)的风险。

优化后的正则表达式

推荐使用以下两种正则之一,根据实际需求选择:

方案1:匹配独立GID(推荐)

确保990是一个独立的组ID,同时允许它出现在Groups行的任意位置:

"^Groups:.*\\b990\\b"

方案2:兼容行尾空字符

如果需要处理/proc/[pid]/status文件可能存在的行尾空字符\0,可以使用:

"^Groups:.*\\b990(?:\\s|\\0)"

优化点说明

  • 将非贪婪的.+?替换为贪婪的.*:可以匹配Groups:之后的所有内容,直到找到目标GID;
  • 添加\\b单词边界:保证990是一个独立的数字,避免匹配到类似1990、9901这类包含990的无关GID;
  • 可选的(?:\\s|\\0):匹配990之后的分隔符(空格或行尾空字符),确保匹配的完整性。

验证示例

假设/proc/1234/status中的Groups行内容为:

Groups: 1000 990 992

执行以下命令会成功匹配:

grep -Po '^Groups:.*\b990\b' /proc/1234/status

替换后的正则可以让polkit规则正确识别进程所属的目标组ID,无论该GID在Groups列表中的位置如何。

内容的提问来源于stack exchange,提问作者AtomicPorkchop

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 00:50:20