这里有个简单的需求,需要用shell脚本实现:
检查/data/wwwroot/app目录下所有文件和目录,看是否满足下面条件:
1)所有文件权限为644
2)所有目录权限为755
3)文件和目录所有者为www,所属组为root
如果不满足,改成符合要求,注意,不要直接改权限,一定要有判断的过程。
这个需求并不算难,同样核心命令也是find,关键点在于如何判断。也许你想find出来之后直接修改权限或者修改所有者和所属组,但这是不符合要求的,因为你没有加判断。
先来看find的一个用法:
find /dir -type f -perm 644
这样可以找到权限为644的文件,但需求中要求的是不为644的,那该怎么做呢?
这样做即可:
find /dir -type f ! -perm 644
也就是加一个! 就达到目的了,也可以这样:
find /dir -type f -not -perm 644
同理,目录权限不是755,可以这样找:
find /dir -type d -not -perm 755
find也可以找所属组和所有者:
find /dir -group root find /dir -user root
除了使用find外,我们也可以使用stat命令来获取文件或者目录的权限、属主、属组,stat这样用:
查看文件权限:stat -c %a 1.txt 查看文件所属组:stat -c %G 1.txt 查看文件所有者:stat -c %U 1.txt
获取到权限后,再去做比对
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 {} ;
两个脚本相比,第一个只需要find一次,而第二个需要find四次,如果文件量很大,执行效率很差。
原作者:刘清
-
检测器
+关注
关注
1文章
865浏览量
47704 -
Shell
+关注
关注
1文章
366浏览量
23400 -
root
+关注
关注
1文章
86浏览量
21399
原文标题:我想要个文件权限检测器
文章出处:【微信号:aming_linux,微信公众号:阿铭linux】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
评论