标签搜索

shell脚本一天一练----修改文件和目录权限

lilymaxyz
2025-04-30 / 0 评论 / 15 阅读 / 正在检测是否收录...

shell脚本一天一练----修改文件和目录权限

[root@Rocky9-12 ~]# cat 0430-03.sh
#!/bin/bash
# *************************************
# * 功能: Shell脚本模板
# * 作者: 刘丹玉
# * 联系: v649352141@163.com
# * 版本: 2025-04-30
# *************************************

# 需求:
# 检查/data/wwwroot/app目录下所有文件和目录,看是否满足下面条件
# 1) 所有文件权限为644
# 2) 所有目录权限为755
# 3) 文件和目录所有者为www,所属组为root
# 如果不满足,改成符合要求
# 注意,不要直接改权限,一定要有判断的过程

rm -rf /data/*
mkdir -p /data/wwwroot/app
cd /data/wwwroot/app
mkdir -p a/b/c/d/e/f/g/h
touch a/a.{1..5}.txt
touch a/b/b.{1..5}.txt
touch a/b/c/c.{1..5}.txt
touch a/b/c/d/d.{1..5}.txt
touch a/b/c/d/e/e.{1..5}.txt
touch a/b/c/d/e/f/f.{1..5}.txt
touch a/b/c/d/e/f/g/g.{1..5}.txt
touch a/b/c/d/e/f/g/h/h.{1..5}.txt

# 遍历所有目录和文件,用"find ."即可
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

    ## &&用在两条命令中间,可以起到if判断的作用
    ## 当第一条命令成功,才会执行后面的命令
    [ $f_u != 'www' ] && chown www $f
    [ $f_g != 'root' ] && chown :root $f

done

<<'COMMENT'
另外也可以用find来实现
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) 查看文件权限: stat -c %a 1.txt
2) 查看文件所属组: stat -c %G 1.txt
3) 查看文件所有者: stat -c %U 1.txt
4) && 可以实现: 当前面命令执行成功再执行后面命令
5) || 可以实现: 当前面命令执行不成功再执行后面命令

COMMENT

endl

0

评论

博主关闭了所有页面的评论