03_bs_bash_ii_00faaa153ea2de3a8c56d16714377007.pdf
Document Details
Uploaded by RevolutionaryFern2779
Hochschule Esslingen
Full Transcript
BETRIEBSSYSTEME (BS) III. BASH PROGRAMMIERUNG (II) – UNIX SHELL UND BASH PROF. DR.-ING. RAINER KELLER PROF. DR. DENNIS GREWE 1 AGENDA l Wie entwickle ich Programme für die Bash? l Was ist ein UNIX Dateisystem? l Wie finde ich mich...
BETRIEBSSYSTEME (BS) III. BASH PROGRAMMIERUNG (II) – UNIX SHELL UND BASH PROF. DR.-ING. RAINER KELLER PROF. DR. DENNIS GREWE 1 AGENDA l Wie entwickle ich Programme für die Bash? l Was ist ein UNIX Dateisystem? l Wie finde ich mich im Dateisystem zurecht? 01.10.2024 Profs. Grewe & Keller | Betriebssysteme | Bash Programmierung 2 ZIELE l Entwicklung von kleinen Programmen für die Bash erlernen l Wichtigste Kommandos in der Bash zur Navigation und Interaktion mit dem Dateisystem. 01.10.2024 Profs. Grewe & Keller | Betriebssysteme | Bash Programmierung 3 QUIZ ZUR WIEDERHOLUNG https://partici.fi/54815345 [Bild von vecstock auf Freepik] 01.10.2024 Profs. Grewe & Keller | Betriebssysteme | Bash Programmierung 4 BASH SCRIPTING Quelle: Dennis Grewe 5 HINWEIS l Die nachfolgenden Inhalte sollten Sie direkt in Ihrer Linux-VM oder an einem Linux-Rechner machen 01.10.2024 Profs. Grewe & Keller | Betriebssysteme | Bash Programmierung 6 WAS SIND UNIX SHELL SCRIPTE? l Ein Shell Script ist eine Textdatei, welche eine Reihe von Kommandos zu einem ausführbaren Programmablauf zusammenfasst. l Beachte: Alles was normal in der Befehlszeile ausgeführt werden kann, kann zu einem Skript zusammengefasst werden. Ebenso kann alles, was in einem Skript zusammengefasst wurde, auch normal auf der Befehlszeile ausgeführt werden. Das Ergebnis ist beides Mal das selbe. 01.10.2024 Profs. Grewe & Keller | Betriebssysteme | Bash Programmierung 7 BEISPIELE FÜR SHELL SCRIPTE l Shell Scripte können einer Vielzahl von Anwendungsfällen dienlich sein: l User-Administration (Anlegen, Ändern, Löschen von Benutzern) l Starten- und Stoppen von Diensten (Web-, …, Datenbank-Server) l Einspielen von Updates einer Anwendung im Rechenzentrum l Überprüfen des laufenden Systems und dessen Dienste l Erstellen von Backups l … 01.10.2024 Profs. Grewe & Keller | Betriebssysteme | Bash Programmierung 8 FUNKTIONSUMFANG SHELL SCRIPTING (I) l Die Bash bietet viele vordefinierte Variablen und Funktionen für die Erstellung von Shell-Skripte: l Argumente: l $./myscript args1 args l $ echo “Argument one is $1 and two is $2“ l Bedingungen: if [[ some_test ]] read -p "What is your name? " name then # do something if [[ -z ${name} ]] fi then echo "Please enter your name!” else echo “Hi there ${name}” fi 01.10.2024 Profs. Grewe & Keller | Betriebssysteme | Bash Programmierung 9 FUNKTIONSUMFANG SHELL SCRIPTING (II) l Switch Case: read -p ”Enter a car brand: " car case $some_variable in case $car in pattern_1) Tesla) # do something echo –n “${car}’s factory is in USA.” ;; ;; pattern_2 | pattern_3 BMW | Mercedes | Audi | VW | Porsche) # something else echo –n “${car}’s factory is in Germany.” ;; *) *) # default commands echo -n “${car} is an unknown brand.” ;; ;; esac esac l Felder/Arrays: l $ my_array=("value 1" "value 2" "value 3" "value 4") l $ echo ${my_array} 01.10.2024 Profs. Grewe & Keller | Betriebssysteme | Bash Programmierung 10 FUNKTIONSUMFANG SHELL SCRIPTING (II) l For-Schleifen: users=“tony amanda john” for var in ${list} do for user in ${users} # do something do done echo “${user}” done l While-Schleifen: counter=1 read –p “What is your name? “ name While [[ $counter –le 10]] do while [[ -z ${name} ]] # do something do ((counter++)) echo “Name cannot be blank” done read –p “Enter a name again? “ name done echo “Hi there ${name} 01.10.2024 Profs. Grewe & Keller | Betriebssysteme | Bash Programmierung 11 FUNKTIONSUMFANG SHELL SCRIPTING (III) l Bash Funktionen: function hell() { function function_name() { echo “Hello Function!” # your commands } } hello # call the function l Debugging / Testing: l Mit dem Befehl set –x kann der Debug-Modus aktiviert werden, um alle ausgeführten Kommandos im Terminal schrittweise auszugeben l $ bash –x./my_script 01.10.2024 Profs. Grewe & Keller | Betriebssysteme | Bash Programmierung 12 REGELN FÜR PROGRAMMIERUNG VON SHELL-SCRIPTEN l Bei der Erstellung von Shell-Scripten sollten folgende Regeln berücksichtigt werden: l Dokumentieren: alles hinter einem # ist ein Kommentar l Shell festlegen: in der 1. Zeile – #!/bin/bash l Modular programmieren: KISS und UNIX-Philosophie l Sauber programmieren: wird ein Parameter erwartet? Sind Dateien verfügbar?... 01.10.2024 Profs. Grewe & Keller | Betriebssysteme | Bash Programmierung 13 BEISPIEL SHELL SCRIPT l Skripte erleichtern die Arbeit l Skript zur Identifikation aller laufenden Prozesse mit offenen Ports! l Minimiert die Anzahl der offenen Netzwerkports -> muss als Superuser / Root ausgeführt werden for PORT in `netstat -nat | grep -E 'LISTEN‘ | cut -f2-4 -d':' |cut -f1 -d' '|sed -e 's/://g'| sort -nu`; do PID=`fuser -n tcp $PORT | cut -c1-6`; echo ""; echo "INFORMATION FOR OPEN PORT $PORT:"; echo "----------------------------"; ps -f -q $PID done 01.10.2024 Profs. Grewe & Keller | Betriebssysteme | Bash Programmierung 14 UNIX DATEISYSTEMBAUM Quelle: [Image by freepik] 15 UNIX DATEISYSTEM (I) l Das UNIX Dateisystem stellt eine Virtualisierung des Festplattenspeicher als hierarchisches Dateisystem (engl. file system, oder FS) dar. Dateien sind in einem Verzeichnisbaum eingeordnet 01.10.2024 Profs. Grewe & Keller | Betriebssysteme | Bash Programmierung 16 UNIX DATEISYSTEM (II) l Die wichtigsten Verzeichnisse im UNIX Dateisystem sind: l / à Pfade werden unter Unix durch Slash “/“ getrennt (Windows mit Backslash “\“) l bin/ à Verzeichnisse mit Namen bin enthalten per UNIX-Konvention Binaries, d.h. ausführbare Programme l dev/ à Das /dev/ Verzeichnis enthält Dateien zum Zugriff auf „Devices“, also Geräte, die Hardware, … l etc/ à /etc/ enthält Konfigurationsdateien l home/ à In /home/ liegen alle Benutzerdateien l lib/ à Verzeichnisse mit Namen lib enthalten per UNIX-Konvention Bibliotheken (engl. libraries). l tmp/ à Im /tmp/ Verzeichnis werden temporäre Dateien gespeichert – Achtung: Admin könnte löschen! l usr/ à Im /usr/ Verzeichnis beinhaltet Dateien und installierte Programme (system-wide, read-only) 01.10.2024 Profs. Grewe & Keller | Betriebssysteme | Bash Programmierung 17 WAS SIND DATEISYSTEMRECHTE (FILE PERMISSIONS)? l UNIX erlaubt das Festlegen von Zugriffsrechten für jede einzelne Datei im Dateisystem um diese zu lesen (engl. read), zu verändern (engl. write), oder zu sehen (engl. view) l Geben wir den Verzeichnisinhalt „long“ aus: $ ls –al ↵ # List all files in long format total 200 drwxr-x---+ 30 dgre staff 960 Aug 16 07:46. drwxr-xr-x 5 root admin 160 Aug 16 07:45.. -rw-r--r-- 1 dgre staff 4008 Jul 26 21:46.bashrc drwx------@ 6 dgre staff 192 Aug 11 13:43 Desktop 01.10.2024 Profs. Grewe & Keller | Betriebssysteme | Bash Programmierung 18 WAS SIND DATEISYSTEMRECHTE (FILE PERMISSIONS)? $ ls –al ↵ # List all files in long format total 200 drwxr-x---+ 30 dgre staff 960 Aug 16 07:46. drwxr-xr-x 5 root admin 160 Aug 16 07:45.. -rw-r--r-- 1 dgre staff 4008 Jul 26 21:46.bashrc drwx------@ 6 dgre staff 192 Aug 11 13:43 Desktop User Größe Datum der Group Anzahl Verweise Bytes letzten Name der Datei oder Änderung des Unterverzeichnisses, 1. Typ (d=Directory, -=File, l=softlink) Namen beginnend mit „.“ 2. Rechte v. „User“ (r=read, w=write, x=execute) werden bei ls versteckt, 3. Rechte v. „Group members“ (hier staff) s. ls –a um diese zu sehen 4. Rechte v. „Other“ (auch Welt genannt) 01.10.2024 Profs. Grewe & Keller | Betriebssysteme | Bash Programmierung 19 ÜBUNG: SETZEN VON DATEISYSTEMRECHTE l Probieren Sie das Löschen eines Verzeichnis mittels rm (remove) auf der Laborumgebung: $ rm –fr /home/rakeller/ ↵ # rm = remove l Warum erhalten Sie eine Fehlermeldung? l Warum können Sie das Verzeichnis nicht Löschen? l Mit dem Befehl chmod (Change MODe) können Dateisystemrechte geändert werden: $ chmod 600 ~/.bashrc ↵ # setzt read/write owner $ ls –al ~/.bashrc ↵ # zum Vergleich Ausgabe im Long Format 01.10.2024 Profs. Grewe & Keller | Betriebssysteme | Bash Programmierung 20 SETZEN VON DATEISYSTEMRECHTE MIT CHMOD l Mit dem Befehl chmod (Change MODe) können Dateisystemrechte geändert werden: $ chmod 600 ~/.bashrc ↵ # setzt read/write owner l Jede Oktalzahl steht für bestimmte Benutzer/Rechte l 400: Der Besitzer (hier: dgre) darf die Datei lesen l 200: Der Besitzer (hier: dgre) darf die Datei schreiben l 100: Der Besitzer (hier: dgre) darf die Datei ausführen l 700: Der Besitzer (hier: dgre) darf die Datei lesen (4), schreiben (2) und ausführen (1) – 4+2+1 l 040: Die Gruppe (hier: staff) darf die Datei lesen l 020: Die Gruppe (hier: staff) darf die Datei schreiben l 010: Die Gruppe (hier: staff) darf die Datei ausführen l 004: alle anderen Benutzer („World“) dürfen die Datei lesen l 002: alle anderen Benutzer („World“) darf die Datei schreiben l 001: alle anderen Benutzer („World“) darf die Datei ausführen 01.10.2024 Profs. Grewe & Keller | Betriebssysteme | Bash Programmierung 21 SETZEN VON DATEISYSTEMRECHTE MIT CHMOD l Mit dem Befehl chmod (Change MODe) können Dateisystemrechte geändert werden: $ chmod 600 ~/.bashrc ↵ # setzt read/write owner l Für die obige Befehlszeile heißt das: l 1. Zahl (6) gibt an, dass Owner Lese-& Schreib-Rechte erhält, l 2. Zahl (0) gibt an, dass die Gruppe „staff“ und l 3. Zahl (0) alle anderen (“Welt“) keine Read-/Write-/Execute-Rechte haben! l Was würde der Wert 005 bedeuten? l Um das „Home“-Verzeichnis nicht zugreifbar für „Welt“ zu machen: $ chmod 700 ~ ↵ # zurücksetzen von HOME auf Zugriff nur für Owner 01.10.2024 Profs. Grewe & Keller | Betriebssysteme | Bash Programmierung 22 SETZEN VON DATEISYSTEMRECHTE MIT CHMOD l Die Rechte lassen sich auch „lesbar“ formulieren:Dateisystemrechte geändert werden: l Für Besitzer (user) schreibt man „u“, l Für Gruppe (group) schreibt man „g“, l Für Andere (other) schreibt man „o“ l Mit „+“ fügt man weitere Rechte hinzu, mit „-“ werden diese abgezogen, mit „=“ exakt gesetzt. l Mit Lesen „r“, Schreiben „w“ und Ausführen „x“ ergibt sich: $ chmod gu=rw ~/.bashrc ↵ # exakt rw&wr user & group $ chmod o+x ~/.bashrc ↵ # ‘other‘ darf ausführen $ chmod g-w ~/.bashrc ↵ # ‘group‘ darf nicht schreiben 01.10.2024 Profs. Grewe & Keller | Betriebssysteme | Bash Programmierung 23 DATEISYSTEMRECHTE FÜR VERZEICHNISSE l Für Dateien ist es nun klar, was die Rechte bedeuten. Wie sieht es aber mit Verzeichnissen(engl. directories) aus? l Lesen: der Verzeichnisinhalt darf angezeigt werden (ls Befehl) l Schreiben: Es dürfen Dateien/Verzeichnisse erzeugt werden l Ausführen: in das Verzeichnis darf gewechselt werden (cd Befehl) l Achtung: Es macht also keinen Sinn für Owner Lese- oder Schreibrechte für ein Verzeichnis zu verbieten! Für die Gruppe ‘group‘ oder Andere ‘other‘ (World) allerding schon. 01.10.2024 Profs. Grewe & Keller | Betriebssysteme | Bash Programmierung 24 ÜBUNG: DATEISYSTEMRECHTE FÜR VERZEICHNISSE l Aufgabe: Setzen sie Ihr “Home“-Verzeichnis auf nicht-schreib- und ausführbar für die Benutzergruppe ‘other‘ (World). Erlauben Sie aber das Lesen! Probieren Sie anschließend gegenseitig, ob sie eine (lesbare) Datei in Ihr Verzeichnis kopieren können? l Hinweis: Für das Kopieren einer Datei in der Shell können Sie den Befehl cp (copy) nutzen. l https://man7.org/linux/man-pages/man1/cp.1.html 01.10.2024 Profs. Grewe & Keller | Betriebssysteme | Bash Programmierung 25 UNIX DATEIINFORMATIONEN l UNIX speichert exakt die Informationen wann Dateien/Ordern/… l angelegt wurden (created) l diese das letzte mal gelesen wurden (accessed) l diese das letzte mal verändert wurden (modified) l Es muss daher gelten: l tCreated