没有读访问的写访问

Dim*_*tri 19 permissions chmod files

用户是否有可能对文件具有写访问权限而无法读取它?这怎么可能?

我尝试了以下命令:

debianbox@debian:~/posix/io$ touch filetest
debianbox@debian:~/posix/io$ ls -l filetest
-rw-r--r-- 1 debianbox debianbox 0 14 oct.  03:10 filetest

debianbox@debian:~/posix/io$ echo "Hello World" > filetest
debianbox@debian:~/posix/io$ cat filetest
Hello World

debianbox@debian:~/posix/io$ chmod u-r filetest
debianbox@debian:~/posix/io$ cat filetest
cat: filetest: Permission forbidden

debianbox@debian:~/posix/io$
Run Code Online (Sandbox Code Playgroud)

正如你在这里看到的,我对这个文件有写但没有读访问权限。这怎么可能?这是否被视为错误?如果不是,这在什么情况下会有用?

Gil*_*il' 23

允许写访问而没有读访问的主要原因是它简化了内核和用户程序中的权限管理。权限有两种,一种是读,一种是写,独立管理。这不是错误,因为记录的行为与实际行为一致,并且没有充分的理由要求不同的行为。

拥有没有读取权限的写入权限对于常规文件没有多大意义。它确实对各种特殊文件有意义。

  • 某些系统允许仅附加文件。例如,这对日志文件很有用。允许许多用户创建日志条目是有意义的,但不允许他们擦除或覆盖现有条目(因此:写权限,但仅附加属性),也不允许他们读取其他人的条目(因此:没有读取权限)。
  • 可以允许程序写入命名管道而不允许从中读取。
  • 有些设备是只写的。例如,连接到扬声器但没有麦克风的声音输出设备应该具有写入权限但没有读取权限。
  • 有各种特殊的文件系统,其中读取或写入文件会立即生效,而不是检索数据或将数据添加到存储中。例如,在Linux下,也有在各种文件/proc,并/sys允许用户空间程序写入到一个特定的文件将命令发送到内核。如果该命令不提供任何反馈,则特殊文件将变为只写。


roz*_*acz 21

它不是一个错误,它是一个特性TM(而且,这只是通用 unix 权限方法的结果)。

除了来自收件箱般的在目录中的情况下(如BillThor描述)的行为,只写访问是必要的在一些特殊(伪)文件/proc/sys。此类文件用于设置某些驱动程序或内核属性或触发系统操作。您无法读取它们,因为它们仅用于单向信号发送 - 您只能向它们回显一些文本/数据。要查找此类文件,您可以使用

find /proc/[^0-9]* /sys -perm /222 ! -perm /444
Run Code Online (Sandbox Code Playgroud)

请注意,由于这些文件用于高级系统配置(有潜在危险),因此只有root对它们的写访问权限(在大多数情况下)。