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 相关文章推荐
用pywin32实现windows模拟鼠标及键盘动作
Apr 22 Python
python同时给两个收件人发送邮件的方法
Apr 30 Python
Python中pip安装非PyPI官网第三方库的方法
Jun 02 Python
将Python代码嵌入C++程序进行编写的实例
Jul 31 Python
利用Python自动监控网站并发送邮件告警的方法
Aug 24 Python
Python中使用asyncio 封装文件读写
Sep 11 Python
使用OpenCV获取图像某点的颜色值,并设置某点的颜色
Jun 02 Python
python + selenium 刷B站播放量的实例代码
Jun 12 Python
keras实现VGG16方式(预测一张图片)
Jul 07 Python
PyCharm2020.1.2社区版安装,配置及使用教程详解(Windows)
Aug 07 Python
python 读取串口数据的示例
Nov 09 Python
python中子类与父类的关系基础知识点
Feb 02 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
FleaPHP的安全设置方法
2008/09/15 PHP
ezSQL PHP数据库操作类库
2010/05/16 PHP
PHP中获取内网用户MAC地址(WINDOWS/linux)的实现代码
2011/08/11 PHP
一个简单的php路由类
2016/05/29 PHP
Laravel中Facade的加载过程与原理详解
2017/09/22 PHP
namespace.js Javascript的命名空间库
2011/10/11 Javascript
web开发人员学习jQuery的6大理由及jQuery的优势介绍
2013/01/03 Javascript
jquery DIV撑大让滚动条滚到最底部代码
2013/06/06 Javascript
防止按钮在短时间内被多次点击的方法
2014/03/10 Javascript
JS实现的简单鼠标跟随DiV层效果完整实例
2015/10/31 Javascript
jQuery鼠标悬浮链接弹出跟随图片实例代码
2016/01/08 Javascript
Javascript 事件冒泡机制详细介绍
2016/10/10 Javascript
简单谈谈关于 npm 5.0 的新坑
2017/06/08 Javascript
JavaScript之DOM插入更新删除_动力节点Java学院整理
2017/07/03 Javascript
Vue中使用sass实现换肤功能
2018/09/07 Javascript
vue vue-Router默认hash模式修改为history需要做的修改详解
2018/09/13 Javascript
微信小程序表单验证WxValidate的使用
2019/11/27 Javascript
antd 表格列宽自适应方法以及错误处理操作
2020/10/27 Javascript
Linux下用Python脚本监控目录变化代码分享
2015/05/21 Python
使用Python对MySQL数据操作
2017/04/06 Python
详解Django-restframework 之频率源码分析
2019/02/27 Python
选择python进行数据分析的理由和优势
2019/06/25 Python
Python中Unittest框架的具体使用
2019/08/27 Python
浅谈PyQt5中异步刷新UI和Python多线程总结
2019/12/13 Python
python seaborn heatmap可视化相关性矩阵实例
2020/06/03 Python
python实现学生管理系统开发
2020/07/24 Python
CSS3关于z-index不生效问题的解决
2020/02/19 HTML / CSS
Html5 webview元素定位工具的实现
2020/08/07 HTML / CSS
机电工程专业应届生求职信
2013/10/03 职场文书
九月份红领巾广播稿
2014/01/22 职场文书
外国人聘用意向书
2014/04/01 职场文书
安全责任书范本
2014/04/15 职场文书
《画家乡》教学反思
2014/04/22 职场文书
初中开学典礼新闻稿
2015/07/17 职场文书
Python异常类型以及处理方法汇总
2021/06/05 Python
Rust中的Struct使用示例详解
2022/08/14 Javascript