このページの本文へ

Windows Info 第74回

Windows Subsystem for Linuxのファイルシステムを知る

2016年10月16日 10時00分更新

文● 塩田紳二 編集● ASCII.jp

  • この記事をはてなブックマークに追加
  • 本文印刷

 前回に続いて、Windows 10のAnniversery Update(RS1)から搭載されたWindows Subsystem for Linux(WSL)について詳しく紹介する。今回はWSLの中からシステムを見ていこう。

Windows Subsystem for Linux内から
Windows側のファイルにアクセスする

 前回、WSLで動作するUbuntu Linuxのルートファイルシステムは、「%userprofile%\appdata\local\lxss\」にあると紹介したが、これをWSL側から見たのが下の図だ。

WSLから見えるファイルシステムは、各ユーザーのフォルダにあるAppData/Local/lxssにあり、ここにあるrootfsがWSLのルートファイルシステムに相当する。ただし、一部のディレクトリは分離されている。また、Windows全体のファイルシステムは、WSL側からは/mnt/以下に「マウント」されている

 Linuxでは、通常、rootfsと呼ばれる何もないファイルシステムにHDD内のパーティションや仮想ファイルシステムなどをマウントしていく。Windowsと違って「ドライブ」や「ドライブ文字」といった概念はなく、記憶デバイスなどはrootfsにつながるディレクトリに「マウント」して利用する。なお、標準のパス区切りには、「/」(スラッシュ)を使う。

 Windowsも実はAPIのパラメーターとしてはパス区切りにスラッシュ文字を使うことが可能だ。MS-DOSの元になったQDOSでコマンドのオプション文字として「/」を使っていたため、MS-DOS 2.0で階層ディレクトリを導入したとき、オプションとパラメータの区別がつかなくなるため、パス区切りを逆スラッシュ「\」(ASCIIコードの0x5C)にした。オプション文字のほうを修正すると、付属コマンドのほとんどを改修する必要があるからだ。

 また、バッチファイルがスラッシュをオプション文字として記述していたため、変更すると、バッチファイルがすべて動作しなくなってしまうという互換性の問題を引き起こすというのも理由だった。つまり、逆スラッシュを使わねばならないというのは、コマンドラインでパスを指定するときの問題だったわけだ。それ以降、Windowsのコマンドラインやエクスプローラーの表示は、すべて逆スラッシュでパスを区切るようになった。

 実際には、マイクロソフトはシステムのオプション「SWITCHCHAR」を組み込み、オプション文字にスラッシュ以外に指定できるようにして、APIのレベルでは、パスの区切りを逆スラッシュ、スラッシュのどちらでも受け付けるようにしている。しかし、SWITCHCARオプションはサードパーティのアプリに対して互換性の問題を発生させたため、利用は制限されて「隠し機能」とされたのだ。

 APIのレベルでパス区切りをスラッシュ、逆スラッシュどちらでも受け付けるという機能は以来ずっと健在である。たとえば、Windows Explorerのアドレス欄(パス欄)に「C:\temp\folder」の代わりに「C:/temp/folder」と入れてもちゃんとフォルダを移動してくれる。ただし、パスの表示は常に逆スラッシュになる。

 さて、WSLに話を戻そう。WSL内からWindows側のファイルへアクセスするには、「/mnt」以下にあるドライブ文字別のディレクトリを使う。このときWindows側の「C:\」は、WSLでは「/mnt/C」となる。これは、WSLに組み込まれた「DeviceFs」と呼ばれるファイルシステムだ。

 このDeviceFsでは、WSL側からみるとLinuxのファイルシステムだが、すべてのファイルシステム機能はサポートされておらず、主な機能のみが利用可能で、WindowsのファイルシステムへのアクセスがLinux側のソフトウェアから行えるようになっている。

 このDevFsにより、WSL側からは、Windows側の任意の位置にあるファイルをアクセスできる。わざわざVolFSがあるユーザーディレクトリ以下にファイルを置く必要はなく、Windows側のエディタによる編集などが簡単にできる。

 ただし、Linuxでは、一般的にテスキトファイルの行末記号として「LF」(0x0A)を使い、Windowsでは、CRLF(0x0D 0x0A)を使うのが普通だ。このため、Windows付属のメモ帳では、Linux側のファイルがぜんぶつながって見えてしまう。WindowsとWSLでテキストファイルを共有する場合、行末記号の設定可能なエディタを使う必要がある。

 また、bash.exeコマンドで、WSLを起動したとき、WSL側のカレントディレクトリは、bash.exeのものが引き継がれる。たとえば、コマンドプロンプトウィンドウのカレントフォルダーが「C:\Windows\System32」だったとき、bash.exeを起動すると、WSL側のカレントディレクトリは、「/mnt/c/Windows/System32」になる。

 Linux環境を起動したとき、bash.exe側のカレントディレクトリが引き継がれることにちょっと違和感を感じるLinuxユーザーも少なくないだろう。通常のLinuxやUnix環境では、ログインした直後は、ユーザーのホームディレクトリがカレントディレクトリになるためだ。

 bash.exe側のカレントディレクトリが引き継がれる理由は、bash.exeがLinuxのコマンドを実行して終了するという使い方ができるからだ。実際には、bash.exeを実行すると、Linux側のログイン手続きはなく、すぐに/bin/bashが起動してLinuxのプロンプトに切り替わる(ただし、bashのログインスクリプトなどはちゃんと実行されている)。cmd.exeからbash.exeを起動するときに"-c”オプションに続けてLinuxのコマンドを指定すると、コマンドを実行後、bash.exeの実行が終了してcmd.exeに戻ってくる。

bash.exeは、/bin/bashと同じオプションを受け付けることが可能。このためコマンドを実行させる“-c”(小文字のc)と実行コマンド(写真中ダブルクオートの中)を指定すれば、WSL側でコマンドを実行してCMD.EXEに戻ってくる

 このようにすると、あたかもLinuxのコマンドをWindowsのコマンドと同じように利用することができる。WSLの起動は短時間ででき、仮想環境を起動するときのような負荷はかからない。このため、ソフトウェア開発などで、gccなどLinux側の開発系コマンドを利用してコンパイルするといった作業が簡単にできる。そうなっていると、bash.exeとカレントディレクトリが同じになっているほうが便利だ。ただし、WSL側のコマンドでWindows側のファイルをフルパスで指定する場合には、/mnt/cなどからなるWSL側ファイルシステムに翻訳してパラメーター指定する必要がある。

 また、Linux側では大文字小文字が区別される点に注意する必要がある。たとえば、DevFsでウィンドウズフォルダ(C:\Windows)をアクセスする場合「/mnt/c/Windows」はアクセスが可能だが「/mnt/c/windows」ではアクセスができない。

Linuxでは、大文字小文字が区別されるため、/mnt/c以下のファイルアクセスでは大文字小文字に注意すること。「C:/Windows」はWが大文字として登録されている

 Windowsでは通常、大文字小文字は区別されないが、作成時の大文字小文字の指定は保存される。このため、WSL側では、その大文字小文字を区別する必要がある。フォルダを作成する場合「mkdir Temp」と「mkdir temp」は、Windows側では区別がされないが、Linux側からみると違いが出てきてしまうわけだ。なので、VolFs側にWindows側からフォルダなどを作成する場合には、なるべく小文字のみを使うなど注意する必要がある。

 WindowsのNTFSなどのファイルシステムでは、実際には、大文字小文字を区別している。しかし、これをWindows Subsystemから使う場合には、大文字小文字を区別しないでアクセスできるようになっている。これはもともとWindows NTがPosixサブシステム(Unix準拠のAPIを持つシステム)を持ち、そのために大文字小文字を区別する必要があったからだ。

Linuxのファイルシステムに含まれる 特殊なディレクトリ

 Linuxのファイルシステムには、/sysや/porc、/devといった特殊なディレクトリがある。これらは疑似ファイルシステムと呼ばれるものだ。疑似ファイルシステムは、さまざまな情報をファイルのようにアクセスできる仕組み。/sysは、sysfsと呼ばれカーネル内の情報にアクセスする場合に利用する。たとえば、

/sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq

というファイルを開くと、CPUコアの最大動作クロック周波数をテキストとして読み出すことができる。ただし、WSLでは、Linuxカーネルそのものが動作しているわけではないので、/sysディレクトリ以下の一部(たとえばfsディレクトリなど)は本来あるべき情報がない場合がある。

/sysは、カーネルなどが持つさまざまなシステム情報をファイルシステムとして表現したもの。この画面では、CPUの最大動作クロック周波数がファイル(cpuinfo_max_freq)にテキストとして表現されており、catコマンドでこれを表示させている

 同様に/procは、起動中のプロセス(Process)の情報にアクセスするためのProcファイルシステムになっている。/procディレクトリ以下にプロセス番号に相当するディレクトリが作られ、その下に個々のプロセスに対する情報がある。

/procは、起動中のプロセスに関する情報を仮想ファイルシステムとして表現したもの。プロセス番号に対応するディレクトリがあるほか、動作に関連する情報を得ることもできる

 /devは、Unixが当初からもっているデバイスファイルシステムで、カーネルが扱うデバイスを仮想的なファイルシステムとして表現したもの。/devファイルシステムは、コマンドなどから直接デバイスを操作する場合などに利用する。

 bash.exeを起動すると、WSL内では、initプロセスと/bin/bashプロセスの2つが起動する。initプロセスは、Linuxでカーネルが起動したあと、ユーザープロセスとしてシステムの起動に必要な処理を行うプロセスを起動するプログラム。いわゆるオペレーティングシステムの起動処理を行い、通常は、バックグラウンドなどで動作するプログラム(Linux/Unix系ではデーモンと呼ぶ)を起動するなどの処理を行う。

 しかし、WSLは、最低限のLinux環境になっており、デーモン(バックグラウンドで動作するソフトウェア。Windowsのサービスに相当)は一切起動されない。唯一起動されるプログラムが/bin/bash(bash.exeではないことに注意)で、これがいわゆるLinuxのシェル(bash)になる。

 実は、このinitも/bin/bashも、Windowsのプロセスとして管理されている。タスクマネージャには、initもbashもちゃんとプロセスとして表示される。つまり、WSLのプロセスは、コードはLinuxのバイナリだが、プロセスとしては、Windowsのカーネル側で正式なプロセスとして扱われている。メモリ管理やスケジューリングもWindows カーネルが行っている。

WSLで起動されるLinuxのプログラムinitや/bin/bashもWindowsのプロセスとして管理されているため、タスクマネージャやTasklistコマンドで表示させることができる。ただし、Windows Subsystemのプロセスではないためにプロパティ表示などはできない

 さて、次回は、WSLのLinuxを使いやすく設定する設定などについて考えてみることにする。

カテゴリートップへ

この連載の記事
1
Apple 2026 MacBook Air M5チップ搭載13インチノートブック:AIとApple Intelligence、13.6インチLiquid Retinaディスプレイ、16GBユニファイドメモリ、512GB SSDストレージ、12MPセンターフレームカメラ、Touch ID - シルバー
Apple 2026 MacBook Air M5チップ搭載13インチノートブック:AIとApple Intelligence、13.6インチLiquid Retinaディスプレイ、16GBユニファイドメモリ、512GB SSDストレージ、12MPセンターフレームカメラ、Touch ID - シルバー
¥177,333
2
Lenovo ノートパソコン パソコン IdeaPad Slim 3 15.3インチ 第13世代 インテル® Core™ i5 プロセッサー搭載 13420H メモリ16GB SSD512GB MS Office 2024搭載 Windows11 バッテリー駆動16.9時間 重量1.59kg ルナグレー 83K100G4JP ノートPC
Lenovo ノートパソコン パソコン IdeaPad Slim 3 15.3インチ 第13世代 インテル® Core™ i5 プロセッサー搭載 13420H メモリ16GB SSD512GB MS Office 2024搭載 Windows11 バッテリー駆動16.9時間 重量1.59kg ルナグレー 83K100G4JP ノートPC
¥107,800
3
【Amazon.co.jp限定】Lenovo Chromebook クロームブック Duet 11 10.95インチ MediaTek Kompanio 838 プロセッサー​搭載 メモリ8GB eMMC 128GB 重量1.0kg 83HH000TJP パソコン
【Amazon.co.jp限定】Lenovo Chromebook クロームブック Duet 11 10.95インチ MediaTek Kompanio 838 プロセッサー​搭載 メモリ8GB eMMC 128GB 重量1.0kg 83HH000TJP パソコン
¥61,800
4
【整備済み品】富士通 ノートパソコン LIFEBOOK U9310 13.3型FHD(1920x1080) 超軽薄 ノートPC/第10世代 Core i5-10310U@1.7GHz/ 8GB メモリ/高速ストレージ SSD/Webカメラ/WIFI/Type-C/HDMI/win11&MS Office 2019 搭載 ビジネス 在宅勤務向け パソコン (メモリ:8GB/SSD:256GB)
【整備済み品】富士通 ノートパソコン LIFEBOOK U9310 13.3型FHD(1920x1080) 超軽薄 ノートPC/第10世代 Core i5-10310U@1.7GHz/ 8GB メモリ/高速ストレージ SSD/Webカメラ/WIFI/Type-C/HDMI/win11&MS Office 2019 搭載 ビジネス 在宅勤務向け パソコン (メモリ:8GB/SSD:256GB)
¥36,970
5
【整備済み品】中古ノートパソコン 東芝Bシリーズ B55/B65 Windows11搭載 Core i5-6200U /メモリ8GB/SSD128GB/15.6インチ/Bluetooth/WIFI/HDMI/USB3.0/DVDドライブ/MS & Office2019/テンキー搭載/仕事用ノート (Bシリーズi5-6/メモリ8GB/SSD128GB)
【整備済み品】中古ノートパソコン 東芝Bシリーズ B55/B65 Windows11搭載 Core i5-6200U /メモリ8GB/SSD128GB/15.6インチ/Bluetooth/WIFI/HDMI/USB3.0/DVDドライブ/MS & Office2019/テンキー搭載/仕事用ノート (Bシリーズi5-6/メモリ8GB/SSD128GB)
¥15,990

Amazonのアソシエイトとして、ASCII.jpは適格販売により収入を得ています。

ASCII倶楽部

注目ニュース

  • 角川アスキー総合研究所

プレミアム実機レビュー

ピックアップ
1
KIOXIA(キオクシア) 旧東芝メモリ microSD 128GB UHS-I Class10 (最大読出速度100MB/s) Nintendo Switch動作確認済 国内サポート正規品 メーカー保証5年 KLMEA128G
KIOXIA(キオクシア) 旧東芝メモリ microSD 128GB UHS-I Class10 (最大読出速度100MB/s) Nintendo Switch動作確認済 国内サポート正規品 メーカー保証5年 KLMEA128G
¥1,880
2
Anker PowerLine III Flow USB-C & USB-C ケーブル Anker絡まないケーブル 240W 結束バンド付き USB PD対応 シリコン素材採用 iPhone 17 / 16 / 15 / Galaxy iPad Pro MacBook Pro/Air 各種対応 (1.8m ミッドナイトブラック)
Anker PowerLine III Flow USB-C & USB-C ケーブル Anker絡まないケーブル 240W 結束バンド付き USB PD対応 シリコン素材採用 iPhone 17 / 16 / 15 / Galaxy iPad Pro MacBook Pro/Air 各種対応 (1.8m ミッドナイトブラック)
¥1,890
3
Anker USB Type C ケーブル PowerLine USB-C & USB-A 3.0 ケーブル iPhone 17 / 16 / 15 /Xperia/Galaxy/LG/iPad Pro/MacBook その他 Android 等 USB-C機器対応 テレワーク リモート 在宅勤務 0.9m ホワイト
Anker USB Type C ケーブル PowerLine USB-C & USB-A 3.0 ケーブル iPhone 17 / 16 / 15 /Xperia/Galaxy/LG/iPad Pro/MacBook その他 Android 等 USB-C機器対応 テレワーク リモート 在宅勤務 0.9m ホワイト
¥740
4
UGREEN USB Type Cケーブル PD対応 100W/5A 超急速充電 USB C ナイロン編み 断線防止 iphone17/16/15シリーズ/iPad/MacBook Pro/Galaxy S24/Matebook/iPad/Xperia等USB-C各種対応(1m, ブラック)
UGREEN USB Type Cケーブル PD対応 100W/5A 超急速充電 USB C ナイロン編み 断線防止 iphone17/16/15シリーズ/iPad/MacBook Pro/Galaxy S24/Matebook/iPad/Xperia等USB-C各種対応(1m, ブラック)
¥743
5
KIOXIA(キオクシア)【日本製】USBフラッシュメモリ 32GB USB2.0 国内サポート正規品 KLU202A032GL
KIOXIA(キオクシア)【日本製】USBフラッシュメモリ 32GB USB2.0 国内サポート正規品 KLU202A032GL
¥1,100
6
KIOXIA(キオクシア)【日本製】SDカード 128GB SDXC UHS-I Class10 読出速度100MB/s 国内正規品 メーカー保証5年 KLNEA128G
KIOXIA(キオクシア)【日本製】SDカード 128GB SDXC UHS-I Class10 読出速度100MB/s 国内正規品 メーカー保証5年 KLNEA128G
¥1,880
7
エレコム 電源タップ 6個口 3m 雷ガード 個別スイッチ ほこりシャッター付 耐熱 PSE技術基準適合 ホワイト T-K6A-2630WH
エレコム 電源タップ 6個口 3m 雷ガード 個別スイッチ ほこりシャッター付 耐熱 PSE技術基準適合 ホワイト T-K6A-2630WH
¥1,899
8
キヤノン Canon 純正 インクカートリッジ BCI-381(BK/C/M/Y)+380 5色マルチパック BCI-381+380/5MP 長さ:5.3cm 幅:13.9cm 高さ:10.75cm
キヤノン Canon 純正 インクカートリッジ BCI-381(BK/C/M/Y)+380 5色マルチパック BCI-381+380/5MP 長さ:5.3cm 幅:13.9cm 高さ:10.75cm
¥4,918
9
エルパ(ELPA) 扉付タップラン 電源タップ 延長コード 125V 3m 3個口 ホワイト WBT-N3030B(W)
エルパ(ELPA) 扉付タップラン 電源タップ 延長コード 125V 3m 3個口 ホワイト WBT-N3030B(W)
¥652
10
UGREEN LANケーブル CAT8 1M メッシュLANケーブル カテゴリー8 コネクタ 超光速40Gbps/2000MHz CAT8準拠 イーサネットケーブル 爪折れ防止 シールド モデム ルータ PS3 PS4 Xbox等に対応 1M
UGREEN LANケーブル CAT8 1M メッシュLANケーブル カテゴリー8 コネクタ 超光速40Gbps/2000MHz CAT8準拠 イーサネットケーブル 爪折れ防止 シールド モデム ルータ PS3 PS4 Xbox等に対応 1M
¥699

Amazonのアソシエイトとして、ASCII.jpは適格販売により収入を得ています。

デジタル用語辞典

ASCII.jpメール デジタルMac/iPodマガジン