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 ODER eine Datei außerhalb von bash.exe erstellt wird, kann ich sie 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 Ordner-, bash.exe- und Cygwin-Berechtigungen:
Ich versuche, alle meine Cygwin-Skripte auf das Linux-Subsystem zu verschieben, aber ich möchte nicht jede Datei neu erstellen, dann mit bash kopieren und einfügen, dann mit Dos2unix neu formatieren (sehr langwierig).
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.
Ich gehe davon aus, dass Linux andere Metadaten (und mehr Caching-Informationen usw., da sich auch das Modell der Festplattenpufferung unterscheidet) zu seinen Dateien speichern muss als Windows und dies derzeit durch Speichern der Masterkopie der Struktur implementiert wird 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?
quelle
cp -r --no-preserve=all
die vorherigen Berechtigungen gelöscht werden . Wenn Sie jedoch umfangreiche Änderungen vornehmen möchten, können Sie die Datei im LinuxSubSystem nicht mit einer Windows-Anwendung bearbeiten. Sie müssen sie in Ihrem Windows-Verzeichnis bearbeiten und dann kopieren. Jetzt weiß ich, dass es funktioniert, ABER ich hatte den Eindruck, das Linux-Subsystem sei nativer / in Windows integriert als ein isoliertes Betriebssystem%LocalAppData%\Packages\<some-long-name-of-distro>\LocalState\rootfs
.Antworten:
Ich bin nicht sicher, ob ich Ihre Frage falsch verstehe, aber Ihre Ubuntu-Bash (Fenster oben rechts) sollte Zugriff auf Ihre Windows-basierten Datenträger unter haben
/mnt
. Zum Beispiel befindet sich auf meinem Computer/mnt/c/Users/Scott/Desktop
mein Windows-Desktop und ich kann dort Dateien von vi zum Beispiel lesen / schreiben. 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.Als Entwickler habe ich Projekte auf meinem d: gehostet und die linuxbasierten Tools auf diesen
/mnt/d/projects/someproject/
Ordner gelegt.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.
quelle
@ 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 an einem Projekt in arbeiten
d:/projects/web-project
, können Sie vor Ort einen Symlink erstellen,/var/www/web-project
und alle Dateien, die Sie in Windows ändern, stehen in Linux Bash zur Verfügung.Dazu verwenden Sie den folgenden
ln
BefehlIn der obigen Zeile
/mnt/d
sollte Ihr Laufwerk auf Windows sein. Richten Sie Ihren virtuellen Apache-Host auf diesen Pfad ein und Sie können loslegen.quelle
css-file.css
. Ich habe zu diesem Thema hier gepostet .Es wird empfohlen, Linux-Dateien nicht mit Windows-Apps zu kopieren, zu erstellen oder zu aktualisieren .
Speichern Sie stattdessen Dateien im Windows-Dateisystem (z. B. über
c:\dev\project
), die Sie mit Windows-Tools bearbeiten und / oder mit Linux-Tools / Runtimes / Platforms (z/mnt/c/dev/project
. B. über ) erstellen / testen / ausführen möchten .In Ihrem speziellen Szenario, wenn Sie Ihre Cygwin - Dateien in Bash kopieren, dann öffnen Bash und kopieren Sie die Dateien von Ihrem Cygwin Ordner auf C: in
~/
, wie folgt aus :cp /mnt/c/Users/dave/Documents/Cygwin/* ~/
)HTH.
quelle
Ich musste unter Windows 10 mit PyCharm / eclipse arbeiten, während ich zum Ausführen / Testen eine Linux-Umgebung benötigte.
Ich hatte Probleme beim Auschecken aus dem Git in das Linux-Subsystem und beim Bearbeiten mit PyCharm-Dateien.
Ich hatte das oben in meinem .bashrc im Ubuntu-Bereich. Es funktioniert nahtlos. Ich konnte Windows bearbeiten und in Ubuntu ohne Probleme ausführen / testen.
quelle
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.
quelle