Skip to main content
 首页 » 编程设计

python tarinfo 权限位

2025年05月04日17JeffreyZhao

我正在使用 tarfile 模块来检查我的 tar.gz 文件中包的权限。 我的问题有两个方面。

权限位值与从ls -l 命令得到的值不同。来自 list 命令,值为 755。但是我的程序中得到了 488。我使用以下命令功能 -


def checkAndExtratZipFile (value,packageElementInfoList): 
    try: 
        tar = tarfile.open(value,"r:gz") 
        for tarinfo in tar: 
            global elementType 
 
            # Populate all information about the element 
            name  = tarinfo.name 
            size  = tarinfo.size 
            perm  = tarinfo.mode 
            if tarinfo.isdir(): 
                eleType = elementType.Directory 
            elif tarinfo.issym(): 
                eleType = elementType.SymbolicLink 
            else: 
                eleType = elementType.File 
 
            # Populate into list         
            packageElementInfoList.append(packageElementInfo(name,eleType,perm,size))                    
 
        tar.close() 
    except:  
        print "Verification of package %s failed.\n Reason : Not able to read contents in the tar package." % value 
        sys.exit(1) 

我的系统(在 SUSE Linux 上工作)将有要验证的包,这些包是由 SUSE/AIX 和 HP 平台创建的。所以我需要在 Linux Server 上验证基于 AIX/HP/Linux 平台构建的包。 Linux上的AIX/HP包的权限位很奇怪。一个755权限位被给定为33256。

感谢任何帮助。

请您参考如下方法:

您看到的是以 10 为基数的八进制数表示形式:

>>> oct(488) 
'0750' 

您需要使用 stat 模块上的属性检查标志:

>>> tarinfo.mode 
488 
>>> tarinfo.mode & stat.S_IXGRP != 0 
True 
>>> tarinfo.mode & stat.S_IXOTH != 0 
False