Schlagwort-Archive: bash Bourne-again shell

Bash (für Bourne-again shell) ist eine freie Unix-Shell und Teil des GNU-Projekts. Sie ist heute auf vielen unixoiden Systemen die Standard-Shell.

Linux Bash on Windows

Linux Bash Shell kommt auf Windows

Ermöglicht durch die Zusammenarbeit zwischen Microsoft und Ubuntu Canonical. Bash kann über das Windows 10 Startmenü gestartet werden, damit ist man in der Lage eine vollständige Linux-Kommandozeilen-Umgebung zu erhalten.

Viele Entwickler bevorzugen Linux oder auch Mac OS X, da man aus der Bash Shell (Bourne-again shell) Zugriff auf ein ganzes Universum von Dienstprogrammen hat, was Windows oft nicht beinhaltet.

Bash on Windows ist keine virtuelle Maschine und auch kein Container, es basiert auch nicht auf Cygwin oder Wine.
Es bietet sich nun die alternative, Bash Scripts auf dem lokalen Windows Computer zu entwickeln und zu testen, Verbindungen zu Remote Linux Server oder einer virtuellen Maschine wie Virtualbox oder VMware Workstation sind nicht erforderlich.

Das Ziel ist es, Apps aus dem Windows Store die vollständig auf Ubuntu lauffähig sein werden und als Programm auf dem Desktop im Userspace laufen. Programme die für Linux kompiliert werden, können auch unter Windows kompiliert und lauffähig gemacht werden. Es können die Ubuntu apt-get Kommandos angewandt werden, um Programme herunterzuladen und sie zu installieren. Entwickler können Bash Skripte schreiben und diese auf Windows ausführen. Es ist angeblich so schnell wie die selben Dienstprogramme nativ auf Ubuntu Linux laufen.

Dies ist alles im neuen Subsystem von Windows 10 ab Build 14251 integriert. Die Dateien lxcore.sys und lxss.sys bilden das neue Windows Subsystem für Linux (WSL).

Canonical Dustin Kirkland ist begeistert von der Technologie, und erklärt es so: im Grunde eine Echtzeit-Übersetzung von Linux syscalls in Windows-Betriebssystem syscalls. Linux-Freaks betrachten es als eine Art inverse Wine-Ubuntu-Binärdateien die nativ in Windows ausgeführt werden können

Um Bash on Windows nutzen zu können ist Windows 10 als 64-bit Edition und min. Build 14251 erforderlich. Empfohlen wird auf das Windows 10 Anniversary Update zu gehen, damit ist man dann auf dem Build 14393 – Stand 2. Aug 2016.

Die Installation von Bash on Windows

Als erstes muss das Windows Subsystem für Linux (Beta) installiert werden. Mit den Tasten  +R das Ausführen Fenster öffnen, und mit dem Befehl:

control appwiz.cpl,,2

die mmc-Konsole, Windows-Features aufrufen.

control_appwiz

Windows-Features

Weiter muss der Entwicklermodus aktiviert werden, über Systemsteuerung – Update und Sicherheit – Für Entwickler.

entwicklerfunktionen

Nach einem neustart stehen die Funktionen zur Verfügung.

Ubuntu Linux Installation

Starten lässt sich die Bash Shell über Start und der Eingabe bash

start_bash

Bei dieser Installation war es erforderlich, die Legacykonsole zu deaktivieren, dies geschieht über das öffnen einer Eingabeaufforderung (CMD) und mit rechts klick im Fensterbalken auf Eigenschaften.

legacykonsole

Beim ersten ausführen von bash.exe wird man die Nutzungsbedingungen zu akzeptieren gefragt. Welche wir mit „J* quittieren. Die Bash Shell wird aus dem Windows Store heruntergeladen und Installiert, weiter wird man aufgefordert ein Benutzerkonto und Passwort zu erstellen, dieser Benutzer muss nicht der selbe wie der von Windows sein.

Möchte man die Installation automatisieren, kann folgender Befehl in einer Eingabeaufforderung ausgeführt werden. Dies wird automatisch allen Aufforderungen zustimmen und den Standardbenutzer „root“ ohne Passwort vergeben.

lxrun /install /y

Linux Software Installation

Sollen nun weitere Linux Pakete installiert werden, kann dies mit apt-get, dem Advanced-Packaging-Tool getätigt werden, als erstes sollten hier gleich alle Updates eingespielt werden.

sudo apt-get update
sudo apt-get upgrade

Nach einigen Minuten ist Bash on Windows up-to-date, mit folgendem Befehl aus der Bash Shell oder direkt aus Windows ist das installieren der Linux Pakete möglich.

sudo apt-get install mc
sudo apt-get install nautilus

bash_ausfuehren

Das Windows Dateisystem kann so wohl von Bash on Windows erreicht werden, wie auch das Linux Dateisystem aus Windows.

bash_ls

explorer_lxss
%appdata%\local\lxss\rootfs

Grafische Anwendungen sind ausführbar sobald ein X Server zur Verfügung steht, ein solcher ist von Xming verfügbar, der X Window System Server for Windows lässt sich hier herunterladen und kann für Windows installiert werden.

xming

Damit das rendering einer grafischen Anwendung möglich wird, kann folgender Befehl aus der Bash Shell ausgeführt werden.

export DISPLAY=:0

Nun können Bash Kommandos abgesetzt werden, dies auch aus Windows oder aus der PowerShell.

bash Befehle ausführen
bash Befehle ausführen

X Windows Applikationen wie nautilus oder gvim können ebenfalls direkt ausgeführt werden.

Bash on Windows Unity
Bash on Windows Unity

Linux Beispiele für die Kommandozeile

Linux Beispiele für die Kommandozeile aus der Praxis mit 20 häufig verwendeten Kommands

Linux-Admins arbeiten oft auf der Kommandozeile. Wir zeigen die Top 20 der Tools und Utilities, die unter Linux häufig eingesetzt werden. Es soll hier kein vollständiges Verzeichnis gezeigt werden, jedoch kann es eine Starthilfe mit einigen der wichtigsten Linux-Befehle wiedergeben, für Linux Anwender und Admins.

1. ASCII-Zeichensatz übersetzen in Oktal, Dezimal und Hexadezimal.

$ man ascii
Linux Beispiele für die Kommandozeile, man ascii
man ascii

2. Kalender in der Linux Kommandozeile ausgeben.

$ cal
Der Linux Befehl cal

Kalender mit 6 Monate und Wochennummer

$ cal -n 6 -w

3. Binärdatei hexadezimal mit VIM editieren.

$ vi datei
 :%!xxd
 ..
 :%!xxd -r
 :wq

4. Dateien vergleichen (compare files).

$ diff -w file1.txt file2.txt
2c2,3
< Jacqueline --> C. Meier
> Jacqueline Mayer

5. Inhalt in Dateien nach Zeichenketten rekursiv suchen mit find.

$ find . -type f -print0 | xargs -0 grep "mojito"

6. Datei als E-Mail versenden.

$ mail -s subject peter@foo.com < notes.txt

7. Herunterladen von mehreren URLs aus Liste.

$ cat download-urls.txt | xargs wget –c

8. Doppelte Linien entfernen mit awk.

$ awk '!($0 in array) { array[$0]; print }' temp

Zeilenausgabe von /etc/passwd mit der selben uid und gid.

$ awk -F ':' '$3==$4' /etc/passwd

9. Konvertierung von Windows/DOS (CR/LF) in Unix (LF) Format.

$ sed 's/.$//' filename
# Text Suchen und Ersetzen
$ sed -e s/Hund/Katze/g datei.txt > datei.neu
# Löscht alle Leerzeilen
$ sed '/^$/d' filename
# Löscht Spaces am Ende jeder Zeile
$ sed 's/ *$//' filename

10. Rekursive String Suche in Dateien.

$ grep -r "ramsch" *

11. Wieviele CPU hat mein Computer.

$ grep processor /proc/cpuinfo | wc -l

12. Free Memory anzeigen.

$ cat /proc/meminfo | grep MemFree
$ free -m

13. Aktive Prozesse anzeigen.

$ ps -ef
$ ps aux
$ vmstat 5 10

14. Verzeichnisbaum (tree) erstellen.

$ ls -R | grep ":$" | sed -e 's/:$//' -e 's/[^-][^\/]*\//--/g' -e 's/^/   /' -e 's/-/|/'

15. Asterisk PBX Applications ausgeben.

$ asterisk -rx "show applications" | awk '{print $1}' | sed -n -e "s/:"//p

16. Anzahl SPAM identifizierte E-Mails des MTA.

$ cat /var/log/maillog | egrep -c '(Alert\!)|(identified spam)|(reject\:)'

17. Wie lange läuft der Computer schon.

$ uptime

18. Zeit und Datum setzen.

$ date -s "Dez 12 18:30:00 2014"

19. Wer bin ich ? und was ist die effektive Nutzer-ID, UID und GID.

$ whoami
$ id

20. Liste der zuletzt eingeloggten User ausgeben.

$ last -a

Amnerkung

Es gibt viele Linux-Befehle. Deswegen ist es schwierig zu sagen, auf welche man sich konzentrieren oder mit welchen man beginnen sollte.

Kommandozeile und die Linux-Shell

Es gibt unter Linux und UNIX nicht wirklich einen Unterschied zwischen einem Befehl und einem Utility. Allerdings unterscheiden sich Linux- / UNIX-Shell-Befehle und standardmäßige UNIX- oder Linux-System-Befehle oder -Tools. Es gibt zwei Arten an Befehlen, die ein Anwender mithilfe seiner Tastatur ausführen kann. Es handelt sich hierbei um Shell-Befehle und Linux- / UNIX-Befehle.

Mehrere Linux Shells

Jede Shell (Korn, C, Bourne, Bash) bringt dabei einen eigenen Befehls-Satz mit, der in das Programm eingebaut ist. Wird der Name eines eingebauten Befehls als erstes Wort eines einfachen Kommandos verwendet, führt die Shell den Befehl direkt aus. Dazu muss sie noch nicht einmal einen neuen Prozess starten. Diese eingebauten Befehle sind notwendig, um gewisse Funktionalitäten zur Verfügung zu stellen. Es wäre sehr unbequem, sie mit separaten Utilities oder Kommandos zu realisieren. Auch wenn jede Shell-Art einen eigenen Befehls-Satz hat, sind die individuellen Shell-Befehle gleich. Hier kommt es nicht darauf an, welche Linux-Distribution oder UNIX-Variante Sie im Einsatz haben.

Linux Beispiele für Kommandozeile

Beispiele solcher Linux- und UNIX-Befehle sind df, cp und ls. Mit diesen Kommandos bekommt man gewisse Informationen oder es können diverse Aktionen mit Dateien und Ordnern auf dem System durchgeführt werden.

So funktioniert es!

Interessant ist, dass auf Posix-Systemen das Ausführen von /usr/bin/cd aus einer Shell nicht einmal das Arbeits-Verzeichnis der Shell ändert. Das liegt daran, dass man den in die Shell eingebauten cd-Befehl verwenden muss. In Posix-System-V-Systemen besitzt fast jeder eingebaute Shell-Befehl einen korrespondierenden Link auf /usr/bin. Eingebaute Befehle sind in der Shell selbst enthalten. Einige Beispiele von eingebauten Befehlen bezüglich Bash sind cd, eval, exec, exit, export und pwd. Beispiele der Bash sind alias, declare, echo und enable. So funktioniert das Ganze: Gibt man einen Befehl ein, überprüft die Shell, ob es sich um ein eingebautes Kommando handelt. Ist das der Fall, wird die Shell diesen ausführen. Sollte dem nicht so sein, wird der Befehl des Systems ausgeführt und die Shell eröffnet dafür einen neuen Prozess.

Oftmals ist ein eingebauter Befehl gleichbedeutend mit dem gleichnamigen des Systems. Zum Beispiel unterscheidet sich der echo-Befehl der Bash von /bin/echo. Beide verhalten sich aber fast identisch. Verwechselt man eingebaute Shell-Befehle mit den Linux- oder UNIX-Kommandos, die von der Shell geforkt werden, kann das Einfluss auf die entsprechenden Aufgaben haben. Deswegen ist es wichtig, den Unterschied zu verstehen.