在使用 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 的方式吗?感谢
1
zhlxsh 54 天前 via iPhone
给目录加一个 x 权限试试。644 改成 755
|
2
julyclyde 54 天前
新产生文件遵循 umask
|
3
codehz 54 天前
权限继承目录是 windows NT 的玩法
不过 linux 倒是有 selinux 可以继承上下文(但不是权限) |
4
laminux29 54 天前
os.chmod('/usr/local/test', 0o644) 时,执行这行命令的用户是?
应用程序中通过 wget 下载文件时,执行 wget 的用户是? |
5
barathrum 54 天前
正常来说目录必须有 x 权限, 起码也得给个 755, 然后你这 download.jpg 都创建出来了, 怎么会写不进去呢? 有没有具体的日志啥的.
|
6
Spute 54 天前 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 {} \; ``` 你想实现什么样的权限继承效果?我可以给出更具体的建议。 |