Ich verwende Ubuntu unter Windows.
newFolder
Wenn ich unter Windows einen Ordner im Stammverzeichnis erstelle und C:\Users\myuser\AppData\Local\lxss\root\Newfolder
ihn dann in Bash ausführe, ls
wird mir der gerade erstellte neue Ordner nicht angezeigt.
Wie kann ich das beheben, sodass ich Ordner und Dateien unter Windows erstellen und dann von Bash aus darauf zugreifen kann?
Antwort1
Aktualisieren:
Seit Windows 10 Version 1903 ist es möglich, von Windows aus auf Linux-Dateien zuzugreifen \\wsl$\
. Sie können also explorer.exe .
von bash aus ausführen oder \\wsl$\
direkt in die Adressleiste des Explorers eingeben
SehenWas ist neu für WSL in Windows 10, Version 1903?
Auch hier gibt es noch die Warnung, dass Siedürfen NICHT über den AppData-Ordner auf Ihre Linux-Dateien zugreifen!
Für ältere Versionen von Windows 10 siehe unten
Linux-Dateien im WSL-Root-Dateisystem werden speziell mit POSIX-Berechtigungen erstellt, die in erweiterten NTFS-Attributen gespeichert sind. Sie können dies sehen, indem Sie ausführen fsutil file layout lxss\root
und die$EA
Stromdort. Wenn Sie die Dateien direkt von Windows aus erstellen, werden Sie einiges durcheinander bringen, da Win32-Apps nichts über Linux und seine Dateimetadaten wissen
Das Problem entsteht beispielsweise, wenn Sie eine Windows-App/ein Windows-Tool verwenden, um eine Datei unter Ihrem Distributionsstamm zu öffnen, zu erstellen und/oder zu ändern: Da die Datei mit einem Windows-Tool erstellt wurde, verfügt die Datei nicht über Linux-Dateimetadaten (z. B. Berechtigungen, Eigentümer, Zugriffs-/Aktualisierungszeitstempel usw.). Für Linux (das nur Linux-Dateimetadaten empfängt) bedeutet dies also, dass die Datei keine Linux-Dateimetadaten enthält.Die Datei wird möglicherweise als leer gemeldet, existiert möglicherweise nicht einmal oder verfügt über einige Metadaten, aber diese Metadaten spiegeln möglicherweise nicht die Details der Datei wider, was dazu führte, dass der Inhalt der Datei beschädigt wurde.
Deshalb hat MS eindringlich gewarnt:
Erstellen und/oder ändern Sie unter KEINEN Umständen Linux-Dateien mit Windows-Apps, -Tools, -Skripten, -Konsolen usw.
Das Erstellen/Ändern von Linux-Dateien unter Windows führt wahrscheinlich zur Beschädigung von Daten und/oder Ihrer Linux-Umgebung, sodass Sie Ihre Distribution deinstallieren und neu installieren müssen!
Dateien, die nur für Linux relevant sind, sollten nur aus WSL erstellt werden. Wenn Sie Dateien erstellen möchten, auf die beide Systeme zugreifen können, erstellen Sie sieaußerhalb der WSL-Wurzelund Zugriff von WSL über den Einhängepunkt in /mnt
wie/mnt/drive/path
Wenn Sie Dateien auf Windows-Dateisystemen erstellen möchten, aber die Groß- und Kleinschreibung beibehalten möchten, verwenden Sie
fsutil file setCaseSensitiveInfo <directory name> enable
Die Flagge kann auch überprüft werden mitfsutil file queryCaseSensitiveInfo <directory name>
Siehe auchWie greife ich von Windows 10 WSL auf Linux-/Ubuntu-Dateien zu?
Antwort2
Sie können in Ubuntu keine Ordner erstellen und von Windows aus darauf zugreifen. Aber Sie können das Gegenteil tun.
Sie können auf Ihre Windows-Laufwerke unter zugreifen /mnt
. Wenn Sie das tun, ls /mnt
werden Ihnen alle Ihre Laufwerke angezeigt. /mnt/c ist also der Pfad Ihres Laufwerks C. Ebenso /mnt/c/Users/username/Desktop
können Sie über Bash auf Ihren Desktop zugreifen.
Rufen Sie also einfach mit Bash den gewünschten Pfad auf und greifen Sie auf Windows-Dateien und -Ordner zu. Weitere Informationen zum schnellen Zugriff auf Ihre Windows-Dateien finden Sie unter Verwendung von Symlinks.hier zu finden
Antwort3
Denken Sie anders: Wenn Sie Dateien mit Windows-Apps und -Tools erstellen und von Bash aus darauf zugreifen möchten, erstellen Sie diese Dateien usw. in Ihrem Windows-Dateisystem und greifen Sie von Bash aus darauf zu bzw. kopieren Sie sie.
Hier ist ein Beispiel für das Erstellen einer Datei in PowerShell, das anschließende Aufrufen von Bash zum Kopieren der erstellten Datei in den Home-Ordner und das anschließende Aufrufen von Bash zum Schreiben des Dateiinhalts:
PS C:\dev\temp> Set-Content ./hello.txt -Value "Hello, World!" -Encoding ASCII
PS C:\dev\temp> cat .\hello.txt
Hello, World!
PS C:\dev\temp> bash -c "cp /mnt/c/dev/temp/hello.txt ~/"
PS C:\dev\temp> bash -c "cat /mnt/c/dev/temp/hello.txt"
Hello, World!
HTH.