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


Posted in Python onJanuary 23, 2018

实例如下:

# -*- 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 %s\n" % (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) failed\n" % (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) failed\n" % (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, write, 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, write, 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 相关文章推荐
在Ubuntu系统下安装使用Python的GUI工具wxPython
Feb 18 Python
python2 与python3的print区别小结
Jan 16 Python
解决Python网页爬虫之中文乱码问题
May 11 Python
对Python 窗体(tkinter)树状数据(Treeview)详解
Oct 11 Python
python读取csv和txt数据转换成向量的实例
Feb 12 Python
Laravel+Dingo/Api 自定义响应的实现
Feb 17 Python
使用coverage统计python web项目代码覆盖率的方法详解
Aug 05 Python
Django自带的加密算法及加密模块详解
Dec 03 Python
解决ROC曲线画出来只有一个点的问题
Feb 28 Python
Python使用jpype模块调用jar包过程解析
Jul 29 Python
Python 求向量的余弦值操作
Mar 04 Python
python实现局部图像放大
Nov 17 Python
Python3 中文文件读写方法
Jan 23 #Python
Python3之文件读写操作的实例讲解
Jan 23 #Python
Python实现邮件的批量发送的示例代码
Jan 23 #Python
python实现自动发送邮件发送多人、群发、多附件的示例
Jan 23 #Python
python正则表达式面试题解答
Apr 28 #Python
Django中使用celery完成异步任务的示例代码
Jan 23 #Python
python3 发送任意文件邮件的实例
Jan 23 #Python
You might like
Windows下PHP5和Apache的安装与配置
2006/09/05 PHP
php实现天干地支计算器示例
2014/03/14 PHP
php简单实现MVC
2015/02/05 PHP
php实现用于验证所有类型的信用卡类
2015/03/24 PHP
php简单获取目录列表的方法
2015/03/24 PHP
PHP XML Expat解析器知识点总结
2019/02/15 PHP
原生js实现查找/添加/删除/指定元素的class
2013/04/12 Javascript
jQuery的图片滑块焦点图插件整理推荐
2014/12/07 Javascript
javascript比较两个日期相差天数的方法
2015/07/23 Javascript
纯javascript响应式树形菜单效果
2015/11/10 Javascript
AngularJS入门教程之ng-checked 指令详解
2016/08/01 Javascript
webuploader模态框ueditor显示问题解决方法
2016/12/27 Javascript
详解基于webpack和vue.js搭建开发环境
2017/04/05 Javascript
微信小程序 新建登录页并实现tabBar隐藏
2017/06/13 Javascript
浅析Javascript中双等号(==)隐性转换机制
2017/10/27 Javascript
Vue的轮播图组件实现方法
2018/03/03 Javascript
JS实现显示当前日期的实例代码
2018/07/03 Javascript
js判断复选框是否选中的方法示例【基于jQuery】
2019/10/10 jQuery
[43:18]NB vs Infamous 2019国际邀请赛淘汰赛 败者组 BO3 第一场 8.22
2019/09/05 DOTA
Python统计列表中的重复项出现的次数的方法
2014/08/18 Python
按日期打印Python的Tornado框架中的日志的方法
2015/05/02 Python
使用rpclib进行Python网络编程时的注释问题
2015/05/06 Python
python实现简单点对点(p2p)聊天
2017/09/13 Python
Tensorflow之Saver的用法详解
2018/04/23 Python
Python3.4 splinter(模拟填写表单)使用方法
2018/10/13 Python
Python模拟登录和登录跳转的参考示例
2020/10/30 Python
python如何构建mock接口服务
2021/01/28 Python
css3制作彩色边线3d立体按钮的示例(css3按钮)
2014/05/06 HTML / CSS
中学生差生评语
2014/01/30 职场文书
化妆品店促销方案
2014/02/24 职场文书
《奇妙的国际互联网》 教学反思
2014/02/25 职场文书
菜篮子工程实施方案
2014/03/08 职场文书
经济信息系毕业生自荐信范文
2014/03/15 职场文书
岗位说明书范文
2014/05/07 职场文书
2016年社区党支部公开承诺书
2016/03/25 职场文书
面试官问我Mysql的存储引擎了解多少
2022/08/05 MySQL