![为什么 /dev 以只读方式挂载后仍然可以写入 /dev/null?](https://linux22.com/image/219431/%E4%B8%BA%E4%BB%80%E4%B9%88%20%2Fdev%20%E4%BB%A5%E5%8F%AA%E8%AF%BB%E6%96%B9%E5%BC%8F%E6%8C%82%E8%BD%BD%E5%90%8E%E4%BB%8D%E7%84%B6%E5%8F%AF%E4%BB%A5%E5%86%99%E5%85%A5%20%2Fdev%2Fnull%EF%BC%9F.png)
我惊讶地发现/dev/null
即使重新安装/dev
为只读后我仍然可以写入。
这是一个演示:
# echo foo > /dev/null
# echo foo > /dev/foo
# mount -o remount,ro /dev
# echo foo > /dev/null
# echo foo > /dev/foo
-bash: /dev/foo: Read-only file system
这是什么原因呢?
(我想一种解释可能是,对于某些(所有?)设备,该设备不是链接到该设备的文件系统的一部分。)
是否有任何设备受到影响mount -o remount,ro
?或者remount,ro
对指定文件系统中的设备基本上没有影响?
有谁知道这种行为记录在哪里?
答案1
只是猜测:您实际上并没有通过写入/dev/null
.
设备文件只是一个句柄,用于将内核指向具有主/次设备号的设备。事实上,相同的设备文件可以存在于多个文件系统上,并且它们将引用相同的设备。
所以我想写入它们并不被视为写入文件系统。
答案2
当内核看到对设备文件的写入尝试时,它开始忽略其他所有内容(考虑到您是 root 用户并且还没有使用 chattr)。
IOW 当您使用设备文件时,您不是使用底层文件系统时,您正在使用设备文件。
尝试修改设备文件本身,即重命名/删除/更新其时间戳,将失败。
一切都按预期进行。
答案3
目录的rite
W
权限仅控制该目录中文件的创建/删除。可能会破坏您的系统,sudo chmod a-w /dev/null
./dev/null
是一个伪设备,可能不尊重该W
位。
答案4
设备文件是特殊文件,其工作方式或多或少类似于符号链接:尝试相同的操作(链接到 rw fs 中文件的只读 fs 中的符号链接),也可以编辑文件。