Windows Linuxサブシステム-Ubuntuの外部のファイルへのアクセス


90

たとえば、Windows内からファイルを作成した場合、Windows 10のLinuxサブシステム(bash.exe)の下でファイルを表示できないのはなぜですか

スクリーンショットで説明する必要があります。

フォルダー:OMGはWindowsエクスプローラー内から作成されました。フォルダーOMGBashは、Linuxサブシステムbash.exeで作成されました

bash.exeの外部でフォルダーまたはファイルが作成された場合、アクセス許可と所有権に関係なく、それを見ることができません。

Cygwinを使用してファイルのアクセス許可を表示する必要がある情報を表示するために、フォルダーが表示されるかどうかを確認するアクセス許可も変更しました。(下部にある2つのコマンドウィンドウ)

フォルダー、bash.exeおよびCygwinの権限を示すスクリーンショット:

ここに画像の説明を入力してください

私はLinuxのサブシステムへの上にすべての私のCygwinスクリプトを移動しようとしています、 しかし、その後、コピーした過去が、その後DOS2UNIXを使用して、その後再フォーマットは、bashを使用して、私はすべてのファイルを再作成空想しません(非常に長いったらしいです)。

LinuxサブシステムのGitHubでこれを見つけました。

他のチケットに関する議論によると、WindowsからLinuxサブシステムに直接コピーすることはサポートされていません。AppDataの下に、WSLファイルシステムのファイルが含まれているように見えるディレクトリがあります(どこか忘れています)。ただし、そこに新しいファイルを配置したり、既存のファイルを変更したりすると、WSL内に変更が正しく反映されません。

私の最良の推測は、Linuxはファイルとは異なるメタデータ(およびディスクバッファリングモデルも異なるため、より多くのキャッシング情報など)を保存する必要があり、これは現在、構造のマスターコピーを保存することで実装されていることですある種のデータベース内のLinuxファイルシステムを使用し、Windowsファイルシステムをそのデータベースの便利なBLOBストアとして使用するだけです。

本当にこれを行う必要がある場合、回避策はdrag'n'drop .batスクリプトまたはbash.exe -c "mv%1 / home / $ USER /"を実行するスクリプトを記述することです。(おそらく、%1を有効なWSLパスに変換するには、sedとtrを使用して巧妙な作業を行う必要があります。)

または、Windowsディレクトリにファイルを配置し、WSL内で「cd〜; ln -s / mnt / c / path / to / my / files」を実行して、WSL homedirにあるように見せてもらえますか?


Linux環境でWindows HDDをマウントすることはできますか?そのようにして、すべてのファイルをリアルタイムで表示する必要があります...(またはCygwinホームのディレクトリのみ)
Hastur

3
素晴らしいアイデアですが、残念ながらファイルは表示されません。それを回避する方法は、Bash.exeを使用してWindowsディレクトリからLinuxサブシステムディレクトリにファイルをコピーすることです。この方法で実行するcp -r --no-preserve=all には、以前のアクセス許可を削除する必要があります。それでも、大きな変更を加える場合は、Windowsアプリケーションを使用してLinuxSubSystemのファイルを編集することはできません。Windowsディレクトリで編集してからコピーする必要があります。今、私はこれを知っています、その実行可能ですが、Linuxサブシステムは孤立したOSよりもネイティブ/ウィンドウに統合されているという印象を受けました
デイブ・ハミルトン


Windowsストアからディストリビューションをインストールする場合、ファイルシステムはにあります%LocalAppData%\Packages\<some-long-name-of-distro>\LocalState\rootfs
イアン・ケンプ

回答:


101

あなたの質問を誤解しているかどうかはわかりませんが、ubuntu bash(右上のウィンドウ)がWindowsベースのディスクにアクセスできるはず/mntです。たとえば、私のマシンに/mnt/c/Users/Scott/DesktopはWindowsデスクトップがあり、viからexでファイルを読み書きできます。私は、反対がまだ真実であるとは思わない。つまり、Windowsエクスプローラーからbashの世界を探索できるとは思わない。

開発者として私がやっていることは、d:でプロジェクトをホストし、Linuxベースのツールがその/mnt/d/projects/someproject/フォルダーを指すようにすることです。

Windowsビルドを定期的に更新するようにしてください。特にLinuxとWindowsの間でシンボリックリンクやFS境界を越える場合、各ビルドで多くの問題が修正されるようです。


1
あなたは正しい、私は銃を少し跳んだと思う。BashはWindowsファイルにアクセスできますが、WindowsはLinux Sub Systemディレクトリにファイルをコピーできません。(その後コピーできますが、ファイルのアクセス権を保持しているためBashを見ることができません)bashをインストールしたとき、最も論理的なことは、プロジェクトを1つのLinux環境から別のLinux環境に移動することでした(Cwyginからビンに移動しようとしました)これが私を頭痛の道に導いた。現在、以前のLinux環境の開始ディレクトリを作成し、そこから作業するようにBashrcを構成しました。ご回答ありがとうございます。
デイブハミルトン

待って、どうやって/ mnt / dを表示させますか?たとえば、MTP経由で電話を接続すると、「This PC \ PhoneName」のようなパスの下に表示されますが、それに関連付けられたドライブ文字はありません。
マイケル

末尾のスラッシュがない場合、シンボリックリンクは機能します。また、あなたはローカルで実行Djangoのプロジェクトのようなことを行うと、ブラウザでそれらにアクセスするには、ファイルシステムのWindowsの側でファイルを持っている必要があります
ZAGS

しかし、Windowsファイルを変更してもLinuxファイルは更新されませんか?!?!
PrimitiveNom

20

@ scottt732は美しく答えました。

Windowsで作業し、Linuxサブシステム内のこれらのファイルにすばやくアクセスしたい開発者向けのヒントです。シンボリックリンクを使用できます

たとえば、でプロジェクトに取り組んでいる場合d:/projects/web-project、場所/var/www/web-projectでシンボリックリンクを作成できます。ウィンドウで変更したすべてのファイルは、Linux Bashで簡単にアクセスできます。

このためには、ln次のようなコマンドを使用します

ln -s  /mnt/d/projects/web-project  /var/www/web-project

上記の行で/mnt/dは、Windows上のdドライブを想定しています。Apache仮想ホストをこのパスにセットアップすると、準備は完了です。


サーバーを毎回再起動する必要がない限り、実際には同期しませんか?
PrimitiveNom

@Anthonyのシンボリックリンクなので、このためにサーバーを再起動する必要はありません。実際には、これは同期ではなく、そのフォルダ/パスを指しているだけです。
リズ

1
私は問題を理解しました。これは、CSSファイルの名前にダッシュが含まれているためです(例:)css-file.css。私はこの問題についてここに投稿しました
PrimitiveNom

9

Windowsアプリを使用してLinuxファイルをコピー/作成/更新しないことをお勧めします。

代わりに、c:\dev\projectWindowsツールを使用してファイルを編集したい、および/またはLinux tools / runtimes / platformsを使用してビルド/テスト/実行する(たとえば、)Windowsファイルシステム(たとえば)にファイルを保存します/mnt/c/dev/project

:あなたの特定のシナリオでは、あなたがして、バッシュにオープンバッシュをごCygwinのファイルをコピーし、C上のCygwinのフォルダからファイルをコピーしたい場合は~/、このように、: cp /mnt/c/Users/dave/Documents/Cygwin/* ~/

HTH。


1

Windows 10でPyCharm / eclipseを使用する必要がありましたが、実行/ testindにはLinux環境が必要でした。

gitからLinux Sub Systemにチェックアウトする際に問題があり、PyCharmファイルでの編集はすぐには見られず、問題がありました。

devcode=/DevCode

if [ ! -L $devcode ]; then
     ln -s /mnt/c/DevCode /DevCode 
fi

Ubuntu領域の.bashrcに上記のものがありました。シームレスに機能しています。Windowsを編集し、Ubuntuで問題なく実行/テストできました。


0

同様に、WSLとwin10の間でファイルをコピーする必要がありました。最終的にはUbuntuインストールでsshdを有効にして、win10からLinuxにsshできるようにしました。次に、winscpを使用してファイルを前後にコピーします。最適ではありませんが、ファイルを頻繁にコピーすることはありません。sshdを有効にするために使用した投稿を見つけようとしましたが、見つかりませんでした。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.