我读到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的值不是减去,但被屏蔽了。减法意味着从一位到下一位进位,并且减去例如
0007
from0666
将得到0657
。这不是 umask 的工作原理,而且没有用处。
请注意,umask 仅在文件被访问时使用已创建,Linux 手册页也称其为“文件模式创建掩码”。之后,chmod()
可以用来更改权限,而不受umask限制。
所以如果一个文件不能同时拥有读、写、执行权限,
当然,他们可以。它对于不可执行的文件没有用。
答案2
因为默认情况下文件不可执行,而目录则可以。
- 目录上的“执行”标志允许您打开其中的文件,因此在大多数情况下是必要的(“读取”标志允许您列出目录内容,但不能打开其中的文件)。
- 常规文件中的“执行”标志使其可执行,但这通常是不需要的。