
そこで私は現在、Windows 10ワークステーションでWSLを設定してセットアップしているところです。これにより、Windowsで非常に便利なコマンドラインツールを使用できるようになります。現在、WSLとGit-Bashの両方で、PC上のすべてのドライブとパーティション、およびすべてのファイル(ユーザーがアクセスできるもの)にアクセスできますが、パスは異なります。temp
いくつかのファイルがあるディレクトリがあるとします。
tree C:\Temp
C:\TEMP
├───tempfile1.txt
├───tempfile2.txt
└───tempfile3.txt
次にGit-Bash(これSO Q&A)C:\Temp
ディレクトリでコマンドを実行すると、pwd
パスは次のようになります
/c/Temp
しかし奇妙なことに、 Git-Bash でls
コマンドを実行すると、ディレクトリ/
が表示されずc
、mnt
ディレクトリも存在しません。
さて、WSLですが、Open Linux Shell here
Windowsエクスプローラーの右クリックコンテキストメニューから実行すると、pwd
パスが次のように表示されます。
/mnt/c/Temp
そこで私の質問は、Windows の '/' ディレクトリとは何であり、どこにあるのかということです。また、これらはルート ディレクトリを「モックする」 2 つの異なる方法にすぎないのでしょうか。
編集:
Windows バージョン: Windows 10 Enterprise Edition バージョン 1903 (ビルド 18362.267)
WSL バージョン: 1809 (ビルド 17763) (執筆時点での最新リリース)
答え1
Git-Bash は典型的な Windows プログラムであり、そのように機能します。C:\
ルート ディレクトリとして認識されます。
ただし、WSL は異なります。コンテナーなのか VM なのかはわかりませんが、いずれにし
ても典型的な Windows プログラムではないことは明らかです。Windows 上では動作しますが、WSL で実行するものはすべて、基本的に Windows ではなく Linux 上で動作しているとみなされます。これにより、Linux のディレクトリ構造などの Linux 標準に準拠することになります。
つまり、独自のルート ディレクトリがあり、 ではなく にC:\
なります/
。このディレクトリの場所は AppData 内のどこかにあり、WSL のバージョンや、Ubuntu、OpenSUSE、その他のどれを使用しているかによって異なります。
Linux では、ドライブに文字は割り当てられません。マウント ポイントが割り当てられます。たとえば、ルートは/
ルート パーティション (WSL の場合はフォルダー) のマウント ポイントです。その下にあるものはすべて/
同じドライブではありません。たとえば、私のラップトップでは、/home/
別のパーティションにあります。
/mnt/
Linux ファイル構造内のマウント ディレクトリです。外部のものを対象としています。
/mnt/c/
はあなたの ですC:\
。Linux はドライブ文字を指定しないので、このようにする必要があります。これは、WSL から Windows ファイルにアクセスする正しい、最もエレガントな方法です。WSL の bash が に別の場所を持つのは、このためですC:\
。
最も一般的な WSL ディストリビューション (Ubuntu) を使用している場合は、次/
のようになります。
%LOCALAPPDATA%\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc\LocalState\rootfs
そこにない場合、または別のディストリビューションを使用している場合は、ここを参照してください。
%LOCALAPPDATA%\Packages\
ただし、Linux はファイル権限を Windows とはまったく異なる方法で処理することに注意してください。ここでは、ファイル エクスプローラーなどの Windows ツールを使用して何もしないでください。OS 間でやり取りする必要がある場合は、WSL 内から行ってください。
答え2
このコマンドをbashで使うだけです
cd //wsl.localhost/dir
私は以下のコマンドを使用して、ランプのhtdocsにアクセスします
cd //wsl.localhost/Ubuntu/opt/lampp/htdocs/
答え3
WSL の / フォルダーは にあり 、 WSL 用にインストールした Linux ディストリビューションに応じて、 または同様の のC:\Users\<userName>\AppData\Local\Packages\some serial number for ubuntu installation
ネットワーク リソースとしても見つかります 。\\wsl$\Ubuntu-18.04
git bashの場合は次の場所にありますC:\Program Files\Git
フォルダーに移動してexplorer.exe .
「git bash」と入力すると、いつでも実際の場所を見つけることができます。また、wsl は.
パスを変換し、実行する Windows アプリケーションに渡します。
そうは言っても、これらのエミュレートされた/
フォルダーのファイルをアプリケーションのウィンドウ経由で開くべきではありません。特に WSL の場合は、適切に読み取れない可能性があります。
これらのプログラムは、分離された CPU とメモリ割り当てを持つ仮想マシンを作成せずに、Unix ファイル システムをエミュレートします。通常のアプリケーションと同様に、Windows と共有するだけです。(Windows 10 Pro Hyper-V を使用して完全な VM を実行している WSLv2 の場合を除く)
または場所は/c
、/mnt/c
Windows でネットワーク ドライブをマッピングしてZ:
、それをローカル ディスクのように扱うのと非常によく似たネットワーク マウントです。
GIT bash と WSL は、Windows ルート ドライブをネットワーク リソースであるかのようにマウントします。Linux では、/folder
ドライブ文字の概念がないため、ドライブをにマウントします。
必要に応じて、git bash と同じ方法でドライブをマウントするように WSL に指示できます。
wslで/etc/wsl.conf
ファイルを編集すると
そして次の行を追加します。
[automount]
root = /
ファイルを保存し、Windows からログオフして再度ログインします。
これで、WSL を起動すると、ローカル ハード ドライブの git bash と同じパスが設定されます。
また、これらは Linux オペレーティング システムで使用されるファイル システムをエミュレートしていますが、完璧にエミュレートされているわけではなく、同じ方法でエミュレートされているわけでもないことに注意してください。
たとえば、Unix ファイル システムにはファイルに対する権限があり、git bash は自動的に「実行可能ファイルであるべき」ものを検出し、+x 属性を追加します。WSL はこれをあまりうまく行わず、通常はすべてを実行可能にするだけです。