
Ich bin gerade dabei, mein WSL auf meiner Windows 10-Workstation zu konfigurieren und einzurichten, damit ich einige sehr nützliche Befehlszeilentools unter Windows verwenden kann. Nun haben Sie sowohl in WSL als auch in Git-Bash Zugriff auf alle Laufwerke und Partitionen und alle Dateien auf dem PC (auf die Ihr Benutzer Zugriff hat), aber die Pfade sind unterschiedlich. Nehmen wir an, ich habe ein temp
Verzeichnis unter mit einigen Dateien darin
tree C:\Temp
C:\TEMP
├───tempfile1.txt
├───tempfile2.txt
└───tempfile3.txt
Wenn ich dann Git-Bash öffne (mitDasSO Q&A) im C:\Temp
Verzeichnis den Befehl ausführen pwd
Ich sehe den Pfad als
/c/Temp
aber komischerweise sehe ich weder ein Verzeichnis noch sonst irgendein anderes, wenn ich einen ls
Befehl in Git-Bash ausführe ./
c
mnt
Nun zu WSL, wenn ich Open Linux Shell here
über das Rechtsklick-Kontextmenü im Windows Explorer ausführe, pwd
wird der Pfad als
/mnt/c/Temp
Meine Frage ist also: Was und wo befindet sich das Verzeichnis '/' in Windows? Und sind das nur zwei verschiedene Möglichkeiten, das Stammverzeichnis zu „simulieren“?
Bearbeiten:
Windows-Version: Windows 10 Enterprise Edition Version 1903 (Build 18362.267)
WSL-Version: 1809 (Build 17763) (Neueste Version zum Zeitpunkt des Schreibens)
Antwort1
Ihr Git-Bash ist ein typisches Windows-Programm und funktioniert auch so. Es wird C:\
als dessen Stammverzeichnis angesehen.
Ihr WSL ist jedoch anders. Ich bin nicht sicher, ob es ein Container oder eine VM ist, aber es ist definitiv kein typisches Windows-Programm.
Es läuft zwar immer noch unter Windows, aber alles, was Sie in WSL ausführen, sieht sich im Wesentlichen so, als würde es unter Linux und nicht unter Windows ausgeführt. Dadurch folgt es Linux-Standards, wie beispielsweise der Verzeichnisstruktur von Linux.
Dies bedeutet, dass es über ein eigenes Stammverzeichnis verfügt, das statt C:\
lautet /
. Der Speicherort dieses Verzeichnisses befindet sich irgendwo in Ihren AppData und variiert je nach WSL-Version und je nachdem, ob Sie Ubuntu, OpenSUSE oder etwas anderes verwenden.
Unter Linux erhalten Laufwerke keine Buchstaben. Sie erhalten Einhängepunkte. Das Stammverzeichnis /
ist beispielsweise der Einhängepunkt Ihrer Stammpartition oder Ihres Stammordners, im Fall von WSL. Nicht alles darunter /
ist dasselbe Laufwerk. Auf meinem Laptop /home/
befindet es sich beispielsweise auf einer separaten Partition.
/mnt/
ist ein Mount-Verzeichnis in der Linux-Dateistruktur. Es ist für externe Sachen gedacht.
/mnt/c/
ist Ihr C:\
. Das muss so sein, weil Linux keine Laufwerksbuchstaben vergibt. Dies ist die richtige und eleganteste Möglichkeit, von WSL aus auf Windows-Dateien zuzugreifen. Aus diesem Grund hat Bash in WSL einen anderen Speicherort für Ihr C:\
.
Vorausgesetzt, Sie haben die gängigste WSL-Distribution (Ubuntu), /
sollten Sie hier sein:
%LOCALAPPDATA%\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc\LocalState\rootfs
Wenn es dort nicht vorhanden ist oder Sie eine andere Distribution verwenden, schauen Sie hier nach:
%LOCALAPPDATA%\Packages\
Aber Vorsicht: Linux behandelt Dateiberechtigungen ganz anders als Windows. Verwenden Sie hier keine Windows-Tools wie den Datei-Explorer. Wenn Sie zwischen Betriebssystemen interagieren müssen, tun Sie dies innerhalb von WSL.
Antwort2
verwenden Sie einfach diesen Befehl auf Ihrer Bash
cd //wsl.localhost/dir
ich benutze den folgenden Befehl, um in htdocs in meiner Lampe zu gelangen
cd //wsl.localhost/Ubuntu/opt/lampp/htdocs/
Antwort3
Der /-Ordner für WSL befindet sich in
C:\Users\<userName>\AppData\Local\Packages\some serial number for ubuntu installation
und kann auch als Netzwerkressource in
\\wsl$\Ubuntu-18.04
oder ähnlich gefunden werden, je nachdem, welche Linux-Distribution Sie für WSL installiert haben.
Für Git Bash befindet es sich unterC:\Program Files\Git
Sie können den tatsächlichen Speicherort eines Ordners jederzeit ermitteln, indem Sie dort „git bash“ eingeben. explorer.exe .
WSL übersetzt den .
Pfad für Sie und gibt ihn an die von Ihnen ausgeführten Windows-Anwendungen weiter.
Allerdings sollten Sie Dateien aus diesen emulierten /
Ordnern nicht über Windows in Anwendungen öffnen, da diese insbesondere bei WSL-Anwendungen möglicherweise Probleme beim ordnungsgemäßen Lesen haben.
Diese Programme emulieren das Unix-Dateisystem für Sie, ohne eine virtuelle Maschine mit getrennter CPU- und Speicherzuweisung zu erstellen. Sie teilen sich einfach mit Windows, wie es eine normale Anwendung tut. (außer im Fall von WSLv2, bei dem eine vollständige VM mit Windows 10 Pro Hyper-V ausgeführt wird)
Bei den /c
oder /mnt/c
Standorten handelt es sich um Netzwerkmounts, die dem Zuordnen eines Netzlaufwerks in Windows sehr ähnlich sind Z:
und so tun, als sei es eine lokale Festplatte.
GIT Bash und WSL mounten Ihre Windows-Stammlaufwerke, als wären sie Netzwerkressourcen. Unter Linux mounten Sie das Laufwerk an a, /folder
da es das Konzept eines Laufwerkbuchstabens nicht gibt.
Wenn Sie möchten, können Sie WSL anweisen, die Laufwerke auf die gleiche Weise zu mounten wie Git Bash.
Geben Sie in WSL die /etc/wsl.conf
Datei „edit“ ein.
Und fügen Sie Folgendes hinzu:
[automount]
root = /
Speichern Sie die Datei, melden Sie sich von Windows ab und wieder an.
Wenn Sie WSL jetzt starten, verfügt es über dieselben Pfade wie Git Bash für Ihre lokalen Festplatten.
Bedenken Sie auch, dass diese das von Linux-Betriebssystemen verwendete Dateisystem emulieren, allerdings nicht perfekt und nicht auf die gleiche Weise.
Beispielsweise haben Unix-Dateisysteme Berechtigungen für Dateien. Git Bash erkennt automatisch, was eine ausführbare Datei „SEIN SOLLTE“ und fügt das Attribut +x hinzu. WSL kann das nicht sehr gut und macht normalerweise einfach alles ausführbar.