這里有個(gè)簡單的需求,需要用shell腳本實(shí)現(xiàn):
檢查/data/wwwroot/app目錄下所有文件和目錄,看是否滿足下面條件:
1)所有文件權(quán)限為644
2)所有目錄權(quán)限為755
3)文件和目錄所有者為www,所屬組為root
如果不滿足,改成符合要求,注意,不要直接改權(quán)限,一定要有判斷的過程。
這個(gè)需求并不算難,同樣核心命令也是find,關(guān)鍵點(diǎn)在于如何判斷。也許你想find出來之后直接修改權(quán)限或者修改所有者和所屬組,但這是不符合要求的,因?yàn)槟銢]有加判斷。
先來看find的一個(gè)用法:
find /dir -type f -perm 644
這樣可以找到權(quán)限為644的文件,但需求中要求的是不為644的,那該怎么做呢?
這樣做即可:
find /dir -type f ! -perm 644
也就是加一個(gè)! 就達(dá)到目的了,也可以這樣:
find /dir -type f -not -perm 644
同理,目錄權(quán)限不是755,可以這樣找:
find /dir -type d -not -perm 755
find也可以找所屬組和所有者:
find /dir -group root find /dir -user root
除了使用find外,我們也可以使用stat命令來獲取文件或者目錄的權(quán)限、屬主、屬組,stat這樣用:
查看文件權(quán)限:stat -c %a 1.txt 查看文件所屬組:stat -c %G 1.txt 查看文件所有者:stat -c %U 1.txt
獲取到權(quán)限后,再去做比對
p=`stat -c %a 1.txt` if [ $p != '644' ] then chmod 644 1.txt fi
最終腳本如下:
#!/bin/bash cd /data/wwwroot/app for f in `find .` do f_p=`stat-c%a$f` f_u=`stat -c %U $f` f_g=`stat -c %G $f` if [ -d $f ] then [ $f_p != '755' ] && chmod 755 $f else [ $f_p != '644' ] && chmod 644 $f fi [ $f_u != 'www' ] && chown www $f [ $f_g != 'root' ] && chown :root $f done
或者:
#!/bin/bash find /data/wwwroot/app/ -type d ! -prem 755 -exec chmod 755 {} ; find /data/wwwroot/app/ ! -type d ! -prem 644 -exec chmod 644 {} ; find /data/wwwroot/app/ ! -user www -exec chown www {} ; find /data/wwwroot/app/ ! -group root -exec chgrp root {} ;
兩個(gè)腳本相比,第一個(gè)只需要find一次,而第二個(gè)需要find四次,如果文件量很大,執(zhí)行效率很差。
原作者:劉清
-
檢測器
+關(guān)注
關(guān)注
1文章
857瀏覽量
47630 -
Shell
+關(guān)注
關(guān)注
1文章
363瀏覽量
23262 -
root
+關(guān)注
關(guān)注
1文章
85瀏覽量
21363
原文標(biāo)題:我想要個(gè)文件權(quán)限檢測器
文章出處:【微信號:aming_linux,微信公眾號:阿銘linux】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論