avatar

黄金月河3.1

浴火重生

  • 首页
  • Linux基础
  • 运维
  • Github
  • Python
  • 网络安全
  • 软路由
  • 时光手札
  • 关于
Home 将多个目录的权限信息统计并进行比对的Shell脚本
文章

将多个目录的权限信息统计并进行比对的Shell脚本

Posted 2025-02-19 Updated 2025-02- 19
By 奈幽
15~19 min read

将多个目录的权限信息统计并进行比对的Shell脚本

1、功能说明

该脚本主要提供目录权限信息收集与对比功能,支持处理百万级文件目录的统计分析,分为两个核心模块:

  1. 权限信息收集 (collect):收集指定路径的信息(绝对路径、权限码、属主、属组)自动生成日志(``diff_.log`)
  2. 智能日志对比 (compare):对比脚本收集信息生成的日志中,相同路径的权限差异

2、使用示例

  • CentOS 7+
  • Ubuntu 18.04+
# 收集数据
./script.sh collect /path/to/directory

# 对比日志
./script.sh compare diff_host1.log diff_host2.log diff_host3.log

3、脚本内容:

#!/bin/bash

# 功能1:收集目录权限信息
function collect_info() {
    target_dir="$1"
    [ ! -d "$target_dir" ] && echo "目录不存在" && exit 1

    host=$(hostname)
    base_name="diff_${host}"
    suffix=".log"
    counter=1
    logfile="${base_name}${suffix}"

    while [ -f "$logfile" ]; do
        logfile="${base_name}_${counter}${suffix}"
        ((counter++))
    done

    find "$(realpath "$target_dir")" -exec stat -c "+-%n %a %U %G" {} \; 2>/dev/null | 
        sed 's/\/\//\//g' > "$logfile"
    echo "日志已生成:$logfile"
}

# 功能2:对比日志差异(优化版)
function compare_logs() {
    shift
    log_files=("$@")
    [ ${#log_files[@]} -lt 2 ] && echo "需要至少2个日志文件" && exit 1

    diff_detected=0
    diff_log="diff_result_$(date +%Y%m%d%H%M%S).log"

    awk '
    BEGIN { all_same = 1 }
    {
        path=$2
        gsub(/^+-/, "", path)
        key=path
        if (!(key in data)) {
            data[key]["count"] = 0
        }
        data[key]["count"]++
        data[key][data[key]["count"]] = $3 OFS $4 OFS $5
        files[data[key]["count"]] = FILENAME
    }
    END {
        for (path in data) {
            if (data[path]["count"] == 1) {
                all_same = 0
                exit
            }
            for (i=2; i<=data[path]["count"]; i++) {
                if (data[path][i] != data[path][1]) {
                    all_same = 0
                    exit
                }
            }
        }
        if (all_same == 1) {
            exit 0
        }
        
        print "差异路径 | 权限 | 属主 | 属组 | 来源文件" > "'"$diff_log"'"
        for (path in data) {
            if (data[path]["count"] == 1) {
                printf "%s | %s | (仅存在于 %s)\n", 
                    path, data[path][1], files[1] >> "'"$diff_log"'"
                continue
            }
            
            is_diff = 0
            for (i=2; i<=data[path]["count"]; i++) {
                if (data[path][i] != data[path][1]) {
                    is_diff = 1
                    break
                }
            }
            
            if (is_diff) {
                for (i=1; i<=data[path]["count"]; i++) {
                    printf "%s | %s | %s\n", 
                        path, data[path][i], files[i] >> "'"$diff_log"'"
                }
                print "------" >> "'"$diff_log"'"
            }
        }
    }' "${log_files[@]}"

    if [ $? -eq 0 ]; then
        echo "差异分析完成:所有路径权限属性完全相同"
        rm -f "$diff_log" 2>/dev/null
    else
        echo "差异分析完成:结果见:$diff_log"
    fi
}

# 主逻辑
case $1 in
    collect)
        collect_info "$2"
        ;;
    compare)
        compare_logs "$@"
        ;;
    *)
        echo "用法:"
        echo "  收集模式:$0 collect <目录路径>"
        echo "  对比模式:$0 compare <日志文件1> <日志文件2> [...]"
        exit 1
        ;;
esac


运维, Linux基础
shell bash
License:  CC BY 4.0
Share

Further Reading

Apr 8, 2025

rhel9 安装docker和docker-compose

1、rhel9 安装docker 1.1、yum安装 1.1.1、添加镜像源 sudo bash -c "cat > /etc/yum.repos.d/docker-ce.repo"<< EOF [docker-ce-stable] name = docker-ce-stable baseurl

Mar 17, 2025

告别手动运维!Certimate 开源工具实现 SSL 证书全生命周期自动化

告别手动运维!Certimate 开源工具实现 SSL 证书全生命周期自动化 一、为什么需要自动化证书管理? 作为个人开发者或中小企业运维,管理多域名 SSL 证书往往陷入「申请-部署-遗忘续期」的循环。Let's Encrypt 等免费证书 90 天有效期的设定,让每季度的重复性操作成为噩梦——某

Mar 11, 2025

轻量级监控告警工具 beszel

轻量级监控告警工具 beszel 项目信息 项目地址:https://github.com/henrygd/beszel 官方文档:https://beszel.dev/zh/guide/getting-started Beszel 是一个轻量级的服务器监控平台,包含 Docker 统计信息、历史数

OLDER

PicGo建立图床

NEWER

Docker容器内进程是否有持久化目录访问权限的检测脚本

Recently Updated

  • 奈幽的渗透测试总结-红队
  • 基于Docker的虚拟 Chrome 浏览器
  • Metasploit Framework (MSF) 使用指南
  • rhel9 安装docker和docker-compose
  • 内网穿透工具:zrok

Trending Tags

Halo elasticsearch debian openwrt KeepassXC 必看精选 webdav 热门文章 docker Linux

Contents

©2025 黄金月河3.1. Some rights reserved.

Using the Halo theme Chirpy