cherezoff - stock.adobe.com
Wie sich PowerShell-Linux-Befehle von Windows unterscheiden
PowerShell ist ein beliebtes Tool für IT-Profis, das für viele Aufgaben eingesetzt wird. PowerShell unter Linux unterscheidet sich aber von Windows. Werfen wir einen Blick darauf.
Es gibt so viele Unterschiede zwischen Linux und Windows. Deswegen ist es erstaunlich, dass Entwickler plattformunabhängige Software entwickeln können, insbesondere solche, die ähnliche oder identische Benutzererlebnisse auf verschiedenen Betriebssystemen bieten.
Microsoft versucht, dass die PowerShell auf allen Systemen gleich aussieht und sich ähnlich verhält. Allerdings gibt es einige wichtige Unterschiede zwischen PowerShell unter Linux und Windows. Einige sind möglicherweise offensichtlich, sofern Entwickler beide Plattformen kennen. Andere sind vielleicht etwas überraschend.
PowerShell gegen Windows PowerShell
Weil sich diese Anleitung auf die PowerShell und nicht Windows PowerShell bezieht, muss man den Unterschied zwischen den beiden kennen. PowerShell ist ein Open-Source-Programm, das mit .NET Core entwickelt wurde. Es ist kompatibel mit Windows, macOS und Linux. Windows PowerShell ist für Windows exklusiv und per Standard integriert. Es ist mit dem .NET Framework entwickelt. Diese Anleitung benutzt die aktuelle PowerShell-Version, zum Zeitpunkt des Verfassens dieses Artikels ist es die 7.2.4. Das gilt für Windows und Linux.
.NET Core
Dank .NET Core funktioniert die PowerShell plattformunabhängig. Im Jahr 2014 führte Microsoft .NET Core ein. Damit wurde sein proprietäres .NET-Software-Framework mit Linux und macOS kompatibel. Ab sofort konnte jede Software, die mit dem Windows-spezifischen .NET Framework entwickelt wurde, plattformübergreifend entwickelt werden. Das gilt auch für die PowerShell. Obwohl die meisten Kernfunktionen des .NET Frameworks auch in .NET Core verfügbar sind, gibt es Unterschiede. In der .NET-Dokumentation von Microsoft finden Sie Details dazu.
Groß- und Kleinschreibung
Einer der größten Unterschiede zwischen den verschiedenen PowerShell-Versionen für unterschiedliche Plattformen ist die Groß- und Kleinschreibung. Als langjähriger Windows-Benutzer habe ich schon einige Zeit mit der Fehlersuche in einem Skript unter Linux verbracht. Im Endeffekt hat es sich um ein Problem bei der Groß- und Kleinschreibung in einem Datei- oder Modulnamen gehandelt, das falsch geschrieben wurde.
Bei Dateien und Modul-Systemen wird zwar zwischen Groß- und Kleinschreibung unterschieden, aber PowerShell-Anwender können Dateinamen dennoch mit Tab vervollständigen, ohne sich um die Groß- und Kleinschreibung kümmern zu müssen.
Beispiel: Es gibt eine Datei namens Test.txt im momentanen Arbeitsordner. Führen Sie nun ein Skript mit test.txt oder Test.txt aus, gibt es ein True nur für Test.txt, wie Sie in Abbildung 1 sehen. Tippen Sie aber ./test vervollständigt Tabulator Test.txt, es sei denn, es gibt eine weitere Datei, die mit test beginnt.
Dateisystem
Ein weiterer wichtiger Unterschied zwischen Windows und Linux ist das Dateisystem. Windows benutzt Laufwerke, die mit Buchstaben bezeichnet sind und einen Backslash als Trenner für Verzeichnisse haben. Linux setzt auf eine Baumstruktur und Schrägstriche (Slash).
Mit der PowerShell können Sie Pfade sowohl als Schrägstriche als auch als Backslash an Cmdlets übermitteln. Beide werden als legitimer Trenner für die entsprechende Plattform gewertet. Das ist nützlich, wenn Sie plattformübergreifende Skripte schreiben. Sie müssen dann nicht prüfen, welches Betriebssystem im Einsatz ist und welchen Separator Sie benötigen.
Das Skript in Abbildung 2 gibt beispielsweise True für einen Test auf die Datei .\Test.txt unter Linux zurück. Auch wenn ein Linux-Anwender Schrägstriche benutzt, werden Backslashes ebenfalls als Verzeichnistrenner in der PowerShell akzeptiert.
Aliase
Aliase sind eine praktische Funktion in der PowerShell, um Zeit und Tipparbeit zu sparen. Damit sich Linux-Nutzer wohler fühlen, gibt es bei der Windows PowerShell mehrere Aliase, die Unix-Befehlen in der PowerShell-Variante entsprechen.
Zum Beispiel listet der Befehl ls das Inhaltsverzeichnis unter Linux und macOS auf. Führen Sie den Alias ls in der PowerShell unter Windows aus, rufen Sie damit im Endeffekt den PowerShell-Befehl Get-ChildItem auf. Abbildung 3 zeigt die Resultate, wenn Sie ls unter Ubuntu ausführen.
Im Gegensatz dazu zeigt Abbildung 4, was passiert, wenn Sie ls in der PowerShell unter Windows ausführen.
Führt ein Linux-Benutzer ls aus, auch in der PowerShell, erwartet er den eigentlichen ls-Befehl und nicht Get-ChildItem. Das könnte ein Problem sein.
Wegen solcher Probleme hat Microsoft den Alias ls aus der PowerShell unter Linux entfernt. Das gilt auch für einige weitere Unix-Aliase.
- cp
- mv
- rm
- cat
- man
- mount
- ps
Allerdings existieren diese Aliase dennoch in der PowerShell für Windows und in der Windows PowerShell.
PowerShell-Remote-Zugriff via SSH
Mit dem Erscheinen der PowerShell für Linux führte Microsoft auch die Option ein, sich mit der PowerShell via SSH mit einem Remote-Gerät zu verbinden. Die PowerShell kann damit die gleichen Sicherheitsoptionen verwenden, die bereits für entfernte Linux-Systeme gelten. Den Remote-Zugriff der PowerShell via SSH können Sie sogar für Nicht-Linux-Geräte einrichten. Der Unterschied zwischen Remote-Zugriff unter Linux und Windows besteht jedoch darin, dass SSH die einzige Option für Linux-Geräte ist.
Sudo und PowerShell
Weil die PowerShell Befehle im Arbeitsspeicher ausführt, können Sie sudo nicht innerhalb der PowerShell ausführen. Für Linux-Anwender ist das möglicherweise unbequem, da sie sudo in diversen Shells einsetzen. Anwender können aber die PowerShell an sich mit sudo starten und dann entsprechende Befehle ausführen.
Zum Beispiel entfernt der Befehl sudo pwsh Remove-Item /path/to/item.ext -Config:$false -Force Dateien, wofür Sie Root-Rechte benötigen.
Trotz der Unterschiede zwischen der PowerShell für Windows und Linux ist es im Prinzip die gleiche, objektbasierte Shell. Kennen IT-Administratoren die Unterschiede, finden sie Probleme schnell und können sie auch beheben. Sie werden in kürzester Zeit und problemlos plattformübergreifende PowerShell-Skripte schreiben können.