@John1024 对手动编辑文本文件 /etc/group 有一个很好的答案,尽管我怀疑它可能存在不破坏具有成员的组的问题:
docker:x:1001:bob,alice
此外,大多数当前系统都有一对与组相关的文件:/etc/group 和 /etc/gshadow。
如果手头的任务是真正的系统管理员,请考虑使用现有的工具来管理与组相关的文件:groupadd
和groupmod
.
这是一个尝试:
#!/usr/bin/env bash
if [[ $# -ne 2 ]]; then
echo "Usage: $(basename $0) <groupname> <groupid>" 1>&2
exit 1
fi
set -e
[[ $EUID -eq 0 ]] || exec sudo "$0" "$@"
type groupadd &> /dev/null || PATH=/sbin:/usr/sbin:"$PATH"
# Add the group if it's not already present
#
grep -q "^$1:" /etc/group || groupadd -g "$2" "$1"
# Edit the group if it does not have the desired gid
# (See groupmod(8) for implications of a gid change here -
# note that it will *not* change files' group ownerships
# out in the system.)
#
grep -q "^$1:[^:]*:$2:" /etc/group || groupmod -g "$2" "$1"
编辑:一个更简单的版本,没有检查以 root 身份运行或尝试使用 sudo,以及一个更简单的解释器行,假设/bin/bash
系统上可以使用 bash。
#!/bin/bash
if [[ $# -ne 2 ]]; then
echo "Usage: $(basename $0) <groupname> <groupid>" 1>&2
exit 1
fi
set -e
grep -q "^$1:" /etc/group || groupadd -g "$2" "$1"
grep -q "^$1:[^:]*:$2:" /etc/group || groupmod -g "$2" "$1"
如果保存为groupedit.sh
可执行文件,则直接以 root 身份运行或通过
$ sudo ./groupedit.sh
groupadd/groupmod 命令是一样的,只是没有第一个版本的注释。