WSL (Windows Subsystem for Linux) ermöglicht es, Linux-Programme unter Windows 10 laufen zu lassen.
WSL ist keine virtuelle Maschine, sondern stattdessen eine Kernel-Schnittstelle, die Linux-ELF64-Binaries im User Mode starten kann.
WSL richtet sich vor allem an Entwickler, die sowohl Windows-Tools als auch in der bash Linux-Skripte verwenden wollen. Die Verwendung von grafischen Linux-Programmen ist nur über einen Umweg möglich.
Der folgende Text beschreibt erste Schritte zum Kennenlernen.
Installation von WSL:
Doku zu WSL:
Doku zu Ubuntu / Linux:
Im Folgenden wird davon ausgegangen, dass Sie Ubuntu als Linux Distribution aus dem Microsoft Store gewählt haben.
Überprüfen Sie die Windows-Version (ab Version 1709 gibt es WSL, ab 1803 gibt es zusätzliche WSL-Funktionen):
winver
Überprüfen Sie die WSL-Installation:
Geben Sie im Windows-Kommandozeilenfenster ein:
wslconfig /list
Windows-Subsystem für Linux-Distributionen: Ubuntu (Standard)
Führen Sie ein einzelnes Linux-Kommando aus, ohne in die bash umzuschalten, z.B.:
ubuntu run cat /etc/issue
Ubuntu 16.04.4 LTS \n \l
Sehen Sie sich die weiteren Möglichkeiten des ubuntu-Kommandos an, insbesondere die config- und clean-Optionen:
ubuntu /?
Sehen Sie sich im Windows-Kommandozeilenfenster an, wo Windows das WSL installiert hat:
dir C:\Users\User\AppData\Local\Packages\CanonicalGroupLimited.UbuntuonWindows*
Wechseln Sie in dieses Verzeichnis und sehen Sie sich darunter die Linux-Verzeichnisstruktur an:
dir LocalState\rootfs
Aber ändern Sie keinesfalls von Windows aus Dateien im Linux-Dateisystem, weil es dadurch durcheinander geraten kann, da Linux erweiterte NTFS-Dateiattribute benötigt!
Starten Sie die WSL-bash:
Geben Sie im Windows-Kommandozeilenfenster das Kommando bash ein (oder alternativ wsl).
Angenommen Sie waren vorher im Verzeinis C:\Temp,
dann erhalten Sie:
bash
MeinName@MeinPC:/mnt/c/Temp$
Mit exit kommen Sie wieder zurück ins Windows-Kommandozeilenfenster:
exit
C:\Temp>
WSL erbt die Berechtigung des aufrufenden Windows-Accounts. Wird WSL im Windows-Kommandozeilenfenster ohne administrative Rechte gestartet, kann man mit su und sudo bezogen auf WSL-Linux höhere Rechte erhalten, aber nicht bezogen auf Windows, und kann beispielsweise nicht Dateien in /mnt/c/windows speichern.
Updaten Sie in der bash Ihre Software-Versionslisten und upgraden Sie Ihre Software:
sudo apt-get update
sudo apt-get upgrade
Geben Sie in der bash zur ersten Orientierung folgende allgemeine Linux-Kommandos ein (Erläuterungen finden Sie unter bash-Kommandos und ubuntuusers.de-Wiki):
whoami
groups
uname -a
ls /proc
cat /proc/version
cat /etc/issue
cat /etc/environment
cat /etc/rc.local
env
hostname
hostname -I
dig +short fqdn.d
ip addr show
ifconfig
cat /etc/resolv.conf
df -h
du -hc --max-depth=1 . | sort -h
ps -auxww
ps -efH
top
free
sudo lshw
pwd
ls -al
wslpath "C:\Windows\System32\notepad.exe"
$(wslpath "C:\Windows\System32\notepad.exe")
Einbindung eines Wechseldatenträgers unter WSL, der in Windows beispielsweise als Laufwerk E: bekannt ist:
sudo mkdir /mnt/e
sudo mount -t drvfs E: /mnt/e
So können auch Netzwerklaufwerke eingebunden werden.
Falls Sie über einen UNC-Pfad eingebunden werden sollen:
sudo mount -t drvfs '\\meinserver\meinshare' /mnt/meinshare
Einige Netzwerkanalysewerkzeuge funktionieren in WSL nicht oder nur eingeschränkt, beispielsweise nmap, tcpdump, tshark, iw, wifite und airmon-ng.
Sie können aus der bash direkt Windows-Programme aufrufen, auch Windows-Programme mit grafischer Oberfläche, beispielsweise so:
bash
notepad.exe
Falls Sie unbedingt Linux-GUI-Programme mit grafischer Oberfläche unter WSL-Linux verwenden wollen: Dies ist nur über einen Umweg möglich.
Installieren Sie unter Windows einen X-Server wie etwa Xming oder VcXsrv. Dann rufen Sie im WSL-Linux auf:
export DISPLAY=:0
Anschließend starten Sie im WSL-Linux Ihr GUI-Programm.
Falls Sie Docker verwenden wollen: Mit WSL 1 ist das nicht möglich (siehe WSL Interoperability with Docker), aber mit WSL 2 soll es möglich werden (siehe WSL 2: Windows erhält einen echten Linux-Kernel).
Sie können in Windows-Batchdateien Linux-Shell-Skripte verwenden, sowie umgekeht in Linux-Shell-Skripten Windows-Programme aufrufen. Hier ein einfaches Beispiel:
Legen Sie folgende zwei Textdateien an:
run-bash-in-bat.bat
@echo. @echo Einzelnes Linux-Kommando in Windows-Batchdatei: ubuntu run cat /etc/issue @echo Linux-Shell-Skript in Windows-Batchdatei: ubuntu run ./bash-skript.sh MeinParameter @echo.
bash-skript.sh
echo \$0=$0 echo \$1=$1 echo echo Windows-Kommando im Linux-Shell-Skript: echo cmd.exe /C dir /B
Wichtig: Die letztere Linux-Datei muss mit Unix-Zeilenendezeichen (LF) gespeichert werden. Das unter Windows übliche CR+LF funktioniert unter Linux nicht.
Führen Sie die Windows-Batchdatei aus und überprüfen Sie das Ergebnis:
run-bash-in-bat.bat
Einzelnes Linux-Kommando in Windows-Batchdatei: C:\Temp>ubuntu run cat /etc/issue Ubuntu 16.04.4 LTS \n \l Linux-Shell-Skript in Windows-Batchdatei: C:\Temp>ubuntu run ./bash-skript.sh MeinParameter $0=./bash-skript.sh $1=MeinParameter Windows-Kommando im Linux-Shell-Skript: bash-skript.sh run-bash-in-bat.bat
Sehen Sie sich weitere WSL-Interoperability-Beispiele an.
WSL richtet sich vor allem an Entwickler, die sowohl Windows-Tools als auch in der bash Linux-Skripte verwenden wollen.
Da Sie nicht mit Windows-Tools im WSL-Linux-Dateisystem Dateien verändern dürfen, ist die übliche Vorgehensweise, seinen Workspace nicht im WSL-Linux-Dateisystem einzurichten, sondern stattdessen im Windows-Dateisystem, beispielsweise unter C:\MeinWorkspace. Dann können Sie beliebig sowohl mit Windows-Tools als auch mit WSL-Linux-Tools in Ihrem Projekt arbeiten.
Ein konkretes Beispiel hierfür finden Sie unter Ethereum-Smart-Contracts mit Truffle. Dort wird unter Windows mit grafischen Windows-Tools gearbeitet, aber weitere Entwickler-Tools (z.B. Node.js) werden unter WSL-Linux installiert und per bash verwendet.