
Windows(WSL)上のUbuntuのBashで「ifconfig」コマンドを使用しようとすると、次のようなエラーが発生します:-
ルート@例:~#ifconfig
警告: /proc/net/dev を開けません (そのようなファイルまたはディレクトリはありません)。出力が制限されています。
そして、「iwconfig」を実行しようとすると:-
eth0 ワイヤレス拡張機能なし。
wifi0 ワイヤレス拡張機能なし。
ワイヤレス拡張機能はありません。
und0 ワイヤレス拡張機能はありません。
und1 ワイヤレス拡張機能なし。
これはネットワークデバイスが検出されていないと私には思えますが、それではインターネットはどのように機能しているのでしょうか?インターネットは問題なく機能しています。apt-getアプリをインストールするため;
私は Linux のプロではないし、ましてや WSL のプロでもありません。この問題を克服する方法についてアドバイスをいただけないでしょうか?
答え1
WSLは完全なLinuxカーネルを実行するわけではなく、個々のシステムコールをWindowsのバリアントに変換するだけです。そのため、WSLは必要実際の Linux と同じようにデバイスを「検出」します。Windows 自体がすでにそれを実行しているためです。
また、デバイスを「検出する」ことと、デバイスに関する情報を公開することは同じではありません。 内のファイルは/proc/net
情報提供のみを目的としており、実際にネットを使用するためには必要ありません。したがって、ファイルがなくても大きな問題にはなりません。
加えて、ほとんどのネットワークプログラム気にしない実際のデバイスについて;socket()
これらは高レベルの関数 (BSD ソケット) のみを処理し、詳細は OS に処理させます。したがって、WSL がやconnect()
などの関数を実装していればsendto()
、それで十分です。
状況もiwconfig
同様です。ワイヤレスデバイスはすでにWindows 自体によって管理されます。WSL はリンク情報を Linux プログラムに変換する方法を知りませんが、ほとんどの Linux プログラムではそれを知る必要はありません。
さらに、iwconfig
これはほぼ廃止されたWEXT APIを使用する古いツールです。開発者は、次のような最新のnl80211ベースのツールを作成することにもっと関心があるのではないかと思います。iw
まず仕事をする。
(多くの Linux ドライバーも WEXT を直接サポートしなくなり、nl80211 上でエミュレートするだけになりました。)