
/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で質問しましょう!
似たような質問が見つかりました
- UNIX・Linux linuxサーバーのキャッシュをクリアするコマンドを実行したい。 5 2023/01/24 14:52
- UNIX・Linux bash環境でのエラー対応をお願い致します。 1 2022/11/26 17:41
- UNIX・Linux Linuxのbash環境下です。 1 2022/11/27 12:31
- 固定IP 楽天光が繋がらないまたは接続に時間が掛かる IPv4が邪魔してるので削除したい 2 2022/08/15 11:58
- Windows 10 確認した「IPv4アドレス」 1 2022/10/26 20:45
- UNIX・Linux ホストオンリーアダプタで接続したい 1 2022/08/10 21:46
- 法学 急遽お願いします!!! マルバツ問題です。 ①制限行為能力者と取引をした相手方には催告権が与えられて 1 2023/05/23 23:03
- その他(インターネット接続・インフラ) ブラウザにIPアドレス入力した時 1 2022/06/16 19:08
- その他(IT・Webサービス) ホームページにカウント数を表示する 2 2022/10/28 10:37
- ノートパソコン 「データエラー(CRCエラー)」対応に付いて 15 2022/12/08 09:01
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
LINUXはどうして普及したのでし...
-
SolarisとLinuxの違い
-
パフォーマンスモニタの%Proces...
-
telnetの設定ファイルの場所が...
-
カーネル再構築でのエラー
-
アップデートをかけたら、ブー...
-
XPが再起動ばかりを繰り返します
-
UNIXとBSDとLinuxの違いを小学...
-
Linuxって何?
-
fedora10で音が鳴りません
-
MACの違いについて
-
デュアルコアCPUをシングルにし...
-
D525MWにCentOS6でLANが繋がらない
-
モジュールの場所を確認できま...
-
エラー”Illegal seek”はどんな...
-
基本ソフトと応用ソフトの仕事...
-
*長文となっております、予めご...
-
Dockerコンテナ(centos7.9)の...
-
重厚長大なOSは必要か。
-
linuxカーネルのダウングレード...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
SolarisとLinuxの違い
-
パフォーマンスモニタの%Proces...
-
カーネル再構築でのエラー
-
割り込み不可能?なプロセスを...
-
Linuxって何?
-
/dev/nvme0n1p2 clean と表示さ...
-
Linux 32Bitと64Bitのメモリー...
-
androidがIPadに劣る、Linuxだ...
-
カーネルバッファとは何でしょうか
-
apacheのプロセス数が不安定
-
Redhat9のカーネルのアップにつ...
-
Debian で時間が経つと画面が消...
-
CentOSのデスクトップ画面が立...
-
/proc/sys/net/ipv4/route/flus...
-
エラー”Illegal seek”はどんな...
-
UNIXとBSDとLinuxの違いを小学...
-
どうしてwindowsはMacと比べ動...
-
カーネルの再構築の方法
-
Linuxでcrcエラー?
-
ツインCPUでのLinuxインス...
おすすめ情報