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 相关文章推荐
用Python制作简单的朴素基数估计器的教程
Apr 01 Python
python向已存在的excel中新增表,不覆盖原数据的实例
May 02 Python
Python用csv写入文件_消除空余行的方法
Jul 06 Python
详解python配置虚拟环境
Apr 08 Python
Django模型修改及数据迁移实现解析
Aug 01 Python
python集合常见运算案例解析
Oct 17 Python
解决pycharm最左侧Tool Buttons显示不全的问题
Dec 17 Python
python使用ctypes调用扩展模块的实例方法
Jan 28 Python
Scrapy基于scrapy_redis实现分布式爬虫部署的示例
Sep 29 Python
mac系统下安装pycharm、永久激活、中文汉化详细教程
Nov 24 Python
教你怎么用Python实现GIF动图的提取及合成
Jun 15 Python
详解Python+OpenCV绘制灰度直方图
Mar 22 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
2020显卡排行榜天梯图 显卡天梯图2020年3月最新版
2020/04/02 数码科技
在laravel中使用Symfony的Crawler组件分析HTML
2017/06/19 PHP
Aster vs Newbee BO5 第二场2.19
2021/03/10 DOTA
jQuery下通过$.browser来判断浏览器.
2011/04/05 Javascript
JavaScript面向对象程序设计三 原型模式(上)
2011/12/21 Javascript
ajax异步刷新实现更新数据库
2012/12/03 Javascript
JavaScript实现页面实时显示当前时间的简单实例
2013/07/20 Javascript
jquery中focus()函数实现当对象获得焦点后自动把光标移到内容最后
2013/09/29 Javascript
Javascript写入txt和读取txt文件示例
2014/02/12 Javascript
jQuery取得设置清空select选择的文本与值
2014/07/08 Javascript
javascript HTML5 Canvas实现圆盘抽奖功能
2016/04/11 Javascript
基于JS实现数字+字母+中文的混合排序方法
2016/06/06 Javascript
Vue.js实例方法之生命周期详解
2017/07/03 Javascript
javascript填充默认头像方法
2018/02/22 Javascript
vue使用rem实现 移动端屏幕适配
2018/09/26 Javascript
使用vue根据状态添加列表数据和删除列表数据的实例
2018/09/29 Javascript
layui中的switch开关实现方法
2019/09/03 Javascript
Vue-drag-resize 拖拽缩放插件的使用(简单示例)
2019/12/04 Javascript
微信小程序调用wx.getImageInfo遇到的坑解决
2020/05/31 Javascript
js实现网页随机验证码
2020/10/19 Javascript
用Python制作检测Linux运行信息的工具的教程
2015/04/01 Python
python中lambda与def用法对比实例分析
2015/04/30 Python
python学习之面向对象【入门初级篇】
2017/01/21 Python
Python编程实现蚁群算法详解
2017/11/13 Python
Python+matplotlib实现计算两个信号的交叉谱密度实例
2018/01/08 Python
python实现求最长回文子串长度
2018/01/22 Python
pycharm中使用anaconda部署python环境的方法步骤
2018/12/19 Python
Python爬虫设置代理IP(图文)
2018/12/23 Python
Python爬虫简单运用爬取代理IP的实现
2020/12/01 Python
浅谈HTML5 Web Worker的使用
2018/01/05 HTML / CSS
西班牙在线光学:Visual-Click
2020/06/22 全球购物
新西兰最大的天然保健及护肤品网站:HealthPost(直邮中国)
2021/02/13 全球购物
大家检讨书5000字
2014/02/03 职场文书
会计学习心得体会
2014/09/09 职场文书
师德承诺书
2015/01/20 职场文书
vue中this.$http.post()跨域和请求参数丢失的解决
2022/04/08 Vue.js