【shell脚本编程】-5 批量检查文件权限

1、脚本要求

  • 检查/data/wwwroot/app 目录下所有的文件和目录,看是否满足下面条件
  • 所有文件的权限是644
  • 所有目录的权限是755
  • 文件和目录所有者为www ,所属组是root
  • 如果不满足,改成符合要求的

2、脚本编写

#!/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

3、脚本解释

#!/bin/bash
# 声明脚本使用bash解释器执行

# 切换到目标应用目录,后续操作将在该目录下进行
cd /data/wwwroot/app

# 遍历当前目录(/data/wwwroot/app)及其所有子目录中的文件和目录
# find . 用于查找当前目录下的所有项目(包括文件、子目录、递归子目录内容)
for f in `find .`
do
        # 获取当前文件/目录的权限(数字形式,如755、644)
        f_p=`stat -c %a $f`
        # 获取当前文件/目录的所有者用户名
        f_u=`stat -c %U $f`
        # 获取当前文件/目录的所属组名
        f_g=`stat -c %G $f`

        # 判断当前项目是否为目录(-d 是目录判断条件)
        if [ -d $f  ]
        then
                # 若为目录且当前权限不是755,则将权限修改为755
                # 755权限:所有者可读可写可执行(rwx),组用户和其他用户可读可执行(r-x)
                [ $f_p != '755' ] && chmod 755 $f
        else
                # 若为文件且当前权限不是644,则将权限修改为644
                # 644权限:所有者可读可写(rw-),组用户和其他用户仅可读(r--)
                [ $f_p != '644' ] && chmod 644 $f
        fi

        # 若当前所有者不是www用户,则将所有者修改为www
        # 通常Web服务进程以www用户运行,确保服务对文件有正确访问权限
        [ $f_u != 'www' ] && chown www $f
        # 若当前所属组不是root组,则将所属组修改为root
        # 保留root组归属,便于系统管理员管控
        [ $f_g  != 'root' ] && chown :root $f
done

# 脚本功能总结:统一设置/data/wwwroot/app目录下所有文件和目录的权限、所有者和所属组
# 标准化权限配置,避免因权限混乱导致的Web服务访问错误或安全风险

4、脚本核心

  • 查看文件权限:stat -c %a
  • 查看文件所属组:stat -c %G
  • 查看文件所有者:stat -c %U
  • && 可以实现:当前面命令执行成功再执行后面的命令
  • || 可以实现:当前面命令不成功再执行后面的命令
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值