您好,登錄后才能下訂單哦!
實例如下:
# -*- 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) 這個方法應(yīng)該很簡單,只需要2個參數(shù),一個是路徑,一個是說明路徑的模式,下面列出了這個用法中可以使用的一些常用的模式:
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. 在執(zhí)行之后保存文字和圖片
stat.S_IREAD: Read by owner. 對于擁有者讀的權(quán)限
stat.S_IWRITE: Write by owner. 對于擁有者寫的權(quán)限
stat.S_IEXEC: Execute by owner. 對于擁有者執(zhí)行的權(quán)限
stat.S_IRWXU: Read, write, and execute by owner. 對于擁有者讀寫執(zhí)行的權(quán)限
stat.S_IRUSR: Read by owner. 對于擁有者讀的權(quán)限
stat.S_IWUSR: Write by owner. 對于擁有者寫的權(quán)限
stat.S_IXUSR: Execute by owner. 對于擁有者執(zhí)行的權(quán)限
stat.S_IRWXG: Read, write, and execute by group. 對于同組的人讀寫執(zhí)行的權(quán)限
stat.S_IRGRP: Read by group. 對于同組讀的權(quán)限
stat.S_IWGRP: Write by group. 對于同組寫的權(quán)限
stat.S_IXGRP: Execute by group. 對于同組執(zhí)行的權(quán)限
stat.S_IRWXO: Read, write, and execute by others. 對于其他組讀寫執(zhí)行的權(quán)限
stat.S_IROTH: Read by others. 對于其他組讀的權(quán)限
stat.S_IWOTH: Write by others. 對于其他組寫的權(quán)限
stat.S_IXOTH: Execute by others. 對于其他組執(zhí)行的權(quán)限
>>> 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 查看文件的讀寫權(quán)限方法就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持億速云。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。