欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python檢查目錄文件權限并修改目錄文件權限的操作

 更新時間:2020年03月11日 09:03:33   作者:flynetcn  
這篇文章主要介紹了python檢查目錄文件權限并修改目錄文件權限的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

我就廢話不多說了,還是直接看代碼吧!

# -*- 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);

補充知識:Python中獲取某個用戶對某個文件或目錄的訪問權限

在Python中我們通??梢允褂胦s.access()函數來獲取當前用戶對某個文件或目錄是否有某種權限,但是要獲取某個用戶對某個文件或目錄是否有某種權限python中沒有很好的方法直接獲取,因此我寫了個函數使用stat和pwd模塊來實現這一功能。

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import os
import pwd
import stat

def is_readable(path, user):
  user_info = pwd.getpwnam(user)
  uid = user_info.pw_uid
  gid = user_info.pw_gid
  s = os.stat(path)
  mode = s[stat.ST_MODE]
  return (
    ((s[stat.ST_UID] == uid) and (mode & stat.S_IRUSR > 0)) or
    ((s[stat.ST_GID] == gid) and (mode & stat.S_IRGRP > 0)) or
    (mode & stat.S_IROTH > 0)
   )

def is_writable(path, user):
  user_info = pwd.getpwnam(user)
  uid = user_info.pw_uid
  gid = user_info.pw_gid
  s = os.stat(path)
  mode = s[stat.ST_MODE]
  return (
    ((s[stat.ST_UID] == uid) and (mode & stat.S_IWUSR > 0)) or
    ((s[stat.ST_GID] == gid) and (mode & stat.S_IWGRP > 0)) or
    (mode & stat.S_IWOTH > 0)
   )

def is_executable(path, user):
  user_info = pwd.getpwnam(user)
  uid = user_info.pw_uid
  gid = user_info.pw_gid
  s = os.stat(path)
  mode = s[stat.ST_MODE]
  return (
    ((s[stat.ST_UID] == uid) and (mode & stat.S_IXUSR > 0)) or
    ((s[stat.ST_GID] == gid) and (mode & stat.S_IXGRP > 0)) or
    (mode & stat.S_IXOTH > 0)
   )

使用方法

print is_readable('/home', root)
print is_writable('/home', root)
print is_executable('/home', root)

print is_readable('/tmp', admin)
print is_writable('/tmp', admin)
print is_executable('/tmp', admin)

以上這篇python檢查目錄文件權限并修改目錄文件權限的操作就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • Python使用迭代器捕獲Generator返回值的方法

    Python使用迭代器捕獲Generator返回值的方法

    這篇文章主要介紹了Python使用迭代器捕獲Generator返回值的方法,結合具體實例形式分析了Python迭代器獲取生成器返回值的相關操作技巧,需要的朋友可以參考下
    2017-04-04
  • 手把手教你pycharm專業(yè)版安裝破解教程(linux版)

    手把手教你pycharm專業(yè)版安裝破解教程(linux版)

    這篇文章主要介紹了 手把手教你pycharm專業(yè)版安裝破解教程(linux版),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-09-09
  • Python實現多線程抓取網頁功能實例詳解

    Python實現多線程抓取網頁功能實例詳解

    這篇文章主要介紹了Python實現多線程抓取網頁功能,結合具體實例形式詳細分析了Python多線程編程的相關操作技巧與注意事項,并附帶demo實例給出了多線程抓取網頁的實現方法,需要的朋友可以參考下
    2017-06-06
  • Python實現求兩個數組交集的方法示例

    Python實現求兩個數組交集的方法示例

    這篇文章主要介紹了Python實現求兩個數組交集的方法,涉及Python數組遍歷、排序、判斷、追加等相關操作技巧,需要的朋友可以參考下
    2019-02-02
  • python try...finally...的實現方法

    python try...finally...的實現方法

    這篇文章主要介紹了python try...finally...的實現方法,幫助大家更好的理解和使用python,感興趣的朋友可以了解下
    2020-11-11
  • 用Python編寫腳本使IE實現代理上網的教程

    用Python編寫腳本使IE實現代理上網的教程

    這篇文章主要介紹了用Python編寫腳本使IE實現代理上網的教程,“著名的”goagent代理也是基于同樣原理實現,需要的朋友可以參考下
    2015-04-04
  • Python爬蟲之Selenium鼠標事件的實現

    Python爬蟲之Selenium鼠標事件的實現

    這篇文章主要介紹了Python爬蟲之Selenium鼠標事件的實現,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-12-12
  • python計算機視覺opencv圖像金字塔輪廓及模板匹配

    python計算機視覺opencv圖像金字塔輪廓及模板匹配

    這篇文章主要為大家介紹了python計算機視覺opencv圖像金字塔圖像輪廓及模板匹配的學習講解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步
    2021-11-11
  • python實現sublime3的less編譯插件示例

    python實現sublime3的less編譯插件示例

    這篇文章主要介紹了python實現sublime3的less編譯插件示例的相關資料
    2014-04-04
  • python使用pdfminer解析pdf文件的方法示例

    python使用pdfminer解析pdf文件的方法示例

    這篇文章主要介紹了python使用pdfminer解析pdf文件的方法示例,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-12-12

最新評論