我们大学给我们布置了一份 Unix 作业。
我们必须将新创建的文件的权限更改为222
不使用chmod
.
将文件权限减少“222”[不要使用 chmod 命令]:
就我个人而言,我可以使用 Ruby:
ruby -e "File.chmod(0222, File.join(Dir.pwd, 'F2'))"
但这些类型的解决方案可能是不允许的。
另外,我在这里得到了一个问题: 如何在没有 /usr/bin/chmod 的情况下 chmod?
但答案有点不同。他们正在讨论恢复已删除的chmod
二进制文件。
如何在没有 的情况下更改文件的权限chmod
?
答案1
请注意,您的规范明确谈到新创建的文件。您甚至无法chmod
更改它,因为新文件在创建时将具有一组权限,然后您才能使用chmod
它们。
此外,虽然 Ruby 脚本不运行chmod
命令/实用程序,但它确实使用相同的底层系统调用,因此实际上是相同的事情。如果是我,我不会允许这样的事情发生。
在不给出完整答案的情况下,我建议看看什么的手册页open()
关于所创建文件的权限的说明:
mode 参数指定创建新文件时应用的文件模式位。当标志中指定
O_CREAT
或时,必须提供此参数 ;O_TMPFILE
如果 或 均未O_CREAT
指定O_TMPFILE
,则忽略模式。有效模式由进程的 umask 以通常的方式修改:在没有默认 ACL 的情况下,创建的文件的模式为(mode & ~umask)
.请注意,此模式仅适用于以后访问新创建的文件;open()
创建只读文件的调用很可能返回读/写文件描述符。为模式提供了以下符号常量:
S_IRWXU
00700
用户(文件所有者)具有读、写、执行权限[ETC。]
另请注意,您引用的部分说“减少权限经过222”,不是到222. 这对于我正在考虑的功能也很重要。
既然评论里已经提到了
我正在考虑
umask
,它限制新创建的文件的权限。它应该是一个标准功能,并且在 Linux 和 DragonFly 中应该同样工作。
当然,这一切只是我对该作业的解释。我们这里的任何人都无法确定您的老师/教授认为正确的答案是什么,特别是因为有时教授给出的答案甚至不是正确的。