Here我认为使用" chgrp -R"重置我的二进制文件上的setuid位;这对我们的申请造成了相当大的担忧。
但是,我必须运行两个命令来确保所有东西都属于某个用户;并且所有事情都有" g + w"在他们。
我认为"最受控制的"达到这个目标的方式:
所以,我需要处理这样的文件:
行
# group: root
应该变成
# group: whatever
和
之类的行group::?-?
应该成为
group::?w?
保留实际的通配符'内容:我的意思是:我只想"启用"瓦;我不想改变那条线上的任何其他东西。
示例:
group::r--
得
group::rw-
和
group::--x
变为
group::-wx
现在我需要把它变成一些bash / sed / awk的东西。有人可以帮忙吗?
(我已经想到了第一部分
sed s/'^# group: root'/'#group: nobody'/g
但与其他人挣扎)
答案 0 :(得分:3)
您可以使用sed
,类似于以下示例:
echo 'group::?-?' | sed 's/\(^group::.\).\(.\)/\1w\2/' # gives group::?w?
echo '#group:root' | sed 's/\(^#group:\).*/\1whatever/' # gives #group:whatever
答案 1 :(得分:2)
我已经整理了一个不太直接的awk
逻辑,但它适用于所有情况。
awk -F"[:]+" -vOFS="::" '{if ($2 == ": root") $2=" whatever"; if (substr($2,2,1) == "-") $2=substr($2,1,1)"w"substr($2,3)}1' file
输入文件
# group: root
group::?-?
group::--x
group::y--
该命令产生输出
$ awk -F"[:]+" -vOFS="::" '{if ($2 == ": root") $2=" whatever"; if (substr($2,2,1) == "-") $2=substr($2,1,1)"w"substr($2,3)}1' file
# group: whatever
group::?w?
group::-wx
group::yw-
几个有用的注释: -
-F"[:]+"
适用于限制器:
的一个或多个实例,-vOFS="::"
用于输出字段分隔。if (substr($2,2,1) == "-") $2=substr($2,1,1)"w"substr($2,3)
只是如果中间字符包含-
,则将其替换为w
。请注意,如果xxx
中的group::xxx
部分包含超过3个字符,则此功能无效。