/ devが読み取り専用でマウントされた後に/ dev / nullに書き込むことができるのはなぜですか?

/ devが読み取り専用でマウントされた後に/ dev / nullに書き込むことができるのはなぜですか?

/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

ただ推測してみてください。実際にwriteを通過できませんでした/dev/null

デバイスファイルは、カーネルがメジャー/マイナー番号を持つデバイスを指すハンドルだけです。実際には、同じデバイスファイルが複数のファイルシステムに存在する可能性があり、それらは同じデバイスを参照します。

したがって、それらに書き込むことは、ファイルシステムに書き込むとは見なされないようです。

答え2

カーネルがデバイスファイルへの書き込みを試みると、他のすべてを無視し始めます(ユーザーがrootで、まだchattrを使用していないことを考慮してください)。

IOWデバイスファイルを使用する場合いいえデフォルトのファイルシステムを使用している場合は、デバイスファイルを使用します。

デバイスファイルを修正してみてくださいそれ自体つまり、タイムスタンプの名前変更/削除/更新が失敗します。

すべてが期待どおりに動作します。

答え3

  1. ディレクトリの書き込みW権限は、そのディレクトリのファイルの作成/削除のみを制御します。システムが損傷する可能性がありますsudo chmod a-w /dev/null

  2. /dev/nullこれは擬似デバイスであり、このWビットを尊重しない可能性があります。

答え4

デバイスファイルは、シンボリックリンクとほぼ同様に動作する特別なファイルです。同じ操作を試して(fsの読み取り専用シンボリックリンクをrw fsのファイルにリンク)、ファイルを編集することもできます。

関連情報