使用 sed 更新 AIX 中的 /etc/group

使用 sed 更新 AIX 中的 /etc/group

我需要将 Centrify/AD 帐户添加到本地根组,这就是为什么我需要手动编辑 /etc/group,因为在由 Linux 和 AIX 组成的所有服务器上,通过添加“正确”方式无法识别 AD 帐户。我的 Linux 部分正在工作:

LGRP=`grep wheel /etc/group`

ACCT="cycoprts"

sed -i "s/${LGRP}/&,${ACCT}/" /etc/group

sed -i "s/${LGRP}/&${ACCT}/" /etc/group

如果 /etc/group 中存在现有条目,第一个命令会添加逗号;如果没有其他用户添加到该组,第二个命令会跳过逗号。

当我在 AIX 中测试相同的命令时(没有 -i,因为它是 AIX),我得到以下内容(我实际上没有使用 /etc/group 进行测试,而是使用 /etc/test 作为“虚拟”测试文件):

AGRP=`grep w3b3root /etc/group`

ACCT1="cycorpad"

root@xxxxxxxxxxx:/etc$ sed "s/${AGRP}/&${ACCT1}/" /etc/group
sed: 0602-404 Function /w3b3root:!:16:/&cycorpad/ cannot be parsed**

有任何想法吗?

答案1

首先,删除不受支持的“-i”意味着结果不会写回文件 - 相反,它可能只是将修改结果打印到标准输出。

要解决此问题:

要么看看 AIX 机器是否安装了“gsed”,并确保在 AIX 上使用 gsed 而不是 sed,当然还要放回“-i”。

或者将 sed 的输出写入临时文件,然后将临时文件移回原始文件...

注意:不要将 stdout 直接重定向到同一个文件,否则在“sed”看到其内容之前它将被清空。

答案2

不要使用 GNUism“-i”,它不是 POSIX 标准为 sed 规定的内容的一部分。无论如何都是危险的。

其次,无论如何你都不应该以这种方式修改/etc/group。 AIX 有 chuser 命令和 chgrp 命令,我建议您使用这些命令。如果您想将用户添加到某个组,我建议您查阅 chuser 的手册页。

而且,标准AIX中没有“轮子”组,这不是Linux系统! GID 0 的组(我想这就是您要查找的组)称为“系统”。

相关内容