Python中利用os.chmod修改文件权限详解

小石头
小石头
发布时间:2026-10-13| 4人浏览过
原创

本文介绍Python中通过os.chmod函数修改文件读写执行权限的方法。详细列举了stat模块中用于定义所有者、组及其他用户权限的常用常量,如S_IRUSR、S_IWGRP等,并结合实例说明如何检查及调整目录权限,适用于Linux环境下的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);

使用os.chmod(path, mode)函数可以修改文件权限,该函数接收两个参数:目标路径path和权限模式mode。以下列出在该模式下常用的权限常量及其含义:

stat.S_ISUID:设置用户ID执行位。此选项在实际应用中较少使用。

stat.S_ISGID:设置组ID执行位。此选项在实际应用中较少使用。

stat.S_ENFMT:强制记录锁。此选项在实际应用中较少使用。

stat.S_ISVTX:粘着位(Sticky Bit)。在执行后保留文本图像,通常用于目录以防止非所有者删除文件。

stat.S_IREAD:所有者读权限。赋予文件所有者读取文件的权限。

stat.S_IWRITE:所有者写权限。赋予文件所有者修改文件的权限。

stat.S_IEXEC:所有者执行权限。赋予文件所有者运行文件的权限。

stat.S_IRWXU:所有者读写执行权限。同时赋予文件所有者读、写及执行的权限。

stat.S_IRUSR:所有者读权限。等同于S_IREAD,赋予文件所有者读取权限。

stat.S_IWUSR:所有者写权限。等同于S_IWRITE,赋予文件所有者写入权限。

stat.S_IXUSR:所有者执行权限。等同于S_IEXEC,赋予文件所有者执行权限。

stat.S_IRWXG:组读写执行权限。赋予同组用户读、写及执行的权限。

stat.S_IRGRP:组读权限。赋予同组用户读取文件的权限。

stat.S_IWGRP:组写权限。赋予同组用户写入文件的权限。

stat.S_IXGRP:组执行权限。赋予同组用户执行文件的权限。

stat.S_IRWXO:其他用户读写执行权限。赋予非所有者、非组用户的读、写及执行权限。

stat.S_IROTH:其他用户读权限。赋予其他用户读取文件的权限。

stat.S_IWOTH:其他用户写权限。赋予其他用户写入文件的权限。

stat.S_IXOTH:其他用户执行权限。赋予其他用户执行文件的权限。

>>> 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 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。