实例如下:
# -*- 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 查看文件的读写权限方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
稳了!魔兽国服回归的3条重磅消息!官宣时间再确认!
昨天有一位朋友在大神群里分享,自己亚服账号被封号之后居然弹出了国服的封号信息对话框。
这里面让他访问的是一个国服的战网网址,com.cn和后面的zh都非常明白地表明这就是国服战网。
而他在复制这个网址并且进行登录之后,确实是网易的网址,也就是我们熟悉的停服之后国服发布的暴雪游戏产品运营到期开放退款的说明。这是一件比较奇怪的事情,因为以前都没有出现这样的情况,现在突然提示跳转到国服战网的网址,是不是说明了简体中文客户端已经开始进行更新了呢?
更新日志
- 【原神】V5.0攻略 | 林尼攻略一图流
- 李翊君.1993-相思的烈酒【上华】【WAV+CUE】
- 古巨基.1998-LEO.KU(国)【千禧年代】【WAV+CUE】
- 郭子.2001-原来你什么都不想要创作集丫滚石】【WAV+CUE】
- 《使命召唤:黑色行动6》新预告公布!10月25日发售
- Atlus《暗喻幻想》媒体评分汇总:高分好评如潮!
- 2024金摇杆奖提名揭晓 《黑神话》角逐最佳视觉设计!
- 群星《新说唱2024 第3期 (上)》[320K/MP3][32.76MB]
- 群星《新说唱2024 第3期 (上)》[FLAC/分轨][95.38MB]
- 群星《新说唱2024 第3期 (下)》[320K/MP3][31.36MB]
- 幻兽帕鲁手游什么时候正式上线 最新消息一览
- 西普大陆BOSS位置盘点 解锁天启纪元玩法
- 西普大陆精灵进阶培养攻略 精灵养成指南
- dnf手游法控法系职业哪个强 dnf手游法控法系职业强度排行
- 魔兽世界血藤护目镜图纸在哪买 wlk血藤护目镜图纸购买位置介绍