为什么文件完全权限模式与目录不同?

为什么文件完全权限模式与目录不同?

我读到Linux Command Line and Shell Scripting Bible by Richard Blum Christine Bresnahan

从对象的完整权限集中减去 umask 值。文件的完全权限是模式 666,但目录的完全权限是 777

因此,如果一个文件不能同时具有读、写、执行权限,那么用户是否每次需要执行操作时都必须更改文件。如果程序员需要测试他的代码应该怎么做?那么其他文件类型呢?提前致谢。

答案1

从对象的完整权限集中减去 umask 值。

这不是真的。或者至少它是不准确的并且被简化为常见情况。

  • 首先,基值是不是“完整的权限集”,而是创建文件的进程设置为文件权限的任何内容。当然,对于常规文件,这通常是0666:这个想法是(比如说)文本编辑器不应该决定文件的权限应该是什么,但应该允许用户通过umask.

    但是创建文件的进程不需要使用0666文件权限。对于私有文件(例如 SSH 密钥),0600将使用 ,这样无论 umask 是什么,除了所有者之外的其他人都无法访问该文件。此外,对于可执行文件,0777可以使用 使得生成的文件可执行。

    对于目录来说,0777这很常见,因为该位实际上与一般用途的位x一样必要。r对于一般数据文件来说,情况并非如此,因此这就是为什么常见情况是0666针对文件和0777目录的。

    使用的基本权限当然可能是其他东西,但这些可能是常见情况。

  • 二、umask的值不是减去,但被屏蔽了。减法意味着从一位到下一位进位,并且减去例如0007from0666将得到0657。这不是 umask 的工作原理,而且没有用处。

请注意,umask 仅在文件被访问时使用已创建,Linux 手册页也称其为“文件模式创建掩码”。之后,chmod()可以用来更改权限,而不受umask限制。

所以如果一个文件不能同时拥有读、写、执行权限,

当然,他们可以。它对于不可执行的文件没有用。

答案2

因为默认情况下文件不可执行,而目录则可以。

  • 目录上的“执行”标志允许您打开其中的文件,因此在大多数情况下是必要的(“读取”标志允许您列出目录内容,但不能打开其中的文件)。
  • 常规文件中的“执行”标志使其可执行,但这通常是不需要的。

相关内容