krähemann.com

BASH

Bourne Again Shell uf GNU+Linux

Joël Krähemann

Copyright (C) Joël Krähemann.


Kapitel 1. Unix Paradigme

Inhaltsverzeichnis

Konventionä

Konventionä

Unix ähnlichi Betriebssystem verfolged dä Asatz, dass alles e Datei isch und die Grundlegendä Dateioperatione wie Läsä und Schriebe unterstützed.

Än Ordner cha verwendet werde um die Dateie zämez'fasse und cha überlicherwiis Hierarchisch ufglisted werde.

Links sind spezielli Dateie wo uf e anderi Datei oder Ordner verwiese chönd.

Au Geräte oder Schnittstelle werde wohl au als Datei Abildet. Das isch überlecher Wiis s'/dev Vozeichnis. Und bildet somit e direkti Schnittstelle zum Kernel und sine Triiber da.

Es chunt je nachdem druf a, welles Unix Betriebssystem mor verwendet, wie Wiit dass es Umgsetzt wird. Aber überlecher Wiis hängt das vo de System Software ab, wo verfüegbar isch. Es isch gängigi Praxis, das Programm portierte werde z.B. für Linux, FreeBSD, OpenBSD, Darwin, GNU Mach oder Minix usw. ...

Unix is es traditionells Mehr Benutzer Betriebssystem. De Standard Zeichesatz dezue isch ANSI. De POSIX Zeichesatz giits i 2 Usfüerige: C und C.UTF-8.

Im Interent wird hüüfig, de zentral europäische Zeichesatz für Lateinisch stammigi Sproche vowendet ISO8859–1.

Mir redet i dem Buech vo GNU+Linux und gönd au vorwiegend druf i. De Kommandoziele- interpreter vo de Wahl isch BASH. Es werded au Bestehendi Richtlinie vom Filesystem Hierarchy Standard igange FHS.

D'Kommando Ufforderig BASH, isch e wiit verbreiteti Shell. Die interaktiv shell unterstützt Stapelvoarbeitig - Batch, und sogar funktione innerhalb vo BASH Skripts, das sind Dateie wo Kommandos im Stapel voarbeited. Die Dateie hend de Dateinamenserwiiterig .sh.

Kapitel 2. Was isch Linux

Linux als Kernel

Linux isch en Kernel, isch im Betriebssystem die Schicht vom Softwarestapel, wo sich um Scheduling, Geräte Iigob & Usgob, Power Management und e abstraktion zur Hardwareschicht abüted.

Oftmols wird Linux als Platzhalter für s'ganze Betriebsystem verwendet, dessen genaui Bezeichnig GNU+Linux isch. Das het de Vorteil, das mor au effektiv Programm uusfüert und nöd nur aluegt wie er lauft.

Freii Software

Dä Linux Kernel bevorzugt d'GNU General Public License i de Version 2 und isch somit freii Software. Er beinhalted aber au Code wo MIT Lizensiert sind.

Anderi gängigi freii Software Lizenze sind Apache 2 License, wo vorwiegend für Webawendige vowendet wird, GNU LGPL oder GNU Affero GPL. Die alli unterscheidet sich i Details zur Umsetzig vo de 4 Freiheite:

  • D'Freiheit s'Programm uuszfüehre wie mor möchti.

  • D'Freiheit d'Funktionswies vomne Program z'untersueche.

  • D'Freiheit s'Programm mit Mitmensche z'teile.

  • D'Freiheit s'Programm z'verbesserä.

Freii Software isch somit Opensource, aber Opensource mue nöd zwingend freii Software sii. Opensource bedüted eifach de Quellcode isch verfüegbar.

Linux Distributione

Es giet unzähligi Distributione, wo sich unter anderem vom Packetmanagment zur Softwareinstallation unterscheidet, Standard Desktopumgebig oder System V vs. Systemd, mit oder ohni Kompatibilitätslayer.

Debian GNU/Linux isch e wohl etablierti Distribution bi Entwickler.

OpenSuSE isch ursprünglich e Dütschi Distribution, isch die ältischt uf em Markt und büted YaST zur Konfiguration a.

Fedora isch e sehr eifach z'installierendi Distribution.

Arch isch eher für Fortgschritteni Awender.

Ubuntu wird vo Canonical abüted.

Clear Linux wird vo Intel bereitgstellt und zeichned sich durch Performance us.

Nitrux verfolgt e kommerzielle Asatz.

Es lohnt sich uf jedefall sich mit de Wahl vom Betriebssystem gnauer usenand z'setze. Die Liste isch bi wiitem nöd komplett. A dere Stell möcht i uf DistroWatch.com vowiese.

Kapitel 3. Shell Grundlage

Terminal Emulator

Mate Terminal Screenshot

S'Bild obe isch en Screenshot vo `mate-terminal`, wobii 2 Befehl uusgführt worde sind. De ersti `whoami` zeigt dir de momentan Benutzername a und de zweiti `uname -r` zeigt d'Kernel Version vom laufende System a.

S'Farbprofil loht sich i moderne Terminals istelle, do isch es Grüen uf Schwarz. Nebe Textbasierted Kommands giets au no söttigi wo d'ncurses Bibliothek vowendet. Wie zum Bispiel Midnight Commander.

Mir verwendet s'Substitutionszeiche ` für Befehl wo mir usfüehre chönd, wie z.B. `echo "Hallo Welt!"`, es dient lediglich zur igrenzig und cha i de Interaktiv Shell weggloh werde.

Midnight Commander Screenshot

`mc` isch e Konsole basierte Dateimanager wo mor mit de Muus oder mit de Tastatur bediene cha.

Grundlegendi Dateioperatione

WARNIG, die falsche Befehl chönd dezue füere, dass es en Computer sofort Abschalted, S'Dateisystem beschädigt, alli Date löscht oder sogar en Computer unbruchbar macht.

Zersch zu de spezielle Dateinäme, ein Punkt . isch s'momentane Vozeichnis, 2 ufenandfolgendi Pünkt .. isch s'Elterliche Vozeichnis, d.h. i de Baumstruktur übergordnet. Dateinäme wo mit emne Punkt afönd sind vostekti Dateie.

De Befehl List System `ls` listed alli sichtbare Dateie im Arbeitsvozeichnis uf, `ls -a` isch de glich Befehl, aber het zuesätzlich e Option -a wo dezue führt, dass alli Dateie im Arbeits vozeichnis ufglisted werdet.

Unix System e hierarchische Dateistruktur, s'obersti Vozeichnis nennt mo Root Vozeichnis und mit `ls -lh /` chan mor de Inhalt ufliste. De Slash isch en Dateipfadbegrenzer und nur eine stoht fürs obersti Vozeichnis. De Parameter -lh listed uusfüehrlichi Informatione und menscheleserliche Grösse agabe uuf.

Mir befindet üs aber für gwöhnlich imne Unterordner im Benutzervozeichnis, das chan mor mit em Befehl `echo $HOME` uusgeh. Echo isch en Befehl mit dem mor Zeiche uf em Schirm usgeh chan, $HOME isch e Umgebigsvariable wo de Name vom Benutzervorzeichnis enthalted. Bi mir wär das "/home/joelkraehemann".

Um s'momentane Arbeitsvozeichnis z'ermittle gib `pwd` i - Print Working Directory. Wenn im Benutzerordner bisch erstell es Vozeichnis mit `mkdir -v my-shell-scripts` - Make Directory, de -v Parameter bewürkt dass `mkdir` uusfüerlichi Informatione uusgibt und chönt au weggloh werde.

Do mir en Ordner Agleit hend um Üsri Shell Scripts z'Speicher wechsled mir gad dri mit `cd my-shell-scripts` - Change Directory.

Denn lege mor e leeri Datei a `touch hallo-welt.sh` und fülled sie gad mit enere Dateiumleitig `echo -e '#!/bin/bash\n\necho "Hallo Welt!"\n' > hallo-welt.sh`. De -e Parameter erlaubt es Escape Sequenze z'definiere. Im Text sind do die vowendeti Escape Sequenz \n wo en Zeileumbruch erzügt. S'Grösser als Zeiche leited d'Standard Usgob ine Datei um, deren Name als nögsts ufgführt wird.

Zum überprüefe vom Inhalt `cat hallo-welt.sh` itippe. Wenn es guet usgseht mache mor d'Datei usfüerbar mit em Befehl `chmod u+x hallo-welt.sh` - Change Mode. u+x bedüted em Benutzer - User - d'Berechtigung + hinzuefüege, x stoht für Usfüerbar - Executable.

Denn chan mor de Code im Script usfüere: `./hallo-welt.sh`

Manuals

Viel Programm erkenned än Parameter --help oder d'Churzform -h, z.B. `man --help` oder `man -h`.

`man bash` liefert d'Manual Page vo bash. Manpages sind i insgesamt 8 Sektione unterteilt.

Zum Bispiel `man -s3 printf` liefert d'API vo de GLib C Funktion printf. Hingegeg `man -s1 printf` liefert s'Manual für d'Bash Funktion printf.

`info perl` liefert unter umständ au d'Manpage, aber falls d'Dokumentation installiert isch, isch es meistens umfangriecher.

Job Kontrolle

Ctrl-C bewürkt, dass s'Signal SIGINT an Prozess gsendet wird und führt zu dessem Terminierig.

Ctrl-Z setzt de momentani Prozess in Hintergrund. Mit `fg` chan mor dä wieder in Vordergrund bringe.

`nohup KOMMANDO > DATEI &` isch nützlich zum KOMMANDO im Hintergrund usz'füere de Standard Output STDOUT wird i DATEI umgleited. Das isch guet wenn en Prozess sehr lang goht und mor d'Usgob möcht speichere.

Kapitel 4. Editore für d'Shell

Inhaltsverzeichnis

GNU Nano
GNU Emacs

GNU Nano

GNU Nano Screenshot

Nano isch en eifach z'handhabende Editor und erfreut sich grosser Beliebheit. Im Bild obe gseht mor en Screenshot vo GNU Nano, wo d'Datei offe het wo mir im vorherige Kapitel mittels Redirect (Standard Usgob ine Datei) erzügt hend.

Usser Standard Bibliotheke het er kei Abhängigkeite. Mittels Tastekombinatione loht sich Ufgobe wie Dateie öffne oder Speichere umsetze, z.B. Ctrl-G zum e Hilf z'öffne. Die Liste unne isch nöd komplett, aber sicher nützlich.

Tabelle 4.1. GNU Nano Tastekombinatione

TastekombinationBeschriebig
Ctrl-G Wechsle zum Hilfe Text.
Ctrl-X Momentane Puffer schlüsse oder Nano verloh.
Ctrl-O Schrieb de momentan Puffer (oder markierti Region) uf d'Harddisk.
Ctrl-R Füeg e anderi Datei in momentane Puffer (oder ine neue Puffer).
Ctrl-W Sueche vorwärts nochenere Zeichechette oder Regulärem Usdruck.
Ctrl-\ Ersetz e Zeichechette oder Reguläre Usdruck.
Ctrl-U Füeg de Inhalt vom usgschnittene Puffer i die momentan Cursor Position.
Ctrl-J Richte de momentani Abschnitt i.
Ctr-T S'Rechtschriebeprogramm ufrüefe sofern vohande.
Ctrl-_ Spring a die agebeni Zeile und Spalte im Text.
Meta-U Rückgängig mache vo de letzt Operation.
Meta-E Wiederhole die letzt rückgängig Operation.
Ctrl-Q Sueche rückwärts vonere Zeichechette oder emne Reguläre Usdruck.
Meta-A Markiere de Text vo de momentani Cursor Position.
Meta-6 Kopiere die momentani Zeile oder markierte Text und füll de usgschnittene Puffer.
Meta-Q Sueche nögsti Treffer rückwärts.
Meta-W Sueche nögsti Treffer vorwärts.

GNU Emacs

GNU Emacs Screenshot

Emacs isch en sehr vielfältige Editor und wan er nöd susch no alles chan. Er unterstützt setze vo Debugger Breakpoints mit `gdb`. Het für vieli Programmiersprache Syntax Hervorhebig. Mor chan en entweder uf de Textkonsole starte oder im Fenster Modus.

`emacs -nw` wird s'Programm i de Konsole usfüere de Parameter -nw stoht für No Window. Uf manche System wird d'Meta Taste (Alt) für was anders g'nutzt und statdesse Escape brucht.

Tabelle 4.2. GNU Emacs Tastekombinatione

TastekombinationBeschriebig
Ctrl-F Öffne Datei oder erstell e neui.
Ctrl-X Ctrl-S Speichere d'Datei unterem ursprüngliche Name.
Ctrl-X Ctrl-W Speichere d'Datei unterem neue Name.
Ctrl-G S'momentane Kommando abbreche.
Ctrl-X Ctrl-C De Editor beende.
Meta-X menu-bar-open Öffne d'Menü Liste.
Ctrl-_ Rückgängig mache.
Ctrl-Space Markierig setze zum kopiere.
Meta-w De markierti Text kopiere.
Ctrl-w De markierti Text uschniede.

Kapitel 5. Dateie sueche und durchsueche

Inhaltsverzeichnis

Less
Find
Grep
Find und Grep

Less

Less Screenshot

`less hallo-welt.sh` zeigt d'Text Datei hallo-welt.sh a. Wenn `less` offe isch chan mor mit / noch Text sueche, n liefert de nögsti Treffer und mit Ctrl-G beendet mor z'suech. Aschlüssend chan mor Q drucke zum `less` z'beende.

Eifachs Scrolle chan mor mit de Pfiel Ufe oder Abe Taste erwirke. Mit h chunt mor uf e Hilfesiite mit Tastekombinatione.

Find

Mit `find` chan mor Dateinäme oder Vozeichnisnäme sueche. Überlicherwies git mor voschiedeni Parameter am `find` Befehl mit.

`find /home/joelkraehemann -name "*.sh" -type f` isch es Bispiel zum min Benutzerrodner /home/joelkraehemann z'durchsueche, de Filter -name "*.sh" fangt mitem Wildcard * (Joker im Chartespiel) a und ended mitem Datei Suffix .sh. De Parameter filtered alli Dateinäme us wo nöd mit .sh endet. De nächst Parameter -type f schlüsst alli Dateipfäd us wo nöd vom Type Datei isch. S'f stoht für File, um nur Vozeichnis ufliste chan mor s'f durch es d ersetze.

`find /home/joelkraehemann -name "*~" -type f -exec rm -f {} \;` wür alli Dateie wo mit enere Tilde im Dateiname endet lösche. Find cha uf jede treffer Kommandos usfüere, i dem Fall isch es `rm` - Remove. De `rm` Parameter -f erzwingt s'lösche au wenn d'Datei schriebgschützt isch.

Grep

`grep` durchsuecht Datei anhand vom vorgebene Muster, z.B. de Befehl `grep "Hallo Welt" hallo-welt.sh` durchsuechd d'Datei noch de Zeichechette Hallo Welt und giet die zuetreffend Ziele us.

Find und Grep

Um `find` und `grep` z'kombiniere chan mor ä Pipe | zur hilf neh und s'Programm `xargs`.

`find /home/joelkraehemann -name "*.sh" -type f | xargs grep -l "bash"` do werdet alli Pfäd ufglisted wo de Dateisuffix .sh hend, Dateie sind und de Text bash enthalted. Wenn mor grep mit `xargs` vowendet, loht mor de Dateiname weg, wiel de chunt vom vorherige Befehl `find` wo mittels de Pipe uf d'Standard Igoob umgleited wird. Dä Parameter -l bewürkt, dass de Dateiname usgeh wird, anstatt die zuetreffend Ziile.

Kapitel 6. Variable

Variable inere for Schleife

for Schleife Screenshot

Im Screenshot obe gseht mor d'vowendig vonere temporäre Variable i. Ä Schleife het immer ä Abbruchbedingig, i dem Fall isch das i<10 und bedüted soviel wie solang d'Variable i chliner als 10 isch wieter mache. Im Schleife Körper wird d'Zahl i mit `echo` uf d'Konsole gschriebe.

De for Schleif Chopf hier bestoht us 3 Teil, trennt durch s'Semikolon. De erst Abschnitt isch zum initialisiere vorgseh, z.B. setz de Usgangswert i=0.

De zweiti Teil isch d'Abbruchbedingig, das isch en Usdruck wo uf Wohrheit überprüeft, im Programmiere isch es üblich, das de Rückgabewert 0 Falsch isch und alles ungleich 0 Wohr. i<10 isch ä Boolsche Operation wo entweder Wohr oder Falsch sii chan.

De dritti Teil isch ä Operation wo pro Iteration (Durchlauf) usgführt wird. Obe isch das i++, d'Post-Inkrement Operation wo bewürkt, dass noch einer Iteration d'Variable i um eis erhöt wird.

Umgebigsvariable

`env` zeigt alli aktuelle Umgebigsvariable a, die chönd vo andere Scripts oder Programm usglese werde. Mit de ibaute Shell Funktion `export` chan mor wieteri Umgebigsvariable definiere, z.B. `export LANG=C` oder `export LANG=C.UTF-8`.

De ersti export setzt d'Umgebigsvariable LANG uf de Wert C was soviel bewürkt, wie d'Standard Sproch uf d'Standard POSIX Locale setze.

De zweiti export setzt d'Umgebigsvariable LANG uf de Wert C.UTF-8 was soviel bewürkt, wie d'Standard Sproch uf d'Standard POSIX Locale mit UTF-8 unterstützig setze.

Um de Inhalt vo Umgebigsvariable z'inspiziere chan es Dollar $ Zeiche vor de Variablename setze und das mit `echo` vowende, z.B. `echo "$LANG"`.

Arrays sind Variable wo us 0, 1 oder mehrere Iträg bestönd, die einzelne Iträg chönd mittels emne index agsproche werde.

Variable i Scripts

Shell Scripts chönd au Variable beinhalte und es gueti Praxis die vorem erste Vowende z'deklariere und z'initialisiere. Variable isch eigentli nüt anders als ä Speicherstell für Zahle, Text oder dynamische Arrays. I BASH sind Arrays immer dynamisch und chönd nur 1-dimensional agleit werde.

Die erst Zeile vomne Script heisst übrigens Sha-Bang und spezifiziert de Script Interpreter wo vowendet werde sött. I dem Buech isch das immer `bash`.

Beispiel 6.1. Variable i Scripts - Ichaufsliste

01: #!/bin/bash
02: 
03: function create_shopping_list {
04:     # endlos schleife
05:     while((1))
06:     do
07:         # d'variable entry läsä
08:         read entry
09: 
10:         # abbräche wenn leeri igob
11:         if [ -z "$entry" ]
12:         then
13:             break
14:         fi
15: 
16:         # igob $entry ad datei shopping-list.txt ahänge
17:         echo "$entry" >> shopping-list.txt
18:     done
19: }
20: 
21: function show_shopping_list {
22:     # d'shopping-list.txt Datei als Array vo Zeichechette läsä
23:     shopping_list=( $(cat shopping-list.txt) )
24: 
25:     # for schleife zum Arrays abarbeite
26:     i=1
27:     
28:     for entry in "${shopping_list[@]}"; do
29:         # nummerierti iträg
30:         echo "$i. $entry"
31:         
32:         # i inkrementiere
33:         i=$(($i+1))
34:     done
35: }
36: 
37: # Wenn d'Parameter Azahl ungleich 1 isch gib en Fähler Code -1 zrugg
38: if [ "$#" -ne 1 ]; then
39:     echo "Illegal number of parameters"
40: 
41:     exit -1
42: fi
43: 
44: # Entweder Ichaufslist azeige oder erstelle
45: if [ "$1" == "show" ]
46: then
47:     # Funktion ufrüefe
48:     show_shopping_list
49: elif [ "$1" == "create" ]
50:     # Funktion ufrüefe
51:     create_shopping_list
52: else
53:     echo "provide either \"show\" or \"create\" parameter"
54: 
55:     exit -1
56: fi
57: 
58: # erfolg
59: exit 0
60: 

Script Usgob Screenshot

Variable deklariere und initialisiere

Ä Variable chan ei einzigi Speicherstell für ä Zahl oder Zeichechette sie. Denn giets no arrays, das sind logisch zämähängedi Speicherstelle. I Bash sind arrays nur 1-Dimensional und sind dynamisch. D.h. sie wachsed während mor am endi vom Array Iträg hinzuefüegt.

Variable chan mor direkt initialisiere wie z.B. `MY_VAR=42` oder für äs Array `MY_ARR=(value1 value2 value3)`. `declare` isch ä i Bash ibauti Funktion zum explizit z'deklariere.

`export` zum Variable z'exportiere oder `unset` zum de Inhalt lösche.

`readonly` chan mor verwende zum Variable als Konstante z'markiere.

`MY_VAR=()` wäre quasi de NULL pointer i ANSI C.

Array zuegriff

`echo ${MY_ARR[*]}` zum usgeh allner Iträg vom array MY_ARR.

`echo ${MY_ARR[0]}` zum s'ersti Element usz'geh.

`MY_ARR[3]=value4` zum am endi von MY_ARR value4 hinzuez'füege, s'drü isch die momentan Azahl vo Element und bi Null fangt more a z'initialisiere.

Kapitel 7. Zeichechette manipulation

D'Längi ermittle

`echo ${#MY_VAR}` giet d'Längi vo de Variable us MY_VAR.

`echo ${#MY_ARR}` giet d'Längi vom Array us MY_ARR.

Zeichechette teile

${VAR:OFFSET:LENGTH} isch s'Muster noch dem ä teil Zeichechette extrahiert wird.

VAR isch de Variable Name.

OFFSET d'Startposition.

LENGTH wieviel Zeiche behalted werdet.

Zeichechette ersetze

${VAR/PATTERN/STRING} isch s'Muster noch dem ä Zeichechette ersetzt wird.

VAR isch de Variable Name.

PATTERN isch s'Suech Muster.

STRING dä Ersatz.

Kapitel 8. Bedingigä

Eifachi if-Awiesig

Diä eifachsti if bedingig isch if TEST-BEFEHL; then FOLGENDI-BEFEHL; fi De TEST-BEFEHL wird usgführt und wenn dä Rückgabewert wohr isch, wird FOLGENDI-BEFEHL usgführt.

Wohrheit wird durch Zahle festgleit. 0 isch immer Falsch und alles ungleich 0 ergiet Wohr.

Tabelle 8.1. Testusdrück

UsdruckBedütig
[ -e DATEI ] Wohr wenn DATEI existiert.
[ -d DATEI ] Wohr wenn DATEI äs Vozeichnis isch.
[ -f DATEI ] Wohr wenn DATEI ä reguläri Datei isch.
[ -L DATEI ] Wohr wenn DATEI än symbolische Link isch.
[ -z ZEICHECHETTE ] Wohr wenn ZEICHECHETTE Längi 0 isch.
[ -n ZEICHECHETTE ] Wohr wenn ZEICHECHETTE Längi ungleich 0 isch.
[ ZEICHECHETTE1 == ZEICHECHETTE2 ] Wohr wenn ZEICHECHETTE1 gleich ZEICHECHETTE2 isch.
[ ZEICHECHETTE1 != ZEICHECHETTE2 ] Wohr wenn ZEICHECHETTE1 ungleich ZEICHECHETTE2 isch.
[ ARG1 OP ARG2 ] OP isch ä arithmetischi Operation nämlich -eq, -ne, -lt, -le, -gt oder -ge. Was soviel bedüted wie d'Zahle ARG1 & ARG" sind gliech, ungliech, chliener als, cliener gliech, grösser als oder grösser gliech.
[ ! USDRUCK ] Wohr wenn USDRUCK falsch isch.
[ USDRUCK1 -a USDRUCK2 ] Wohr wenn USDRUCK1 und USDRUCK2 wohr isch.
[ USDRUCK1 -o USDRUCK2 ] Wohr wenn USDRUCK1 oder USDRUCK2 wohr isch.

if Bedingige chönd mehereri alternativi Teil ha mit oder eini ohni Bedingig, die isch überlicherwies am Schluss. if [ TEST-BEFEHL ]; then FOLGENDI_BEFEHL; elif [ TEST_BEFEHL ]; then FOLGENDI_BEFEHL; else FOLGENDI_BEFEHL; fi wär d'Syntax für if-elif-else Bedinging.

case Bedingig

D'case Bedingig isch ideal zum parse vo Parameter.

Beispiel 8.1. case Bedinging - Parameter läsä

01: #!/bin/bash
02: 
03: do_start=0
04: do_stop=0
05: 
06: while [ $# -gt 0 ];
07: do
08:   case "$1" in
09:     -s|--start)
10:         do_start=1
11:         ;;
12:     -k|--kill)
13:         do_stop=1
14:         ;;
15:   esac
16: 
17:   # überprüef nögsti Parameter
18:   shift
19: done
20: 

Kapitel 9. Schleife

for-Schleife für Liste

Die Schleife führt für jede Itrag i de liste ä iteration dure. D.h. die spezifiert Variable het en Itrag vo de List vo Afang bis Endi.

Beispiel 9.1. Schleife - for-Schleife für Liste

01: #!/bin/bash
02: 
03: # file0.xml ... file9.xml alege
04: touch file{0..9}.xml
05: 
06: # alli .xml Dateie i d'Datei list usgeh
07: ls file[0-9].xml > list
08: 
09: # for schleife
10: echo "Erstelle Backup: "
11: 
12: for f in `cat list`;
13: do
14:     cp -v "$f" "$f".bak
15: done
16: 

C-Stil for-Schleife

Bash kennt au for-Schleife im C Stil mit initiliasierigs, abbruch und iterations Teil.

Beispiel 9.2. Schleife - for-Schleife C-Stil

1: #!/bin/bash
2: 
3: # for schleife
4: echo "Zeige Backup: "
5: 
6: for ((i=0; i < 10; i++))
7: do
8:     ls -lh "file$i.xml.bak"
9: done
10: 

C-Stil while-Schleife

Do nomol die gliech Schleife, aber jetzt mit änere while-Schleife.

Beispiel 9.3. Schleife - while-Schleife C-Stil

01: #!/bin/bash
02: 
03: # while schleife
04: echo "Zeige Backup: "
05: 
06: i=0
07: 
08: while ((i < 10))
09: do
10:     ls -lh "file$i.xml.bak"
11: 
12:     ((i += 1))
13: done
14: 

Kapitel 10. Spass im Netzwerk Teil I

`su -` oder `sudo su` um Administrator Zuegang z'becho. Jetzt bisch de Root Benutzer und chasch au Schade im System verursache, sofern d'Installation e gsundi System Resource Berechtigung het.

Statischi IP Adresse

`ip link` zeigt die momentan Netzwerkkonfiguration a.

`ip addr change 192.168.1.4/24 dev eth0` ändert d'Netzwerkadresse vo eth0 uf 192.168.1.4 für äs Netzwerk mit de Netzmaske 255.255.255.0, die wird durch d'Grössi vom Netz ageh 24.

`ip route add 192.168.1.0/24 dev eth0` füegt ä Route für's Netzwerk mit de Netzmaske 255.255.255.0 für d'Netwerkschnittstell eth0.

`ip route add default via 192.168.1.1` setzt d'Default Route uf d'Netzwerkaddresse 192.168.1.1.

`echo "nameserver 8.8.4.4" > /etc/resolv.conf` setzt de öffentlich Nameserver 8.8.4.4 i de Systemkonfiguration. DNS Afroge passiered jetzt über 8.8.4.4, Informatione zu Adresse vo dim Internet Provider chasch Online Dokumentatione hinzuebeziehe.

Dynamischi IP Adresse

`dhclient -v eth0` zum mit em DHCP Server z'kommuniziere um ä dynamischi Netzwerkadresse z'becho.

Firewall

`modprobe -v ip_conntrack ip_conntrack_ftp` zum lade vo de Firewall Kernelmodule.

`iptables --list` zum alli bestehende Firewallregle ufzliste.

`iptables -A INPUT --protocol tcp --destination-port 22 -j DROP` zum igehendi TCP Verbindige uf dä Port 22 z'blockiere. Port 22 wird per Konvention vom SSH Server verwendet oder alte FTP Server.

`iptables -D INPUT --protocol tcp --destination-port 22 -j DROP` um die obig Regle wieder z'lösche.

Fehlersuechi

`ping 192.168.1.1` erreichbarkeit vo dä Netzwerkadresse 192.168.1.1 überprüefe, Ping benutzt dezue s'ICMP Protokol.

`traceroute 8.8.4.4` alli Routing Pfäd ufliste wo zum Nameserver 8.8.4.4 vowendet werdet, dass passiert idem mor aktiv Paket a die Entsprechende Hops schickt.

`arp-scan -l` lokale ARP Scan durchfüehre, zeigt alli aktive Netzwerkschnittstelle a.

`nmap localhost` Port Scan für din eigene Computer durefüehre.

Kapitel 11. Spass im Netzwerk Teil II

Internetsiete bsueche

`wget -c http://xn--krhemann-1za.com/download/free-sounds.zip` um d'Zip-Datei free-sounds.zip vo minere Website abelade. D'Option -c bewirkt, dass de Download wietergführt wird noch Abbruch.

`curl http://xn--krhemann-1za.com/download/free-sounds.zip -o free-sounds.zip` das selbe wie obe mit em Program curl.

Lynx Screenshot

`LANG=C.UTF-8 lynx` um dä interaktive Webbrowser lynx z'öffne.

Tabelle 11.1. Lynx Tastekombinatione

TastekombinationBeschriebig
G zum ä Internet Adresse izgeh.
D Abelade vomne Link.
Ctrl-G S'momentane Kommando abbreche.
Up Pfiel Vorherige Link.
Down Pfiel Nächsti Link.
Page-Up Ufwärts fahre.
Page-Down Abwärts fahre.
Q lynx beende.

Openssh - Sicheri Shell

`systemctl start ssh` um de lokali SSH Server starte.

`ssh joelkraehemann@192.168.1.4` um de Benutzer joelkraehemann uf em Computer mit de Netzwerkadresse 192.168.1.4 amelde.

`ssh -X joelkraehemann@192.168.1.4` dasselbe wie obe aber demol mit X11 Wieterleitig. X11 isch äs Fenster System für Linux und erlaubt graphischi Programm über s'Netzwerk usz'füehre. So en Server wo Programm zur Verfüegig stellt nennt mor Awendigsserver.

`scp hallo-welt.sh joelkraehemann@192.168.1.4:/home/joelkraehemann/` kopiere d'Datei hallo-welt.sh über s'Netzwerk zu dem Computer mit de Adresse 192.168.1.4 is Vozeichnis /home/joelkraehemann. Mit em Paramenter -r chan mor Rekursive Vozeichnis über s'Netzwerk kopiere.

Windows Freigabe mit Samba

Hier e Bispiel Samba Konfiguration wo d'Standard Arbeitsgruppe WORKGROUP vowendet.

Beispiel 11.1. /etc/samba/smb.conf

[global]
   workgroup = WORKGROUP
   wins support = yes
   log file = /var/log/samba/log.%m
   max log size = 1000
   logging = file
   server role = standalone server
   obey pam restrictions = yes
   unix password sync = yes
   passwd program = /usr/bin/passwd %u
   passwd chat = *Enter\snew\s*\spassword:* %n\n *Retype\snew\s*\spassword:* %n\n *password\supdated\ssuccessfully* .
   pam password change = yes
   map to guest = bad user
   security = user
   usershare allow guests = yes

[homes]
   comment = Home Directories
   browseable = no
   read only = no
   create mask = 0775
   directory mask = 0775
   valid users = %S

      

`adduser --create-home --password PASSWORT admin` dä Befehl erstellt en Benutzer mit em Login admin und em Passwort PASSWORT, däbie wird s'Homeverzeichnis agleit. Das wär denn /home/admin.

Samba Client

`smbpasswd -a admin` erstellt de Samba Benutzer admin mit Password, wo denn igeh werde muess und mit Entertaste bestätige.

`systemctl restart smbd` zum dä Samba Daemon neu z'starte.

`smbclient -L localhost -U admin` zum Teste vom Zuegriff mit em Benutzer admin, mo mue selbe Passwort vom Erstelle ageh.

`mount -t cifs //192.168.1.4/admin /mnt -o username=admin,password=PASSWORT,domain=WORKGROUP` dä Befehl bindet d'Freigob vom admin is Vozeichnis /mnt/lfs i.

Kapitel 12. Software installiere

Inhaltsverzeichnis

Debian
Fedora
OpenSuse
Arch

Debian

`apt search samba` zum Paket sueche wo samba im Name oder Beschriebig hend.

`apt install smbclient` s'Paket smbclient installiere.

Fedora

`dnf search samba` zum Paket sueche wo samba enthalted.

`dnf install samba-client` s'Paket samba-client installiere.

OpenSuse

`zypper search samba` zum Paket sueche wo samba enthalted.

`zypper install samba-client` s'Paket samba-client installiere.

Arch

`pacman -Q samba` zum Paket sueche wo samba enthalted.

`pacman -S smbclient` s'Paket smbclient installiere.

Kapitel 13. Linux Container

Inhaltsverzeichnis

lxc

lxc

`lxc-ls` listed alli vofüegbare Container uf.

`lxc-create -n ubuntu-focal -t ubuntu -- -r focal` erstellt än Container ubuntu-focal ahand vonere Vorlag ubuntu für s'Release focal.

Falls obe en Fehler uftritt wägem Ubuntu Schlüsselbund wo fehlt, chasch de installiere uf debian mit dem Befehl: `apt install ubuntu-archive-keyring`.

Beispiel 13.1. lxc-create Usgob

Current default time zone: 'Etc/UTC'
Local time is now:      Thu Mar 26 16:53:47 UTC 2020.
Universal Time is now:  Thu Mar 26 16:53:47 UTC 2020.


##
# The default user is 'ubuntu' with password 'ubuntu'!
# Use the 'sudo' command to run tasks as root in the container.
##


      

Obe isch en Usschnit vo dä Usgob vom verherige Befehl `lxc-create`. Do drus chan mor entneh dass de Benutzer für de Container ubuntu heisst und s'Passwort ebefalls ubuntu. Zum Root Privileg z'erlange `sudo su` verwende.

`lxc-start -n ubuntu-focal` started de Container mit em Name ubuntu-focal.

`lxc-stop -n ubuntu-focal` zum dä Container stoppe.

`lxc-attach -n ubuntu-focal` zum in Container z'wechsle.

`lxc-destroy -n ubuntu-focal` zum dä Container z'lösche.

Kapitel 14. Virtualisierig

Inhaltsverzeichnis

QEmu

QEmu

`qemu-img create -f qcow2 debian-buster.img 40G` zum ä Virtuelli Festplatte mit em Name debian-buster.img z'erstelle. Das Abbild het s'Format qcow2 und d'Grössi 40 Gigabyte.

`wget -c https://cdimage.debian.org/debian-cd/current/amd64/iso-cd/debian-10.3.0-amd64-netinst.iso` zum s'Netzwerkinstallations Medium vo debian abez'lade.

`qemu-system-x86_64 -m 2048 -hda debian-buster.img -nic tap -cdrom debian-10.3.0-amd64-netinst.iso -boot d` zum d'Virtuelli Maschine z'starte. Diä VM het 2048 Megabyte Arbeitsspeicher, ä NAT Netzwerkschnittstell und booted vomene ISO Image.