Python 查看文件的读写权限方法
实例如下:
#-*-coding:utf-8-*-
#@authorflynetcn
importsys,os,pwd,stat,datetime;
LOG_FILE='/var/log/checkDirPermission.log';
nginxWritableDirs=[
'/var/log/nginx',
'/usr/local/www/var',
];
otherReadableDirs=[
'/var/log/nginx',
'/usr/local/www/var/log',
];
dirs=[];
files=[];
deflogger(level,str):
logFd=open(LOG_FILE,'a');
logFd.write(datetime.datetime.now().strftime('%Y-%m-%d%H:%M:%S.%f')+":"+("WARNING"iflevelelse"NOTICE")+str);
logFd.close();
defwalktree(top,callback):
forfinos.listdir(top):
pathname=os.path.join(top,f);
mode=os.stat(pathname).st_mode;
ifstat.S_ISDIR(mode):
callback(pathname,True);
walktree(pathname,callback);
elifstat.S_ISREG(mode):
callback(pathname,False);
else:
logger(1,"walktreeskipping%s\n"%(pathname));
defcollectPath(path,isDir=False):
ifisDir:
dirs.append(path);
else:
files.append(path);
defcheckNginxWritableDirs(paths):
uid=pwd.getpwnam('nginx').pw_uid;
gid=pwd.getpwnam('nginx').pw_gid;
fordinpaths:
dstat=os.stat(d);
ifdstat.st_uid!=uid:
try:
os.chown(d,uid,gid);
except:
logger(1,"chown(%s,nginx,nginx)failed\n"%(d));
defcheckOtherReadableDirs(paths,isDir=False):
fordinpaths:
dstat=os.stat(d);
ifisDir:
checkMode=5;
willBeMode=dstat.st_mode|stat.S_IROTH|stat.S_IXOTH;
else:
checkMode=4;
willBeMode=dstat.st_mode|stat.S_IROTH;
ifint(oct(dstat.st_mode)[-1:])&checkMode!=checkMode:
try:
os.chmod(d,willBeMode);
except:
logger(1,"chmod(%s,%d)failed\n"%(d,oct(willBeMode)));
if__name__=="__main__":
fordinnginxWritableDirs:
walktree(d,collectPath)
dirs=dirs+files;
checkNginxWritableDirs(dirs);
dirs=[];
files=[];
fordinotherReadableDirs:
walktree(d,collectPath)
checkOtherReadableDirs(dirs,True);
checkOtherReadableDirs(files,False);
os.chmod(path,mode)这个方法应该很简单,只需要2个参数,一个是路径,一个是说明路径的模式,下面列出了这个用法中可以使用的一些常用的模式:
stat.S_ISUID:SetuserIDonexecution.不常用
stat.S_ISGID:SetgroupIDonexecution.不常用
stat.S_ENFMT:Recordlockingenforced.不常用
stat.S_ISVTX:Savetextimageafterexecution.在执行之后保存文字和图片
stat.S_IREAD:Readbyowner.对于拥有者读的权限
stat.S_IWRITE:Writebyowner.对于拥有者写的权限
stat.S_IEXEC:Executebyowner.对于拥有者执行的权限
stat.S_IRWXU:Read,write,andexecutebyowner.对于拥有者读写执行的权限
stat.S_IRUSR:Readbyowner.对于拥有者读的权限
stat.S_IWUSR:Writebyowner.对于拥有者写的权限
stat.S_IXUSR:Executebyowner.对于拥有者执行的权限
stat.S_IRWXG:Read,write,andexecutebygroup.对于同组的人读写执行的权限
stat.S_IRGRP:Readbygroup.对于同组读的权限
stat.S_IWGRP:Writebygroup.对于同组写的权限
stat.S_IXGRP:Executebygroup.对于同组执行的权限
stat.S_IRWXO:Read,write,andexecutebyothers.对于其他组读写执行的权限
stat.S_IROTH:Readbyothers.对于其他组读的权限
stat.S_IWOTH:Writebyothers.对于其他组写的权限
stat.S_IXOTH:Executebyothers.对于其他组执行的权限
>>>os.stat('test')
posix.stat_result(st_mode=33204,st_ino=93328670,st_dev=18L,st_nlink=1,st_uid=30448,st_gid=1000,st_size=0,st_atime=1445932321,st_mtime=1445932321,st_ctime=1445932321)
>>>os.stat('test').st_mode
33204
>>>oct(os.stat('test').st_mode)
'0100664'
>>>oct(os.stat('test').st_mode)[-3:]
'664'
以上这篇Python查看文件的读写权限方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。