WSL: Interaktion zwischen den Systemen (I)

Beiträge der WSL Serie

Nach der Installation des Windows Subsystems für Linux und einer Linux Distribution haben wir nun zwei Systeme. Aber die zwei Systeme sind nicht komplett voneinander getrennt zu sehen, denn Microsoft hat viele Möglichkeiten eingebaut, damit die zwei Systeme miteinander agieren können und Anwender so das Beste aus beiden Welten kombinieren können.

Keine getrennten Systeme!

Eine wichtige Tatsache ist, dass es sich hier nicht um zwei getrennte Systeme handelt, wie es z.B. bei den den üblichen VM wie VirtualBox oder Vmware Workstation der Fall wäre.

Um dies etwas aufzuzeigen, installieren wir einmal ssh unter Linux (Debian):

sudo apt-get install ssh
sudo service ssh start

Sobald der ssh Service unter Debian startet bekommen wir unter Windows das Popup der Firewall: Bei welchen „Netzwerkklassen“ darf auf den Port zugegriffen werden.

Wenn wir unter Windows einen ssh Client haben, dann können wir da auch drauf zugreifen über die ip 127.0.0.1.

Wir können aber auch die IPs vergleichen:

ip address

Wir bekommen die Devices angezeigt und die IPs von Windows (Welche wir uns z.B. mit

ipconfig -all

auf der Eingabeaufforderung anzeigen lassen können).

Zugriff auf Windows Dateien aus der WSL

Wenn wir nun in einer Shell von Debian sind, dann können wir auf die Dateien von unserem Windows System zugreifen. Dazu werden die Laufwerke unter /mnt gemounted.

Somit finden wir unter /mnt/c unser Laufwerk C:

Wir können dies unter Linux prüfen über den Befehl

mount

Dies gibt uns unter anderem aus, wie einzelne Filesysteme eingebunden wurden:

C:\ on /mnt/c type drvfs (rw,noatime,uid=1000,gid=1000,case=off)

Bei einem System von mir, war hier aber uid und gid 0 statt 1000. Daher hatte nur root Schreibzugriff. Dies kann man über die /etc/wsl.conf steuern:

[autoconf]<br></br>options = "metadata,uid=1000,gid=1000"

Hier können wir die Optionen, die der mount Befehl unterstützt, eintragen.

Gemeinsames Home

Derzeit ist es so, dass wir zwei Home Laufwerke haben. Unter Linux finden wir unsere Dateien unter /home/<username>/ und unter Windows haben wir c:\Users\<username>.

Dies können wir aber auch noch anpassen und alle unsere Dateien unter c:\users\<username> legen. Der erste wichtige Schritt ist die Kontrolle, dass unser User die notwendigen Schreibrechte auf /mnt/c hat. Ist dies gegeben, dann können wir unser Unix-Homelaufwer verschieben und statt dessen einen Softlink auf das Windows Verzeichnis einrichten.

In dem folgenden Beispiel habe ich <username> durch konrad ersetzt – mein User unter Linux und Windows ist konrad:

cd /home<br></br>sudo mv konrad konrad.old<br></br>sudo ln -s /mnt/c/Users/konrad konrad<br></br>cp konrad.old/.??* konrad/

Der letzte Befehl kopiert die Dateien, die mit . anfangen, in das Windows Homeverzeichnis. Hier ist vor allem die .bashrc mit Einstellungen für die Linux Shell wichtig.

Sollten bereits weitere Dateien erzeugt worden sein, so sind diese ggf. auch noch zu kopieren.

Zugriff auf Linux Dateien von Windows aus

Nun haben wir unter Linux auf die Windows Dateien zugegriffen. Aber vielleicht wollen wir auch den umgekehrten Fall: Zugriff aus z.B. dem Windows Explorer auf die Dateien des Linux Subsystems.

Dafür hat Microsoft den Share \\wsl$ erzeugt. Wenn man im Windows Explorer in der Adresszeile

\\wsl$

eingibt, dann werden alle Linux Subsysteme angezeigt. (Bei mir gibt es nur das Debian System, somit wird Debian angezeigt)

Ein Doppelclick zeigt dann den Inhalt des Debian Dateisystems an. Ich kann aber auch immer die Adresse direkt angeben:

\\wsl$\Debian

Damit haben wir nun Zugriff auf alle Dateien sowohl unter Linux als auch unter Windows.

Im nächsten Beitrag „WSL: Interaktion zwischen den Systemen (II)“ werde ich auf die Interaktion zwischen Projekten eingehen.