web-dev-qa-db-ja.com

Linux開発環境用のWindowsサブシステムでファイルを編集する

Linux用Windowsサブシステム (WSL)は、ほとんどのコマンドラインLinuxツールを利用可能にし、変更なしにWindows上で動作させるのに非常にうまく機能します。しかし、開発には少しトリッキーです。

  • 十分にサポートされている同等のWindows(Ruby、Nodeなど)を持たないLinuxツールチェーンを使用してプロジェクトを構築する
  • Visual StudioコードなどのWindowsベースのGUIエディタを使用してファイルを編集します。

問題は、Windowsのapps が仮想lxssファイルシステム 内のファイルを変更できないことです。これらのファイルを直接変更すると、あらゆる種類の問題が発生することが知られています。

したがって、開発にWSLを使用することになると、最適とは言えない選択は2つしかないようです。

  1. プロジェクトをlxss(/home/foo)に保存します。通常のツールチェーンは正しく機能します。しかし、編集は端末ベースのVim/Emacsか、 janky Xサーバ の下で実行できるものに限られています。これはWindowsで実行されているネイティブエディタよりもスムーズではありません。

  2. プロジェクトをWindowsファイルシステム(/mnt/c/Users/foo)の下に保存します。今すぐWindowsベースのエディタが開発に使用できます。しかし、Linuxベースのツールチェーンは「ネットワークドライブ」で使用するようには設計されていないため脆弱であり、 ファイル監視 または databases で問題を引き起こす可能性があります。 。

ここで両方の長所を活用する方法はありますか。つまり、ネイティブのWindowsアプリケーションを使用して編集できるようにしながら、Linuxツールチェーンを通常どおりローカルドライブ上で機能させることができますか。

21
Andrew Mao

マイクロソフトは最近これに対する包括的なサポートを追加しました、そしてそれは2019年4月(19H1)アップデートで一般に利用可能になるはずです。準備ができたら、Linuxディストリビューションが実行されているときはいつでも9Pサーバーがバックグラウンドで実行されます。 9PサーバーはLinuxファイルシステムのメタデータを処理できるようになり、Windowsはそれを安全にアクセスできるようにネットワークドライブとして扱うことができるようになります。あなたはそれについて読むことができます https://blogs.msdn.Microsoft.com/commandline/2019/02/15/whats-new-for-wsl-in-windows-10-version -1903 /

この新機能により、9Pサーバーを経由する限り、WindowsからWindowsとLinuxの両方のファイルシステムファイルに安全にアクセスできます。これはWSL内からネイティブに処理されます。たとえば、WSLコマンドラインから、VS CodeでWindowsファイルを開く場合はcode /mnt/c/Users/username/src/windows-file.txtを、VS CodeでLinuxファイルを開く場合はcode /home/username/src/linux-file.txtを入力できます。

あなたがWindowsインサイダープログラムの一員でないなら、あなたはまだこれにアクセスすることができないでしょう、それでなおあなたはwslpathのようなより古い方法を使わなければならないでしょう。

wslpathはWindowsスタイルのパスとLinuxスタイルのパスを変換するので、WSLコマンドラインからWindowsファイルを簡単に開くことができます。 https://github.com/Microsoft/WSL/issues/3146#issuecomment-388118689 によると、Linuxのファイルシステムパスの変換は拒否されます%AppData%\ lxss)、9PがないとWindowsからこれらのファイルを変更するのは危険です。つまり、/home/username/src/linux-file.txtを開くことはできませんが、code "$(wslpath -aw /mnt/c/Users/username/src/windows-file.txt)"を使用することはできます。

これまで、同じ変換を実行するためのサードパーティ製ツールがいくつもありましたが、wslpathはネイティブにそれを行います - 実際、ls -l /bin/wslpathはそれが/ initへの単なるリンクであることを示しています。

3
Shane Lawrence

私はこの質問を見てきたよりも賢い人たちだと思います。しかし私はそれに答えます。私は正直に答えが現在ノーであると信じています。あなたが(私が知っていることを)言及したもの以外に、両方の世界を最大限に活用するためのより良い方法があります。

私はそれが誰かが望む答えではないと確信しています、しかし私はそれが正しい答えだと思います。 Microsoftがより円滑にするための努力をしているのは確かですが、まだ実現していません。

1
trueCamelType

あなたがLinuxのコマンドを実行し、Windowsエディタで編集したい場合。あなたは(c:\ source \のような)あなたのファイルシステムのどこかに(編集してテストしたい)あなたのソースコードを保持することができ、そして/ mnt/c/sourceを通してLinuxコンソールでそれにアクセスすることができます。お役に立てれば。

0
Eli

2018年の前半に、マイクロソフトはこれらの問題のいくつかに対処するいくつかの改良をWSLにリリースしました:

どちらも私の最初の質問の問題に完全には対処していませんが、特定のケースでは使い勝手が向上する可能性があります。

0
Andrew Mao