Python 查看文件的讀寫(xiě)權(quán)限方法
實(shí)例如下:
# -*- 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) 這個(gè)方法應(yīng)該很簡(jiǎn)單,只需要2個(gè)參數(shù),一個(gè)是路徑,一個(gè)是說(shuō)明路徑的模式,下面列出了這個(gè)用法中可以使用的一些常用的模式:
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. 對(duì)于擁有者讀的權(quán)限
stat.S_IWRITE: Write by owner. 對(duì)于擁有者寫(xiě)的權(quán)限
stat.S_IEXEC: Execute by owner. 對(duì)于擁有者執(zhí)行的權(quán)限
stat.S_IRWXU: Read, write, and execute by owner. 對(duì)于擁有者讀寫(xiě)執(zhí)行的權(quán)限
stat.S_IRUSR: Read by owner. 對(duì)于擁有者讀的權(quán)限
stat.S_IWUSR: Write by owner. 對(duì)于擁有者寫(xiě)的權(quán)限
stat.S_IXUSR: Execute by owner. 對(duì)于擁有者執(zhí)行的權(quán)限
stat.S_IRWXG: Read, write, and execute by group. 對(duì)于同組的人讀寫(xiě)執(zhí)行的權(quán)限
stat.S_IRGRP: Read by group. 對(duì)于同組讀的權(quán)限
stat.S_IWGRP: Write by group. 對(duì)于同組寫(xiě)的權(quán)限
stat.S_IXGRP: Execute by group. 對(duì)于同組執(zhí)行的權(quán)限
stat.S_IRWXO: Read, write, and execute by others. 對(duì)于其他組讀寫(xiě)執(zhí)行的權(quán)限
stat.S_IROTH: Read by others. 對(duì)于其他組讀的權(quán)限
stat.S_IWOTH: Write by others. 對(duì)于其他組寫(xiě)的權(quán)限
stat.S_IXOTH: Execute by others. 對(duì)于其他組執(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 查看文件的讀寫(xiě)權(quán)限方法就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
使用Python寫(xiě)一個(gè)量化股票提醒系統(tǒng)
這篇文章主要介紹了小白用Python寫(xiě)了一個(gè)股票提醒系統(tǒng),迷你版量化系統(tǒng),完美的實(shí)現(xiàn)了實(shí)時(shí)提醒功能,代碼簡(jiǎn)單易懂,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-08-08
PyCharm中New Directory 和 New Python
python package這是一個(gè)特殊的目錄,因?yàn)樵趧?chuàng)建該python package的時(shí)候,系統(tǒng)會(huì)自動(dòng)地生成一個(gè)py文件, init.py,這篇文章主要介紹了PyCharm中New Directory 和 New Python Package的區(qū)別,需要的朋友可以參考下2023-12-12
Python編程實(shí)現(xiàn)及時(shí)獲取新郵件的方法示例
這篇文章主要介紹了Python編程實(shí)現(xiàn)及時(shí)獲取新郵件的方法,涉及Python實(shí)時(shí)查詢(xún)郵箱及郵件獲取相關(guān)操作技巧,需要的朋友可以參考下2017-08-08
python實(shí)現(xiàn)MySQL指定表增量同步數(shù)據(jù)到clickhouse的腳本
這篇文章主要介紹了python實(shí)現(xiàn)MySQL指定表增量同步數(shù)據(jù)到clickhouse的腳本,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-02-02
pycharm創(chuàng)建scrapy項(xiàng)目教程及遇到的坑解析
這篇文章主要介紹了pycharm創(chuàng)建scrapy項(xiàng)目教程及遇到的坑解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-08-08
python語(yǔ)言實(shí)現(xiàn)貪吃蛇游戲
這篇文章主要為大家詳細(xì)介紹了python語(yǔ)言實(shí)現(xiàn)貪吃蛇游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-11-11

