Windows-Subsystem für Linux: Installation, Verzeichnis­struktur, Dateirechte, Benutzerkonten

    bash on Ubuntu on WindowsWindows 10 Build 14316 brachte die erste Beta von Ubuntu on Windows, das die bash und Kon­solen­pro­gramme umfasst. Das Linux-Sub­system eta­bliert eine Parallel­welt beim Datei­system und der Benutzer­verwaltung, die man kennen sollte, um etwa Daten mit Windows auszutauschen.

    Führt man Linux in einer VM unter Hyper-V oder VMware aus, dann findet sich das gesamte Dateisystem des Open-Source-OS gekapselt in einer VHD- oder VMDK-Datei. Das neue Subsystem für Linux hingegen verwendet keinen Hypervisor, vielmehr sorgt es dafür, dass ELF64-Binaries unmodifiziert unter Windows 10 starten können.

    Windows-Subsystem für Linux aktivieren

    Voraussetzung für den Linux-Support ist eine 64-Bit Version von Windows 10 ab Build 14316. Die Inbetriebnahme erfolgt relativ einfach. Zuerst wechselt man unter Einstellungen => Update und Sicherheit => Für Entwickler in den Entwicklermodus.

    Entwicklermodus in der App Einstellungen aktivieren

    Anschließend kann man in der Systemsteuerung unter Programme => Windows-Features aktivieren oder deaktivieren die Komponente Windows-Subsystem für Linux auswählen. Damit diese Aktion wirksam wird, muss man den Rechner neu starten.

    Windows-Subsystem für Linux freischalten

    Update: In den letzten Releases von Windows 10 ist es nicht mehr nötig, den Entwicklermodus zu aktivieren. Über PowerShell lässt sich das Feature nun so installieren:

    Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux

    Installation des Subsystems für Linux verifizieren mit dem Cmdlet Get-WindowsOptionalFeature

    Eigene Ubuntu-Umgebung für jeden Benutzer

    Nach dem Reboot ist das Ubuntu on Windows noch nicht zu sehen. Gibt man den Begriff bash in das Suchfeld ein, dann öffnet sich ein Konsolen­fenster, das die Linux-Programme erst einrichtet. Aufschlussreich ist dabei, dass die Ubuntu-Umgebung als Appx-Paket vom Windows Store heruntergeladen wird.

    Jedes Konto auf einem PC erhält eine eigene Instanz des Ubuntu-Subsystems aus dem Windows Store.

    Update: Seit das Subsystem für Linux das Beta-Stadium verlassen hat, kann man es explizit über die Store App installieren.

    Linux für Windows kann über den Store auf x64-Versionen des OS nachinstalliert werden.

    Bekanntlich installiert Windows diese neuen Anwendungen nicht für alle Benutzer gemeinsam unter %ProgramFiles%, sondern für jedes Konto separat. Mithin erhält jeder Benutzer auf einem Windows-10-Rechner eine eigene Kopie der Linux-Shell und der dazugehörigen Konsolen­programme.

    Linux-Verzeichnisstruktur unter %LOCALAPPDATA%

    Die von Linux bekannte Verzeichnisstruktur mit /etc, /bin, /sbin, /usr, /var, etc. findet sich deshalb im jeweiligen Profil des Users, und zwar unter %LOCALAPPDATA%\­lxss\rootfs. Dort existiert auch wie gewohnt ein Verzeichnis /home, aber das Linux-Subsystem nutzt für die Heimat­verzeichnisse stattdessen den Pfad %LOCALAPPDATA%\lxss\­home\%USERNAME%.

    bash kann keine Windows-Programme starten und cmd.exe kommt nicht mit Linux-Binaries zurecht.

    Wechselt man in der Eingabeauf­forderung nach %LOCALAPPDATA%\­lxss\rootfs\bin und versucht dort die bash zu starten, dann ist es keine Überraschung, dass dies nicht gelingt. Die Shell liegt im ELF64-Format vor, mit dem cmd.exe nichts anzufangen weiß.

    Update: Unter Windows 10 1809 haben sich die Pfade geändert. Das rootfs findet sich hier unter

    %LOCALAPPDATA%\Packages\<PackageFamilyName des AppX-Pakets>\LocalState

    Den Namen des Appx-Verzeichnisses kann man in PowerShell mit

    (Get-AppxPackage -Name *ubuntu*).PackageFamilyName

    erfragen. Um zum übergeordneten Verzeichnis von rootfs zu wechseln, könnte man

    cd (-join("$env:LocalAppData\Packages\", `
    (Get-AppxPackage -Name *ubuntu*).PackageFamilyName + "\LocalState"))

    eingeben.

    Windows-Laufwerke unter /mnt

    Startet man die Shell hingegen über das bash-Icon im Startmenü und bewegt sich durch den Verzeichnisbaum, dann ist man nicht auf die Struktur unterhalb von %LOCALAPPDATA%\lxss beschränkt. Vielmehr mountet das Subsystem für Linux alle Windows-Laufwerke unter /mnt, beispielsweise c: unter /mnt/c. Dies erfolgt allerdings nicht von innerhalb der Ubuntu-Instanz, wie man sich mit mount mnt überzeugen kann.

    Auf diese Weise hat man Zugriff auf das gesamte Dateisystem von Windows und kann beispielsweise Dateien kopieren zwischen den beiden Home-Verzeichnissen, die jeder Benutzer erhält. Jenes für Ubuntu befindet sich innerhalb der bash unter $HOME, während sich das von Windows über /mnt/c/users/<username> erreichen lässt.

    Verschiedene Dateisysteme

    Hinter rootfs von Linux liegt ein anderes Dateisystem als in /mnt/, Microsoft bezeichnet es als VolFs (im Gegensatz zum DriveFS unter /mnt). Dieser Unterschied ist nicht nur theoretischer Natur, sondern hat praktische Konsequenzen.

    Auf dem VolFS kann man Dateinamen verwenden, die Windows auf anderen Laufwerken nicht akzeptiert.

    Nur unter VolFs lassen sich Dateirechte mit Unix-Tools wie chmod oder chown verwalten, außerdem sind dort Dateinamen zulässig, die Windows sonst nicht akzeptiert (die etwa einen Doppelpunkt enthalten können). Außerdem unterscheidet dieses Dateisystem zwischen Groß- und Kleinschreibung, so dass test.dat und Test.dat im gleichen Verzeichnis existieren können.

    Erhöhte Rechte über sudo

    Bevor man sich nach der Installation des Ubuntu-Packages am Linux-Subsystem anmelden kann, erwartet es seit dem Build 14328 die Eingabe eines Namens und des Passworts für einen User, den das System danach anlegt. Man arbeitet mithin jetzt nicht mehr wie in der ersten Beta unter der root-Kennung.

    Das Zurücksetzen des Passworts für ein anderes Konto erfordert die Erhöhung der Rechte mit sudo.

    Der frisch angelegte User ist mit reduzierten Rechten ausgestattet, die man bei Bedarf mit Hilfe von sudo anheben kann. Dies ist etwa notwendig, wenn man das Passwort eines anderen Kontos mit passwd zurücksetzen oder einen neuen User mit adduser anlegen möchte.

    Auch hier dürfte es keine Überraschung sein, dass ein neues Konto, welches man innerhalb der Linux-Parallelwelt anlegt, unter Windows unbekannt bleibt. Wie üblich trägt adduser den Account in /etc/passwd ein, hat aber keinen Zugriff auf die Benutzerverwaltung von Windows. Und nachdem sich das Linux-Dateisystem im Profil eines Windows-Benutzers befindet, kann jeder seine eigenen Linux-Konten anlegen.

    2 Kommentare

    Bild von Thomas F.
    Thomas F. sagt:
    5. März 2019 - 12:29

    Ich kann kein %LOCALAPPDATA%\­lxss auf meinem PC finden.

    Bild von Wolfgang Sommergut
    5. März 2019 - 13:37

    Die Pfade haben sich wieder einmal geändert. Ich habe das im Text als Update ergänzt.