加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

Python 查看文件的读写权限方法

发布时间:2020-12-17 07:30:55 所属栏目:Python 来源:网络整理
导读:实例如下: # -*- coding: utf-8 -*-# @author flynetcnimport sys,os,pwd,stat,datetime;LOG_FILE = '/var/log/checkDirPermission.log';nginxWritableDirs = ['/var/log/nginx','/usr/local/www/var',];otherReadableDirs = ['/var/log/nginx','/usr/local

实例如下:

# -*- coding: utf-8 -*-
# @author flynetcn
import sys,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 = [];
def logger(level,str):
	logFd = open(LOG_FILE,'a');
	logFd.write(datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S.%f')+": "+("WARNING " if level else "NOTICE ")+str);
	logFd.close();
def walktree(top,callback):
	for f in os.listdir(top):
		pathname = os.path.join(top,f);
		mode = os.stat(pathname).st_mode;
		if stat.S_ISDIR(mode):
			callback(pathname,True);
			walktree(pathname,callback);
		elif stat.S_ISREG(mode):
			callback(pathname,False);
		else:
			logger(1,"walktree skipping %sn" % (pathname));
def collectPath(path,isDir=False):
	if isDir:
		dirs.append(path);
	else:
		files.append(path);
	
def checkNginxWritableDirs(paths):
	uid = pwd.getpwnam('nginx').pw_uid;
	gid = pwd.getpwnam('nginx').pw_gid;
	for d in paths:
		dstat = os.stat(d);
		if dstat.st_uid != uid:
			try:
				os.chown(d,uid,gid);
			except:
				logger(1,"chown(%s,nginx,nginx) failedn" % (d));
def checkOtherReadableDirs(paths,isDir=False):
	for d in paths:
		dstat = os.stat(d);
		if isDir:
			checkMode = 5;
			willBeMode = dstat.st_mode | stat.S_IROTH | stat.S_IXOTH;
		else:
			checkMode = 4;
			willBeMode = dstat.st_mode | stat.S_IROTH;
		if int(oct(dstat.st_mode)[-1:]) & checkMode != checkMode:
			try:
					os.chmod(d,willBeMode);
			except:
				logger(1,"chmod(%s,%d) failedn" % (d,oct(willBeMode)));
if __name__ == "__main__":
	for d in nginxWritableDirs:
		walktree(d,collectPath)
	dirs = dirs + files;
	checkNginxWritableDirs(dirs);
	dirs = [];
	files = [];
	for d in otherReadableDirs:
		walktree(d,collectPath)
	checkOtherReadableDirs(dirs,True);
	checkOtherReadableDirs(files,False);

os.chmod(path,mode) 这个方法应该很简单,只需要2个参数,一个是路径,一个是说明路径的模式,下面列出了这个用法中可以使用的一些常用的模式:

stat.S_ISUID: Set user ID on execution. 不常用

stat.S_ISGID: Set group ID on execution. 不常用

stat.S_ENFMT: Record locking enforced. 不常用

stat.S_ISVTX: Save text image after execution. 在执行之后保存文字和图片

stat.S_IREAD: Read by owner. 对于拥有者读的权限

stat.S_IWRITE: Write by owner. 对于拥有者写的权限

stat.S_IEXEC: Execute by owner. 对于拥有者执行的权限

stat.S_IRWXU: Read,write,and execute by owner. 对于拥有者读写执行的权限

stat.S_IRUSR: Read by owner. 对于拥有者读的权限

stat.S_IWUSR: Write by owner. 对于拥有者写的权限

stat.S_IXUSR: Execute by owner. 对于拥有者执行的权限

stat.S_IRWXG: Read,and execute by group. 对于同组的人读写执行的权限

stat.S_IRGRP: Read by group. 对于同组读的权限

stat.S_IWGRP: Write by group. 对于同组写的权限

stat.S_IXGRP: Execute by group. 对于同组执行的权限

stat.S_IRWXO: Read,and execute by others. 对于其他组读写执行的权限

stat.S_IROTH: Read by others. 对于其他组读的权限

stat.S_IWOTH: Write by others. 对于其他组写的权限

stat.S_IXOTH: Execute by others. 对于其他组执行的权限

>>> 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 查看文件的读写权限方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持编程小技巧。

您可能感兴趣的文章:

  • Python判断某个用户对某个文件的权限
  • 浅谈python对象数据的读写权限

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读