2016-09-30 57 views
1

Here我認爲使用「chgrp -R」會重置我的二進制文件中的setuid位;這對我們的應用程序造成了很大的傷害。操作getfacl輸出的最佳方法是什麼?

不過,我必須運行兩個命令來確保所有的東西都屬於某個用戶;並且所有的東西都有「g + w」。

我認爲「最有控制的」要實現這個方式:

  1. 運行getfacl的說明書和創建的當前設置
  2. 返工文件
  3. 一個「文本快照」與setfacl的應用

所以,我需要處理一個這樣的文件:

# 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 

但其餘掙扎)

+0

你能更具體嗎?例如,你是否總是需要將'? - ?'轉換爲'?w?'? – GMichael

+0

查看我的更新。 – GhostCat

+0

'group ::? - ?'不是以'#'開始的? – Inian

回答

3

您可以使用sed類似於下面的例子:

echo 'group::?-?' | sed 's/\(^group::.\).\(.\)/\1w\2/' # gives group::?w? 

echo '#group:root' | sed 's/\(^#group:\).*/\1whatever/' # gives #group:whatever 
3

我已經把一個不太直接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。請注意,當group::xxx中的xxx部分包含3個以上的字符時,這將不起作用。
相關問題