文件权限对比,使用shell导根目录下的所有文件信息,python对比差异

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/weixin_35933684/article/details/99827993

在项目中遇到了一个问题,单板线刷升级与OTA全量升级后,部分文件存在权限差异问题,为了找到所有目录下文件的差异,考虑使用shell脚本与python脚本来统计及对比差异,由于单板不支持运行python,所以使用了shell导出,也查阅了一些资料,简单加工就可用了,这里也跳过了/proc目录,不然就无限递归下去了,,,到出信息后再使用python进行差异对比,输出权限及所有组不同的文件,一目了然,之前自己可能想的是打开每目录肉眼去对比,这个方式实在太low,实在浪费时间,所以就想到了python,这里写发可能还是比较low,希望大牛多多指点。。

废话少说,直接贴上实现过程,这种方式只限于ls -la后的文件信息,有其他需要的可以自己加工处理

shell导出根目录信息

#!/bin/bash
function getdir(){
    for element in `ls $1`
    do  
    if [ "$1" = / ];
    then
        dir_or_file="/"$element	
    else
        dir_or_file=$1"/"$element
    fi
        if [ -d $dir_or_file ];
            then
        if [ /proc = "$dir_or_file" -o /sys = "$dir_or_file" -o /media = "$dir_or_file" ];
            then
        continue
            else
                getdir $dir_or_file
            fi
            else
                echo `ls -la $dir_or_file`
            fi  
    done
}
root_dir="/"
getdir $root_dir

导出样例:

-rwxr-xr-x 1 root root 14 Aug 14 04:23 /usr/lib/busybox/bin/[
-rwxr-xr-x 1 root root 14 Aug 14 04:23 /usr/lib/busybox/bin/[[
-rwxr-xr-x 1 root root 14 Aug 14 04:23 /usr/lib/busybox/bin/ar
-rwxr-xr-x 1 root root 14 Aug 14 04:23 /usr/lib/busybox/bin/ash
-rwxr-xr-x 1 root root 14 Aug 14 04:23 /usr/lib/busybox/bin/awk
-rwxr-xr-x 1 root root 14 Aug 14 04:23 /usr/lib/busybox/bin/base64
-rwxr-xr-x 1 root root 14 Aug 14 04:23 /usr/lib/busybox/bin/basename
-rwxr-xr-x 1 root root 14 Aug 14 04:23 /usr/lib/busybox/bin/beep
-rwxr-xr-x 1 root root 14 Aug 14 04:23 /usr/lib/busybox/bin/bunzip2
-rwxr-xr-x 1 root root 14 Aug 14 04:23 /usr/lib/busybox/bin/bzcat
-rwxr-xr-x 1 root root 14 Aug 14 04:23 /usr/lib/busybox/bin/bzip2
-rwxr-xr-x 1 root root 14 Aug 14 04:23 /usr/lib/busybox/bin/cal
-rwxr-xr-x 1 root root 14 Aug 14 04:23 /usr/lib/busybox/bin/cat
-rwxr-xr-x 1 root root 14 Aug 14 04:23 /usr/lib/busybox/bin/catv
-rwxr-xr-x 1 root root 14 Aug 14 04:23 /usr/lib/busybox/bin/chattr
-rwxr-xr-x 1 root root 14 Aug 14 04:23 /usr/lib/busybox/bin/chgrp
-rwxr-xr-x 1 root root 14 Aug 14 04:23 /usr/lib/busybox/bin/chmod
-rwxr-xr-x 1 root root 14 Aug 14 04:23 /usr/lib/busybox/bin/chown
-rwxr-xr-x 1 root root 14 Aug 14 04:23 /usr/lib/busybox/bin/chpst
-rwxr-xr-x 1 root root 14 Aug 14 04:23 /usr/lib/busybox/bin/chrt

python对两个文件做对比

#!/usr/bin/env python

from sys import argv
update_fd = open(argv[2], 'r')

permissions_count = 0
groups_count = 0

for normal_line in open(argv[1]):
    normal_filename = []
    normal_filename = normal_line.split("/", 1)
    normal_permissions = normal_line[:10]
    normal_groups = normal_line[13:22]
    update_fd.seek(0)
    for update_line in update_fd.readlines():
        update_line = update_line.strip()
        update_filename = update_line.split("/", 1)
        update_permissions = update_line[:10]
        update_groups = update_line[13:22]
        if normal_filename[1].strip() ==  update_filename[1].strip():
            if "firmware/image" in normal_line:
                break
            if normal_permissions != update_permissions:
                print "permissions diff"
                print "normal : " + normal_line.strip()
                print "update : " + update_line
                permissions_count += 1
            if normal_groups != update_groups:
                if "firmware/image" in normal_line:
                    break
                print "groups diff"
                print "normal : " + normal_line.strip()
                print "update : " + update_line
                groups_count += 1
            break
print ("permissions diff is ", permissions_count)
print ("groups diff is ", groups_count)

之后就可以看到不同了

或许大牛们会有更好更快速的方法,可以评论指点下,我也学习下,谢谢!!!

猜你喜欢

转载自blog.csdn.net/weixin_35933684/article/details/99827993
今日推荐