V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
lisisi
V2EX  ›  Python

os.chmod() 创建目录后,下载文件到该目录中,权限可以继承吗?

  •  
  •   lisisi · 18 天前 · 1167 次点击

    在使用 os.chmod('/usr/local/test', 0o644) 创建目录 /usr/local/test 之后,发现应用程序中通过 wget 下载文件,无法保存 download.jpg 到 test 目录下,显示 download.jpg 的文件大小是 0 B ,权限是 -rw-r-r 。

    因为是通过网络下载文件保存,无法预先执行 os.open("/usr/local/test/download.jpg", mode=0o644) 给文件权限。创建的目录权限,怎样才能让目录中新建的文件,都能继承当前目录的权限呢?

    os.chmod 有类似 chmod -R 644 /usr/local/test 这样 -R 的方式吗?感谢

    6 条回复    2024-11-04 10:37:21 +08:00
    zhlxsh
        1
    zhlxsh  
       18 天前 via iPhone
    给目录加一个 x 权限试试。644 改成 755
    julyclyde
        2
    julyclyde  
       18 天前
    新产生文件遵循 umask
    codehz
        3
    codehz  
       17 天前
    权限继承目录是 windows NT 的玩法
    不过 linux 倒是有 selinux 可以继承上下文(但不是权限)
    laminux29
        4
    laminux29  
       17 天前
    os.chmod('/usr/local/test', 0o644) 时,执行这行命令的用户是?

    应用程序中通过 wget 下载文件时,执行 wget 的用户是?
    barathrum
        5
    barathrum  
       17 天前
    正常来说目录必须有 x 权限, 起码也得给个 755, 然后你这 download.jpg 都创建出来了, 怎么会写不进去呢? 有没有具体的日志啥的.
    Spute
        6
    Spute  
       17 天前   ❤️ 1
    帮你问了下 claude:
    Linux 系统中,新建文件的权限并不会自动继承所在目录的权限。不过,我们可以通过以下几种方式来实现类似的效果:

    1. 使用 umask 设置
    - umask 决定了新建文件和目录的默认权限
    - 文件默认最大权限是 666
    - 目录默认最大权限是 777
    - 实际权限 = 最大权限 - umask 值

    2. 使用 setfacl 命令设置默认 ACL
    ```bash
    # 设置目录的默认 ACL
    setfacl -d -m u::rwx,g::rwx,o::rx /path/to/directory

    # 查看设置的 ACL
    getfacl /path/to/directory
    ```
    设置默认 ACL 后,该目录下新建的文件/目录会继承这些默认权限。

    3. 使用 setgid 位
    ```bash
    # 设置目录的 setgid 位
    chmod g+s /path/to/directory
    ```
    这样新建的文件/目录会继承父目录的组所有权。

    4. 定期使用 chmod 同步权限
    ```bash
    # 使用脚本定期同步权限
    find /path/to/directory -type f -exec chmod 664 {} \;
    find /path/to/directory -type d -exec chmod 775 {} \;
    ```

    你想实现什么样的权限继承效果?我可以给出更具体的建议。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3773 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 10:27 · PVG 18:27 · LAX 02:27 · JFK 05:27
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.