Here我认为使用“chgrp -R”重置我的二进制文件上的setuid位;这对我们的申请引起了很大的担忧。
但是,我必须运行两个命令来确保所有东西都属于某个用户;并且所有东西都有“g + w”。
我认为“最受控制”的方式是:
所以,我需要处理这样的文件:
用线
# group: root
应该变成
# group: whatever
和线条一样
group::?-?
应该成为
group::?w?
保留实际的“通配符”内容:我的意思是:我只想“启用”w;我不想改变那条线上的任何其他东西。
例:
group::r--
得到
group::rw-
和
group::--x
变
group::-wx
现在我需要把它变成一些bash / sed / awk的东西。有人可以帮忙吗?
(我已经想到了第一部分
sed s/'^# group: root'/'#group: nobody'/g
但与其他人挣扎)
您可以使用sed
,类似于以下示例:
echo 'group::?-?' | sed 's/\(^group::.\).\(.\)/\1w\2/' # gives group::?w?
echo '#group:root' | sed 's/\(^#group:\).*/\1whatever/' # gives #group:whatever
我已经整理了一个不那么直接的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个字符时,这将不起作用。