web-dev-qa-db-ja.com

Windows Linux Subsystem - Ubuntu外のファイルへのアクセス

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

スクリーンショットに説明があるはずです。

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

Folder ORファイルがbash.exeの外部で作成されると、権限や所有権に関係なく、見ることはできません。

ファイルの権限を表示するためにCygwinを使用しなければならなかった情報を表示するために、フォルダが表示されるかどうかを確認するために権限も変更しました。 (下部にある2つのコマンドウィンドウ)

フォルダ、bash.exe、Cygwinのアクセス許可を示すスクリーンショット:

enter image description here

すべてのCygwinスクリプトをLinuxサブシステムに移動しようとしていますが、すべてのファイルを作成し直してからbashを使用してコピーして貼り付け、再フォーマットしてから使用する必要はありません。 Dos2unix(非常に長い間)。

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

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

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

本当にこれをする必要があるなら、回避策はbash.exe -c "mv%1/home/$ USER /"を行うドラッグ&ドロップの.batスクリプトかsomesuchを書くことでしょう。 (おそらく、%1を有効なWSLパスに変換するために、sedとtrを使って賢い作業をしなければならないでしょう。)

あるいは、ファイルをWindowsディレクトリに置き、WSL内で "cd〜; ln -s/mnt/c/path/to/my/files"を実行してWSLホームディレクトリにあるように見せることができますか。

81
Dave Hamilton

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

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

特にsym-linkやLinux/Windows間のFSの境界を越えたビルドでは、Windowsビルドを定期的に更新するようにしてください。

93
scottt732

@ scottt732が美しく答えた。

Windowsで作業をしていて、Linux Subsystemでそれらのファイルにすばやくアクセスしたい開発者のためのヒントにすぎません。 シンボリックリンクを使うことができます。

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

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

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

上の行で/mnt/dはウィンドウズ上のあなたのドライブです。あなたのApache仮想ホストをこのパスに設定すれば準備完了です。

20
Riz

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

代わりに、Windowsツールを使用してファイルを編集したり、Linuxツール/ランタイム/プラットフォームを使用して(たとえばc:\dev\projectを使用して)ビルド/テスト/実行するファイルをWindowsファイルシステム(/mnt/c/dev/projectなど)に保存します。

あなたの特定のシナリオで、あなたがあなたのCygwinファイルをBashにコピーしたいのであれば、Bashを開いて、以下のようにC:のあなたのCygwinフォルダから~/にファイルをコピーしてください:cp /mnt/c/Users/dave/Documents/Cygwin/* ~/

HTH.

9
Richard Turner

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

私はgitからLinuxサブシステムへのチェックアウトやPyCharmファイルでの編集に関する問題を抱えていましたが、すぐには見えず問題がありました。

devcode=/DevCode

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

私はUbuntu地域の私の.bashrcで上記を持っていました。シームレスに動作しています。私は問題なくWindowsを編集してUbuntuで実行/テストすることができました。

1
Narayanaa

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

0
kometen