ファイルアクセス権を読み取り専用に変更しましたが、それでもファイルに書き込むことができます。なぜ?

ファイルアクセス権を読み取り専用に変更しましたが、それでもファイルに書き込むことができます。なぜ?

私はbuildrootを使用して構築された小規模の組み込みシステムを実行しています。ターゲットデバイスにファイル権限を設定しようとしたときに奇妙な動作が発生しました。混乱した点を説明するために、次の簡単な例を試しました。

# cd /mydir
# touch tmp.txt
# echo "rubbish" > tmp.txt
# cat tmp.txt
rubbish

# chmod 0444 .
# chmod 0444 tmp.txt
# echo "new-rubbish" > tmp.txt
# cat tmp.txt
new-rubbish

私はこれについて非常に混乱しています。ファイルとディレクトリを読み取り専用に設定しながらファイルの内容を変更する方法は?同じディレクトリに実行可能ファイルがあり、実行しようとすると、次のメッセージが表示されます。

# chmod 0444 my_binary
# ./my_binary
-sh: ./my_binary: Permission denied

私が期待どおりに動作します。明らかに、私はLinuxでファイルアクセスモデルがどのように機能するかについていくつかの根本的な誤解を持っています。読み取り専用に設定したファイルに書き込む理由を説明できる人はいますか?

答え1

これを行うと思われる場合は、rootそのディレクトリに書き込む権限があることを意味します。root権限が.の場合でもファイルに追加できます-r--r--r--

これ

echo "new-rubbish" > tmp.txt

JoelDavisが指摘したようにファイルを切り捨てるため、ファイルを削除して書き換えません(使用時bash)。

関連情報