You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python:chmod设置无法阻止文件被删除的技术问题咨询

文件权限444仍可删除的原因及解决办法
  • 核心问题:文件能否被删除,不取决于文件自身的权限,而是由它所在目录的权限决定。删除文件本质是修改目录的条目(移除该文件的记录),只要你对目录拥有写+执行权限,就能删除其中的文件,和文件本身权限无关。
  • 你的代码里用了tempfile.TemporaryDirectory(),这个临时目录默认给当前用户分配了读写执行权限,所以哪怕把文件设为444只读,依然能被删除。

修改方案

要阻止文件被删除,需限制其所在目录的写权限,比如将目录设为555(只读+执行)权限,这样目录内容无法修改,自然删不了里面的文件。修改后的代码示例:

import os
import tempfile
from stat import S_IRUSR, S_IRGRP, S_IROTH, S_IXUSR, S_IXGRP, S_IXOTH

with tempfile.TemporaryDirectory() as local_dir:
    # 修改目录权限为555
    os.chmod(local_dir, S_IRUSR | S_IXUSR | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH)
    
    local_file = os.path.join(local_dir, 'a.txt')
    with open(local_file, 'wt') as f:
        f.writelines('some stuff')
    os.chmod(local_file, S_IRUSR|S_IRGRP|S_IROTH)
    print(oct(os.stat(local_file).st_mode)[-3:])  # 输出 '444'
    
    try:
        os.remove(local_file)  # 此时会抛出PermissionError异常
    except PermissionError as e:
        print(f"删除失败:{e}")
    print(os.path.isfile(local_file)) # 输出True,文件未被删除

内容的提问来源于stack exchange,提问作者Richard Whitehead

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 07:22:10