os.chmod() 创建目录后,下载文件到该目录中,权限可以继承吗? - V2EX
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 2024-11-03 12:10:53 +08:00 1928 次点击
    这是一个创建于 407 天前的主题,其中的信息可能已经有所发展或是发生改变。

    在使用 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  
       2024-11-03 12:20:09 +08:00 via iPhone
    给目录加一个 x 权限试试。644 改成 755
    julyclyde
        2
    julyclyde  
       2024-11-03 12:59:43 +08:00
    新产生文件遵循 umask
    codehz
        3
    codehz  
       2024-11-03 18:29:59 +08:00
    权限继承目录是 windows NT 的玩法
    不过 linux 倒是有 selinux 可以继承上下文(但不是权限)
    laminux29
        4
    laminux29  
       2024-11-03 18:48:36 +08:00
    os.chmod('/usr/local/test', 0o644) 时,执行这行命令的用户是?

    应用程序中通过 wget 下载文件时,执行 wget 的用户是?
    barathrum
        5
    barathrum  
       2024-11-03 22:29:54 +08:00
    正常来说目录必须有 x 权限, 起码也得给个 755, 然后你这 download.jpg 都创建出来了, 怎么会写不进去呢? 有没有具体的日志啥的.
    Spute
        6
    Spute  
       2024-11-04 10:37:21 +08:00   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     Solana     1071 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 28ms UTC 18:01 PVG 02:01 LAX 10:01 JFK 13:01
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86