我惊讶地发现/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 中的符号链接),也可以编辑文件。