it-swarm.com.de

Windows Linux Subsystem - Zugriff auf Dateien außerhalb von Ubuntu

Warum kann ich eine Datei, die ich zum Beispiel aus Windows heraus erstelle, unter dem Linux-Subsystem in Windows 10 (bash.exe) nicht sehen?

Der Screenshot sollte erklären.

Ordner: OMG wurde im Windows Explorer erstellt. Der Ordner OMGBash wurde mit dem Linux-Subsystem bash.exe erstellt

Wenn ein Ordner OR außerhalb von bash.exe erstellt wird, kann ich ihn ungeachtet der Berechtigungen und des Eigentums nie sehen.

Um die Informationen anzuzeigen, die ich zum Anzeigen von Dateiberechtigungen mit Cygwin verwenden musste, habe ich auch die Berechtigungen geändert, um festzustellen, ob der Ordner angezeigt wird. (Die beiden Befehlsfenster unten)

Screenshot mit den Berechtigungen für Ordner, bash.exe und Cygwin:

 enter image description here

Ich versuche, alle Skripte meiner Cygwin über auf das Linux-Subsystem zu bewegen, aber Ich habe keine Lust jede Datei neu zu erstellen, dann kopieren zu müssen und Vergangenheit bash verwendet, dann Neuformatierung dann dos2unix mit (sehr langatmig) .

Gefunden bei GitHub für das Linux-Subsystem:

das direkte Kopieren von Windows in das Linux-Subsystem wird nach Angaben anderer Tickets nicht unterstützt. Unter AppData befindet sich irgendwo (ich vergesse wo) ein Verzeichnis, das die Dateien für das WSL-Dateisystem enthält. Wenn Sie jedoch neue Dateien dort ablegen oder vorhandene Dateien dort ändern, werden Ihre Änderungen in WSL nicht korrekt wiedergegeben.

Meine beste Vermutung ist, dass Linux verschiedene Metadaten gespeichert werden muss (und Caching-Informationen, usw., da seine Disk-Puffermodell ist auch anders) um seine Dateien als Windows der Fall ist, und dass dies zur Zeit durch das Speichern der Master-Kopie der Struktur implementiert ist des Linux-Dateisystems in einer Datenbank, und nur mit dem Windows-Dateisystem als bequemen BLOB-Speicher für diese Datenbank.

Wenn Sie dies wirklich tun müssen, besteht eine Problemumgehung darin, ein Drag'n'Drop-Skript (.bat) oder etwas Ähnliches zu schreiben, das bash.exe -c "mv% 1/home/$ USER /" ausführt. (Sie müssen einige clevere Arbeiten mit sed und tr ausführen, um% 1 wahrscheinlich in einen gültigen WSL-Pfad zu übersetzen.)

Alternativ - könnten Sie Ihre Dateien in ein Windows-Verzeichnis stellen und in der WSL "cd ~; ln -s/mnt/c/path/to/my/files" ausführen, um sie in Ihrem WSL-Homedir erscheinen zu lassen?

80
Dave Hamilton

Ich bin nicht sicher, ob ich Ihre Frage falsch verstehe, aber Ihre Ubuntu-Bash (Fenster oben rechts) sollte unter /mnt Zugriff auf Ihre Windows-basierten Datenträger haben. Zum Beispiel ist auf meinem Computer /mnt/c/Users/Scott/Desktop mein Windows-Desktop und ich kann dort Dateien von vi lesen/schreiben, zum Beispiel. Ich glaube nicht, dass das Gegenteil der Fall ist. Das heißt, ich glaube nicht, dass Sie Ihre Bash-Welt vom Windows Explorer aus erkunden können.

Was ich als Entwickler getan habe, ist, Projekte auf meinem d: zu hosten und die Linux-basierten Tools auf diesen Ordner /mnt/d/projects/someproject/ zu verweisen.

Stellen Sie sicher, dass Sie Ihre Windows-Builds regelmäßig aktualisieren, da sie bei jedem Build viele Probleme zu beheben scheinen, insbesondere im Zusammenhang mit Sym-Links und dem Überschreiten von FS-Grenzen zwischen Linux/Windows.

89
scottt732

@ scottt732 hat wunderbar geantwortet.

Nur ein Tipp für Entwickler, die unter Windows arbeiten und schnell auf diese Dateien im Linux-Subsystem zugreifen möchten. Sie können symbolische Links verwenden.

Wenn Sie beispielsweise in d:/projects/web-project an einem Projekt arbeiten, können Sie an der Position /var/www/web-project einen Symlink erstellen. Alle Dateien, die Sie in Windows ändern, sind für den Zugriff in Linux Bash sofort verfügbar.

Verwenden Sie dazu den Befehl ln

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

In der obigen Zeile sollte /mnt/d Ihr Laufwerk unter Windows sein. Richten Sie Ihren virtuellen Apache-Host auf diesen Pfad ein und Sie können loslegen.

19
Riz

Wir empfehlen, dass Sie Linux-Dateien nicht mit Windows-Apps kopieren/erstellen/aktualisieren .

Speichern Sie stattdessen Dateien im Windows-Dateisystem (z. B. c:\dev\project), die Sie mit Windows-Tools bearbeiten und/oder mit Linux-Tools/Runtimes/Platforms (z. B. über /mnt/c/dev/project) erstellen/testen/ausführen möchten.

Wenn Sie in Ihrem speziellen Szenario Ihre Cygwin-Dateien in Bash kopieren möchten, öffnen Sie Bash und kopieren Sie die Dateien aus Ihrem Cygwin-Ordner auf C: in ~/, wie folgt: cp /mnt/c/Users/dave/Documents/Cygwin/* ~/)

HTH.

9
Richard Turner

Ich hatte ein ähnliches Bedürfnis, Dateien zwischen WSL und win10 zu kopieren. Am Ende habe ich sshd auf der Ubuntu-Installation aktiviert, damit ich von win10 in Linux sshen konnte. Dann benutze ich Winscp, um Dateien hin und her zu kopieren. Nicht optimal, aber ich kopiere keine Dateien sehr häufig. Ich habe versucht, den Beitrag zu finden, mit dem ich sshd aktiviert habe, kann ihn aber nicht finden.

0
kometen