質問: /proc/sys/net/ipv4/route/flushは無効な引数? /proc/sys/net/ipv4/route/flush というファイルをcatの引数に指定すると 「無効な引数です」と言われます。 普通、読めないファイルの場合は 「許可がありません」というメッセージなのに、 このファイルだけは「無効な引数です」と言われるのです。 エラーメッセージが異なるということは別のエラーということだと思うのですが、 「無効な引数です」というメッセージはどのような場合に表示されるものなのですか。 たとえばwcの引数に指定した場合、次のようにエラーメッセージと通常の結果の両方を表示します。 $ wc /proc/sys/net/ipv4/route/flush wc: /proc/sys/net/ipv4/route/flush: 無効な引数です 0 0 0 /proc/sys/net/ipv4/route/flush ですのでエラーメッセージをリダイレクトしてしまえば、何の問題もないように思えるのですが・・・ これでいいのかなぁ。
回答: linux で /proc 以下のファイルは特殊なファイルです。/proc以下のファイルは、カーネルとのインターフェイスになっていて、ファイルとしての実体はありません(man 5 proc 参照)。カーネルの中に、/proc 以下のこのディレクトリにアクセスがあったら、こういう値を出力する(読み込みの場合)、その値をカーネルのこの変数に代入する(書き込みの場合)というようなプログラムが書かれています。 ということで、属性が変更できないのは当然です。ちなみに centos 4.4 では $ ls -l /proc/sys/net/ipv4/route/flush --w------- 1 root root 0 nov 21 10:39 /proc/sys/net/ipv4/route/flush となっています。これを $ strace wc /proc/sys/net/ipv4/route/flush とするとどこで、どういうエラーになったか分かります。centosの場合、沢山の出力の後、 .... open("/proc/sys/net/ipv4/route/flush", o_rdonly|o_largefile) = -1 eacces (permission denied) write(2, "wc: .... となります。まあ、これはrootでないので当然の結果ですが。