如何在不使用 chmod 的情况下更改文件权限?

如何在不使用 chmod 的情况下更改文件权限?

我们大学给我们布置了一份 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 中应该同样工作。

当然,这一切只是我对该作业的解释。我们这里的任何人都无法确定您的老师/教授认为正确的答案是什么,特别是因为有时教授给出的答案甚至不是正确的。

相关内容