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

30 天前
 lisisi

在使用 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 的方式吗?感谢

1315 次点击
所在节点    Python
6 条回复
zhlxsh
30 天前
给目录加一个 x 权限试试。644 改成 755
julyclyde
30 天前
新产生文件遵循 umask
codehz
30 天前
权限继承目录是 windows NT 的玩法
不过 linux 倒是有 selinux 可以继承上下文(但不是权限)
laminux29
30 天前
os.chmod('/usr/local/test', 0o644) 时,执行这行命令的用户是?

应用程序中通过 wget 下载文件时,执行 wget 的用户是?
barathrum
30 天前
正常来说目录必须有 x 权限, 起码也得给个 755, 然后你这 download.jpg 都创建出来了, 怎么会写不进去呢? 有没有具体的日志啥的.
Spute
29 天前
帮你问了下 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 {} \;
```

你想实现什么样的权限继承效果?我可以给出更具体的建议。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1086161

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX