/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
ですのでエラーメッセージをリダイレクトしてしまえば、何の問題もないように思えるのですが・・・
これでいいのかなぁ。
No.2ベストアンサー
- 回答日時:
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でないので当然の結果ですが。
chirubouさん、ご回答ありがとうございます。
なるほど/procは特殊なファイルが置いてある場所なのですね。
普段、何気なく使っているコマンドの引数に、ここのファイルを指定すると想定外の結果が返ってくるのだと覚えておきます。
今、指定したディレクトリー中の全ファイルに対してwcするシェルスクリプトを作成中でして、
まず手始めに、このスクリプトの引数に/を指定してテストしたところ
/proc/sys/net/ipv4/route/flushの所だけ他と違うエラーが返ってきたため、疑問に思って質問に参ったというわけです。
今回は、このような奇妙なエラーが返ってきたのは、このファイルだけですが、
/proc中には、これ以外にも引数に指定した場合、予期せぬエラーを返すファイルがいっぱい潜んでいるというわけですね。
No.4
- 回答日時:
こんばんは。
カーネルソースを修正して再構築した事はありますか?
あなたの環境が一言も書いていないので回答できませんが、たとえば
以下のカーネルソースの、flushのmodeを「0644」から「0200」に変更して、
カーネルコンパイルすれば、flushの属性を変えられます。
一度試してみてください。(自己責任で)
●カーネルソースを修正してコンパイルする
「/usr/src/linux-2.4.20-8/net/ipv4/route.c」
ctl_table ipv4_route_table[] = {
{
ctl_name: NET_IPV4_ROUTE_FLUSH,
procname: "flush",
data: &flush_delay,
maxlen: sizeof(int),
mode: 0644, <-これを0200に変更
proc_handler: &ipv4_sysctl_rtcache_flush,
strategy: &ipv4_sysctl_rtcache_flush_strategy,
},
●ソース変更前の属性は644
# ls -l /proc/sys/net/ipv4/route/flush
-rw-r--r-- 1 root root 0 11月 22 00:08 /proc/sys/net/ipv4/route/flush
# wc /proc/sys/net/ipv4/route/flush
wc: /proc/sys/net/ipv4/route/flush: 無効な引数です
0 0 0 /proc/sys/net/ipv4/route/flush
●ソース変更後の属性は200になった
# ls -l /proc/sys/net/ipv4/route/flush
--w------- 1 root root 0 11月 22 00:50 /proc/sys/net/ipv4/route/flush
# wc /proc/sys/net/ipv4/route/flush
wc: /proc/sys/net/ipv4/route/flush: 許可がありません
以上、参考にしてください。
xjdさん、ご返信ありがとうございます。
カーネルコンパイルですか。
xjdさんのアドバイス文を見ながら
ソース修正まではできましたが、
カーネルコンパイルというのは、よく分からないので、やめておきますw
とにかく、これでカーネルコンパイルというのをやれば、
できないと思っていた/proc/sys/net/ipv4/route/flushの属性を変更することもできてしまうのですね!
ところでみなさん、そろって--w-------という属性に変更しているようですが、これはどういう理由からなのでしょうか。
それとも環境によってデフォルトの属性が違うだけなのでしょうか。
ちなみに申し遅れましたが私の環境はRed Hat Linux8.0の最小インストール+α(サンバとかの各種サーバー)です。
No.3
- 回答日時:
>なるほど/procは特殊なファイルが置いてある場所なのですね。
/procは、プロセス情報を含む擬似的なファイルシステムですので、ディスク上には存在しませんのでファイルが置いてあるというよりは、ファイルとして見えているという事になります。
/proc/sys配下だけに限定すると、カーネルにはチューニング等を行うためのカーネルパラメータというものが存在するのですが、それが/porc/sys配下に階層構造でファイルとして見えています。
例えば、パケット転送の有効・無効を設定するパラメータとしてnet.ipv4.ip_forward というのがあるのですが、これは、/proc/sys/net/ipv4/ip_forward として見えます。
例
# sysctl -a | grep net.ipv4.ip_forward
net.ipv4.ip_forward = 0
# sysctl net.ipv4.ip_forward
net.ipv4.ip_forward = 0
# ls -l /proc/sys/net/ipv4/ip_forward
-rw-r--r-- 1 root root 0 11月 21 22:19 /proc/sys/net/ipv4/ip_forward
# cat /proc/sys/net/ipv4/ip_forward
0
また、カーネルパラメータはカーネル起動中でもsysctlコマンドを使用する事で参照・変更する事が可能なものがあるのですが、このsyscltコマンドを使用しなくとも/proc/sys配下の該当するファイルに対してread/writeする事で同様事が可能です。
例
# sysctl net.ipv4.ip_forward
net.ipv4.ip_forward = 0
# sysctl -w net.ipv4.ip_forward=1
net.ipv4.ip_forward = 1
# sysctl net.ipv4.ip_forward
net.ipv4.ip_forward = 1
# cat /proc/sys/net/ipv4/ip_forward
1
# echo "0" > /proc/sys/net/ipv4/ip_forward
# cat /proc/sys/net/ipv4/ip_forward
0
# sysctl net.ipv4.ip_forward
net.ipv4.ip_forward = 0
Leanさん、ご返信ありがとうございます。
/procは概念自体、理解しがたいものですね。
ファイルが存在するのではなく、見えるのですね・・・^^
/proc中のほとんどのファイルサイズは0ですが、中には0でないものもあります。
こういうファイルも実際のディスク領域に書き込まれているわけではなく、どこかの設定ファイルへのリンクのようなものなのでしょうかね。
カーネルパラメータの2通りの変更方法もためになりました。
まあ、これらを使用するためには、各カーネルパラメータの意味を学習する必要がありますけどね。
/proc/sys/net/ipv4/ip_forwardはcatできるのですね。
No.1
- 回答日時:
うちのFedoraCore5では特に問題ないです。
$ pwd
/proc/sys/net/ipv4/route
$ ls -l flush
--w------- 1 root root 0 11月 20 22:25 flush
$ wc flush
wc: flush: 許可がありません
$ cat flush
cat: flush: 許可がありません
mtfoggyさん、早速のご回答ありがとうございます。
mtfoggyさんの実行結果を見てふと気になったのがflushの属性です。
私の環境では-rw-r--r--となっているのです。
ですので、これをmtfoggyさんと同じ属性に変更しようとしたところ・・・
「許可されていない操作です」と怒られてしまいました。
なんとrootユーザーは全ての操作を実行できると認識していたのですが、
この謎めいたファイルには効きませんでした。
mtfoggyさんのflushには読み取り属性がないため、
「無効な引数です」と怒られるところまで行き着いていないのではと思い、
それを実験してみようと思ったのですが、属性すら変更できないとは予想外でした!!
ところでmtfoggyさんのflushの属性ってデフォルトでその設定なのですか。
所有者の書き込みのみ許可されているとは、これまた謎めいたファイルですね。
うーーん、どうしたもんだろう??
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
カーネルのプロトコルスタック開発
-
Windowsのソースコードって非公...
-
Linuxって、、、、、、
-
UNIXからLINUXへのデータ移行に...
-
Windows8 ntoskrnl.exeについて
-
Linux 32Bitと64Bitのメモリー...
-
ubuntu 初期化について
-
パソコンでゲームをプレイしよ...
-
XP(SP3)SSDにクリーンインスト...
-
M.2 NVME SSDがWindowsからはア...
-
WindowsのMeで・・・
-
Raspberry Pi 3 A+ ブラウザ遅い
-
linux mint での無線LANが認識...
-
Ubuntu on Xorgのログインについて
-
raspberrypi に bluealsaを入れ...
-
Raspberry Pi3がWifiに繋がらない
-
WinXPインストール時にACPIドラ...
-
自分は、パソコンにAPEXを入れ...
-
Linuxのパッケージ更新で更新前...
-
Windows2000を最新マシンにイン...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
/dev/nvme0n1p2 clean と表示さ...
-
Linux 32Bitと64Bitのメモリー...
-
カーネルバッファとは何でしょうか
-
SolarisとLinuxの違い
-
romfsってなんですか?
-
カーネルアップグレード後、una...
-
SunOS5.x と Solarisの違いは?
-
UNIXとBSDとLinuxの違いを小学...
-
エラー”Illegal seek”はどんな...
-
BSDでフォーマットされたHDDは...
-
パフォーマンスモニタの%Proces...
-
違いを教えください!!
-
Windows Vistaは本当にゴミOSな...
-
Dockerコンテナ(centos7.9)の...
-
魔改造版Windows 2000をインス...
-
kernel 2.4.XX.ELsmp のELって?
-
Debian で時間が経つと画面が消...
-
割り込み不可能?なプロセスを...
-
/proc/sys/net/ipv4/route/flus...
-
デュアルコアCPUをシングルにし...
おすすめ情報